sql >> Base de Datos >  >> RDS >> Mysql

Árbol de relación (familia) de la tienda MySQL

Una idea que surge del esquema Geneapro y 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

Entonces, podría tener un evento de vida del tipo "nacimiento", y el role_id le dice quiénes fueron los padres y quién fue el niño. Esto se puede extender a matrimonios, muertes, divorcios, padres adoptivos, padres sustitutos (donde podrías tener 3 o 4 padres con una relación muy complicada), etc.

En cuanto a almacenar relaciones más lejanas, puedes calcularlas. Por ejemplo, puede calcular el Padre de cualquier persona obteniendo la persona que tiene el rol de 'padre' con un event_id coincidente. Luego puede obtener el padre de esa persona y tiene el abuelo de la persona original. En cualquier lugar donde alguien sea desconocido, cree a la persona con datos desconocidos.