Une idée qui vient du schéma Geneapro et 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
Ainsi, vous pourriez avoir un événement de vie de type "naissance", et le role_id vous indique qui étaient les parents et qui était l'enfant. Cela peut être étendu aux mariages, décès, divorces, parents adoptifs, parents de substitution (où vous pourriez avoir 3 ou 4 parents avec une relation très compliquée), etc.
Quant au stockage des relations plus éloignées, vous pouvez les calculer. Par exemple, vous pouvez calculer le père de n'importe qui en obtenant la personne qui a le rôle 'père' avec un event_id correspondant. Vous pouvez alors obtenir le père de cette personne, et vous avez le grand-père de la personne d'origine. Partout où quelqu'un est inconnu, créez la personne avec des données inconnues.