如何创建一个像结构一样的动态树

时间:2011-03-08 09:56:25

标签: php javascript

我在数据库中有我家人的详细信息。我想通过从表中读取来生成一个动态生成的族谱的网页。

我的表架构看起来像这样

id(int)  name  father(int)  mother(int)  spouse(int)  dateOfBirth

其中fathermotherspouse引用同一个表的id列。父节点和母节点的根节点将为空。

根据这些数据,我如何动态生成族谱。我是设计表格的新手,所以如果这个设计是次优的,请提出另一个可以实现这一目标的模式。

任何有关如何开始使用的指示都将受到高度赞赏。

3 个答案:

答案 0 :(得分:2)

看看nested set model

答案 1 :(得分:0)

你的设计看起来还不错,但是通过这种设计,插入节点比将它们从表中移除更容易。

您可以查看nested sets并实施该模型。嵌套集更难以更新,但您可以使用单个查询获取任何子树的节点,因此我认为它很适合您的问题(族树不会经常更改:)。

除了嵌套集父子关系之外,你还需要一些元数据,比如关系类型(Child,Sibling,Spouse),但我认为你可以轻松添加它。

答案 2 :(得分:0)

这个设计没问题,但你要么选择所有数据,然后在客户端构建树,迭代检查返回的数组,或者执行很多子查询,这也不是很好。

我所知道的最佳解决方案(对于分层结构,您也有配偶)将树路径存储在字符串字段中。例如,你有一个id = 1的爷爷,id = 2和3的孩子,2有4个孩子和5个孩子。然后,他们分别有路径,“”,“1”,“1”,“1, 2“,1,2”。

您可以使用此结构使用ORDER BY path子句按顺序检索树元素。