I am working on a system that requires an extensible representation of human relationships, i.e. Families. I have created, in the past, both models that use Contacts joined via relationship(join) records and direct key based relations: MotherID, FatherID, SpouseID. Both can represent very complicated relationships. The schema for a join record system is very simple but has high maintenance issues because of the double joins, e.g. Father-->Son, Son-->Father. The direct key way is neat because with just a few bits of information I can discover any related contacts by identifying how two contacts share keys, but the schema gets large representing the many kinds of relations (SQL calls are one way to reduce the clutter).
So my question is what is the best physical model for a Relations DB that may one day contain a lot of records without bogging down, can be extended to handle new relationship types, and doesn't require crazy scripting to create/update relationships? What are the pitfalls? Is there another model I should consider?