ProximityDatabase

Last edit March 19, 2008
A database with two tables: A "record" table and a "link" table, each with a very few attributes. All intelligence coming out of the database is the product of joins between those two tables. For more information, and a more accurate description, see ProximitySoftware.

Even better: a database with a "relation" table for storing binary relations of various classes, a one-column table of objects, and a set of tables for holding "fields" of various data types. Each field gets a field class. Implementing collections in such a monster is a matter of defining more than one instance of a field for a particular object. So, rather than two tables, you have one table for a particular data type in the underlying database system. A bignum_fields and long_int_fields table, for example, and a text_blob_fields table.

Advantages:
  • not so hard to coerce these things into NormalForm.
  • the data structure is way more flexible, and can be modified and extended very cheaply
  • space savings
  • semantically, relation fields are different from other big_int entries. Deriving structure becomes a bit easier.

Disadvantages:
  • essentially you're implementing a database in a database.
  • concurrency becomes more of an issue than with table-level locking.
  • you're marshalling objects into a referential system.
  • it can get silly very quickly.

See Also: DynamicRelational EntityAttributeValue