6

我需要在 php 和 MySQL 中建立一个家谱。我对那里缺乏开源可定制的 html 家谱构建软件感到非常惊讶,但我离题了。我花了很多时间阅读有关存储 MySQL 有向图和家谱的信息。一切对我来说都是有意义的:有一个带有节点(人)的表和一个带有边(关系)的表。

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

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

总结一下,三个问题:

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

感谢任何帮助,如果有人对一些 javascript/html 家谱构建软件有任何建议,那就太好了。

4

3 回答 3

7

来自Geneapro 模式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

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

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

于 2011-04-25T00:35:54.543 回答
2
person
-------
person_id
other_stuff

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

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

我把日期放在了一个有趣的子讨论/思想挑衅上。

于 2011-04-24T23:34:52.947 回答
1

GEDCOM 数据模型Gramps 数据模型是用于在不同工具之间交换基因数据的两种最流行的格式。使用这些数据模型中的任何一个都应该 (1) 使您的工具与其他工具更加兼容,并且 (2) 确保您的数据模型与许多特殊情况兼容,因为这两种数据模型都是专门为处理基因数据而设计的。

Oxy-GenGramps PHP 导出器等工具应该可以帮助您了解如何将 GEDCOM 数据导入数据库。

有关更多详细信息,另请参阅我对“家谱”数据结构的回答。

于 2015-07-03T12:33:37.020 回答