Un'idea che nasce dallo schema Geneapro e 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
Quindi potresti avere un evento della vita di tipo "nascita", e role_id ti dice chi erano i genitori e chi era il bambino. Questo può essere esteso a matrimoni, decessi, divorzi, genitori affidatari, genitori surrogati (dove potresti avere 3 o 4 genitori con una relazione molto complicata), ecc.
Per quanto riguarda la memorizzazione di relazioni più distanti, puoi calcolarle. Ad esempio, puoi calcolare il Padre di chiunque ottenendo la persona che ha il ruolo "padre" con un event_id corrispondente. Puoi quindi ottenere il padre di quella persona e hai il nonno della persona originale. Ovunque quella persona sia sconosciuta, crea la persona con dati sconosciuti.