Using data from multiple tables in LiveView


I have a representation of a printed document using the following hierarchy:


Each document has many sections and each section has many fields. The documents, sections and fields are persisted in their corresponding tables. So there is a table for documents, a table for sections and a table for fields.

I have a working front end written in Ember which I want to replace with LiveView. Some of the features that I want to implement in LiveView are:

  • Update fields on blur
  • Update fields based on the values of other fields (the calculations are run in the backend)
  • Open embedded forms to insert new data in some sections (like adding multiple addresses)

I am not sure which, if any, of the following approaches is better.

Approach A

Convert the document tree to a single embedded_schema and use a changeset in the form. In this case it is easier to work with the form because all the data is handled as if it came from a single table. However I have to write a function to populate the embedded_schema and another one to get the data from the form and persist the data in the corresponding tables.

Approach B

Since the fields are not positioned in the page in the same order that they are retrieved from the database. Then in the template I could search the document tree for each field to get the value and input type and create the input tag accordingly. When a blur event is received in the server, search again the field’s struct in the document tree and persist the changes.

Approach C

Use a LiveView for each field in the document. In this case I am not sure if I can update automatically a field based in the values of other fields since they are in distinct LiveViews.

Which approach should I follow?
Are there other approaches that I have not considered?

Any comments will be very helpful.

Hector Sansores