En idé som kommer från Geneapro-schemat och RootsMagic .
person
------
person_id
name (etc)
life_event_types
----------------
life_event_type_id
life_event_type_description (divorce, marriage, birth, death)
life_events
-----------
life_event_id
life_event_type_id
life_event_description
life_event_date
life_event_roles
----------------
life_event_role_id
life_event_role (mother, father, child)
person_event_role
-----------------
person_id - who
life_event_id - what happened
life_event_role_id - what this person did
Så du kan ha en livshändelse av typen "födelse", och role_id berättar vilka som var föräldrarna och vem som var barnet. Detta kan utvidgas till äktenskap, dödsfall, skilsmässor, fosterföräldrar, surrogatföräldrar (där du kanske har 3 eller 4 föräldrar med ett mycket komplicerat förhållande) etc.
När det gäller att lagra mer avlägsna relationer kan du beräkna dessa. Till exempel kan du beräkna fadern för vem som helst genom att få personen som har rollen "fader" med ett matchande event_id. Du kan då få far till den personen, och du har farfar till den ursprungliga personen. Var som helst där någon är okänd, skapa personen med okända data.