My goal is to make genealogical data available to other applications through access to the DB. I had a look to the ZODB Wikipedia article and I am a bit frightened. Python objects are stored into the database as opaque records (There is no declaration of the data structure […] so new fields can be freely added …). This means no external application/program can use the DB without importing part of Gramps code.
ZODB looks to me as persistent storage of Python data between sessions, not as a “traditional” DB. By “traditional”, I mean I expect some independent operations can be done on the DB outside the program which created it, such as queries, statistics, maintenance, …
In a traditional RDBMS, there is a schema describing the data structure. Hence, an external program can use the data without having to know details about Gramps internals. This comes to a price: adding new fields requires to change the schema (and external programs). This is expensive but the structure is always clearly exposed.
Having a separation between Python and storage organisation could have many advantages. For instance, Narrative Web could be implemented as a set of queries against the DB without the need to generate individual static HTML pages. In this dynamic approach, displayed pages are always up-to-date with regard to the DB. We then trade disc space for time to dynamically generate the page.
Report generators could also be made independent from Gramps, perhaps participating in more stability.
Yes. Add also EventRef, ChildRef, PersonRef, PlaceRef and RepoRef at least for Notes (and Attributes?).