MySQL商店关系(家庭)树

时间:2011-04-24 23:30:01

标签: php html mysql directed-graph family-tree

我需要在php和MySQL中构建一个家谱。我很惊讶缺乏开源可定制的html系列树构建软件,但我离题了。我花了很多时间阅读有关存储MySQL有向图和家谱的知识。对我来说一切都很有意义:拥有一个包含节点(人)的表和一个包含边(关系)的表。

我遇到的唯一问题是我不确定存储不一定相邻的关系的最佳方式,例如兄弟关系和祖父母关系。起初我不认为这会是一个大问题,因为我可以无形地强制执行一个父母(每个人都有父母)来解决这些联系。

但是,我还需要能够存储可能没有共同父母的关系,例如浪漫伴侣。我读过的所有内容都暗示着亲子关系,但由于浪漫的伴侣不共享一个共同的父母(希望如此),我不知道如何将它存储在边缘表中。我应该使用不同的表格,还是什么?如果它在同一个表中,我该如何表示?只要我用不熟悉的关系做这件事,我也可以和家人一起做。

总结一下,有三个问题:

  • 我如何表示横向关系?
  • 如果横向关系有一个共同的父母,我该如何存储它?这应该是表格中存在其他横向关系的family标志吗?
  • 如何在孩子离开两个或多个边缘(祖父母)的情况下存储父子关系,但是直接父母不可用?

任何帮助都表示赞赏,如果有人对某些javascript / html系列树构建软件有任何建议,那就太棒了。

3 个答案:

答案 0 :(得分:7)

来自Geneapro schemaRootsMagic的想法。

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

所以你可以有一个类型为“出生”的生活事件,而role_id会告诉你谁是父母,谁是孩子。这可以扩展到婚姻,死亡,离婚,寄养父母,代孕父母(你可能有3或4个父母关系非常复杂)等等。

至于存储更远的关系,你可以计算这些。例如,您可以通过使具有匹配event_id的“父”角色的人来计算任何人的父亲。然后你可以得到那个人的父亲,你就拥有原始人的祖父。在任何人不知道的地方,创建具有未知数据的人。

答案 1 :(得分:1)

person
-------
person_id
other_stuff

relation
----------
person_id_1
person_id_2
relationship_type
begin_dt
end_dt

只需使用您感兴趣的任何值填充关系类型。(FK到某些选项列表会很棒)

我把日期放在一个有趣的小讨论/思想激励上。

答案 2 :(得分:1)

GEDCOM data modelGramps data model是两种在不同工具之间交换生成数据的最常用格式。使用这些数据模型中的任何一个都应该(1)使您的工具与其他工具更兼容;(2)确保您的数据模型与许多特殊情况相符​​,考虑到这两种数据模型都是专门为处理生成数据而设计的。 p>

Oxy-GenGramps PHP exporter这样的工具可以帮助您解决如何将GEDCOM数据导入数据库的问题。

有关详情,请参阅我对“Family Tree” Data Structure的回答。