我需要用 php 和 MySQL 构建一个家谱。我对缺乏开源可定制 html 家谱构建软件感到非常惊讶,但我离题了。我花了很多时间阅读有关存储 MySQL 有向图和家谱的文章。一切对我来说都很有意义:有一个包含节点(人)的表和一个包含边(关系)的表。
我唯一的问题是我不确定存储不一定相邻的关系的最佳方式,例如兄弟姐妹和祖父母关系。起初,我认为这没什么大不了的,因为我可以无形地强制执行一个父级(每个人都有父级)来解决这些连接。
然而,我还需要能够存储可能没有共同父母的关系,例如浪漫伴侣。我读过的所有内容都表明存在亲子关系,但由于浪漫的伴侣没有共同的父母(希望如此),我不确定如何将其存储在边缘表中。我应该使用不同的表还是什么?如果在同一张表中,我该如何表示?只要我在不熟悉的关系中这样做,我也可能在家人身上这样做。
总结起来就是三个问题:
- 如何表示横向关系?
- 如果横向关系有共同的父母,我该如何存储它?这应该是一个
family
存储其他横向关系的表上的标志?
- 当孩子距离两个或更多边缘(祖父母)但直接父母不可用时,如何存储父子关系?
感谢任何帮助,如果有人对某些 javascript/html 家谱构建软件有任何建议,那就太好了。
一个想法来自于Geneapro 模式 and 根魔法.
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 的“父亲”角色的人来计算任何人的父亲。然后你就可以得到那个人的父亲,你就得到了原来那个人的祖父。任何地方有人不认识,就用未知的数据创建这个人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)