The article's database allows two entries of the form: (marriage_id1, Tom, Mary) and (marriage_id2, Mary, Tom). to coexist in the database,
This mostly stems from using a set based on eq. If it used a custom equality function, this wouldn't problem. (The code implementing this involves a long trip into the weeds, and I wrote the article for people that have never heard of object databases... and for people that aren't necessarily comfortable with CL.)
The article's database also fails to handle the not uncommon case where two persons marry, divorce and then remarry (often consecutive times).
I would just add a fresh marriage object to the set. The reason we "change-class" on the marriage when divorcing is because a divorce cannot exist without a marriage. A remarriage is no different from a fresh marriage... in my mind anyway.
If you want to query on remarriages, though, then you should probably make a type for this. A quick "defclass" and you are set.
Some reasons relational databases are preferred: - ease of maintenance
Not sure there is a big difference here. There is some care and feeding that BDB requires, but nothing extreme. (You can also use a SQL-based database as the backend for Elephant.)
the relational model allows a standardized query language
There is no reason you couldn't declare classes so that information necessary for querying is present, and then add a query langauge on top of that. AllegroCache does exactly this.
constraints are handled within the database engine proper
I'm not sure why you see a difference between (network + relational database engine) and (rpc frontend + object database). I mean sure, you can touch the files on disk and ignore the RPC interface, but I can rm -rf /var/lib/mysql too. I don't see a difference in safety, other than the many years of production testing that the SQL databases have.
This is an implementation detail, though, and not a fundamental difference.
The article's database allows two entries of the form: (marriage_id1, Tom, Mary) and (marriage_id2, Mary, Tom). to coexist in the database,
This mostly stems from using a set based on eq. If it used a custom equality function, this wouldn't problem. (The code implementing this involves a long trip into the weeds, and I wrote the article for people that have never heard of object databases... and for people that aren't necessarily comfortable with CL.)
The article's database also fails to handle the not uncommon case where two persons marry, divorce and then remarry (often consecutive times).
I would just add a fresh marriage object to the set. The reason we "change-class" on the marriage when divorcing is because a divorce cannot exist without a marriage. A remarriage is no different from a fresh marriage... in my mind anyway.
If you want to query on remarriages, though, then you should probably make a type for this. A quick "defclass" and you are set.
Some reasons relational databases are preferred: - ease of maintenance
Not sure there is a big difference here. There is some care and feeding that BDB requires, but nothing extreme. (You can also use a SQL-based database as the backend for Elephant.)
the relational model allows a standardized query language
There is no reason you couldn't declare classes so that information necessary for querying is present, and then add a query langauge on top of that. AllegroCache does exactly this.
constraints are handled within the database engine proper
I'm not sure why you see a difference between (network + relational database engine) and (rpc frontend + object database). I mean sure, you can touch the files on disk and ignore the RPC interface, but I can rm -rf /var/lib/mysql too. I don't see a difference in safety, other than the many years of production testing that the SQL databases have.
This is an implementation detail, though, and not a fundamental difference.