我需要在php和MySQL中构建一个系列树。我很惊讶缺乏开源的可定制的HTML家族树构建软件,但我离题了。我花了很多时间阅读关于存储MySQL图和家族树的信息。一切都对我有意义:有一个有节点(人)的桌子和一个有边缘(关系)的桌子。MySQL商店关系(系列)树
我唯一的问题是我不确定存储不一定相邻的关系的最佳方式,例如兄弟姐妹和祖父母关系。起初我并不认为这会有什么大不了的,因为我可以不加区别地强制父母(每个人都有父母)来解决这些关系。
但是,我也需要能够存储可能没有共同父母的关系,如浪漫的伴侣。我读过的每一样东西都表明了一种亲子关系,但由于浪漫的伴侣不共享一个共同的父母(希望),我不知道如何将它存储在边缘表中。我应该使用不同的表格还是什么?如果它在同一个表格中,我该如何表示?只要我用不熟悉的关系来做这件事,我也可以和家人一起做。
综上所述,三个问题:
- 如何代表横向的关系?
- 如果横向关系有一个共同的父母,我该如何存储它?这是否应该是
family
表中存储其他横向关系的标志? - 如何将儿童的两个或更多边缘(祖父母)隔开,但直接父母不可用?
任何帮助表示赞赏,如果任何人有任何建议的一些JavaScript/HTML家谱树建设软件,那将是美好的。
这很有趣,有可能解决问题(如果需要,我会坚持使用占位符不留空格的建议)。我唯一的问题是如何透明地确定关系的方向?现在看来,我必须每次检查事件类型描述或角色,以判断一个节点相对于另一个节点的位置。 – 2011-04-25 13:39:49
@tandu我不确定'关系方向'是什么意思?我认为这归结于你的程序逻辑,而不是SQL。你的数据库仅仅存储(例如)'Bob'的'出生'事件,'Geoff'是父亲,'Alice'是母亲,'Bob'是'宝贝'。在你的程序中,如果你想确定谁是鲍勃的父母,那么你可以从person_event_role中选择,其中life_event_id是鲍勃的出生地,而life_event_role_id可以是母亲或父亲。 – 2011-04-25 13:54:50
这就是我所说的方向。例如,如果用户是Bob,我需要找到Bob的儿子,父亲和妻子在树中的哪个位置。他的儿子是南方,他的父亲是北方,他的妻子是西方或东方。不过,您似乎已经回答了:您正在说要根据人事活动角色来计算此方向。我不能在MySQL中透明地做到这一点,如果我不得不在PHP中检查每个字符串并计算方向,但我想你是说这不是模式。 – 2011-04-25 14:23:06