From: Nick H. <ni...@gr...> - 2016-10-02 18:52:59
|
On 02/10/16 16:32, John Ralls wrote: > Note that the data displayed in the listviews (I'm going to just use that as a catch-all for "list- and tree-views"; easier to write and to read) has to be in memory anyway. Ideally we'd query for just the fields we want to display and load them directly into the listview's model. The listviews only store the handle and sortkey. The column display values are retrieved when required. There is a LRU cache to minimise database access. I think it is 1000 rows by default. I'll use the person view to illustrate my point about the secondary columns. Suppose we wanted to populate a Gtk.ListStore from a SQL query. What columns would we need? A surname and given_name column isn't enough to construct any chosen name format. For the birth and death date and place we need to join to the event table, but we don't have birth_handle and death_handle columns. Instead we have birth_ref_index and death_ref_index. Even if we could join to the event table, it has no date column. It does have a column for the place handle. The place table doesn't have a name column. A place can have multiple names. It only has the legacy title column which many users may not use. The tables don't have enough columns to provide even some basic functionality. So why not just include the gramps_id and order_by columns, both of which are indexed? Next look at the family table. It does have father_handle and mother handle columns, so we could join it to the person table to get the parent's names. Why does it have father and mother surname and first name fields? They are not even updated when a parent's name is edited. Nick. |