[英]How to create a dynamic tree like structure
我在数据库中有我家人的详细信息。 我想通过从表中读取来生成一个动态生成的族谱的网页。
我的表架构看起来像这样
id(int) name father(int) mother(int) spouse(int) dateOfBirth
其中father
, mother
和spouse
引用同一个表的id
列。 父节点和母节点的根节点将为null。
鉴于此数据,我如何动态生成族树。 我是设计表的新手,所以如果这个设计是次优的,那么建议另一个可以实现这个目标的模式。
关于如何开始至少入门的任何指示都将受到高度赞赏。
看看嵌套集模型 。
你的设计看起来还不错,但是通过这种设计,插入节点比将它们从表中取出更容易。
您可以查看嵌套集并实现该模型。 嵌套集更难以更新,但您可以使用单个查询获取任何子树的节点,因此我认为它很好地匹配您的问题(家族树不会经常更改:)。
除了嵌套集父子关系之外,您还需要一些元数据,如关系类型(Child,Sibling,Spouse),但我认为您可以轻松添加。
这个设计没问题,但你要么选择所有数据,然后在客户端构建树,迭代地检查返回的数组,或执行许多子查询,这也不是很好。
我所知道的最佳解决方案(对于分层结构,您也有配偶)将树路径存储在字符串字段中。 例如,你有一个id = 1的爷爷,id = 2和3的孩子,2有4个孩子和5个孩子。然后,他们分别有路径,“”,“1”,“1”,“1, 2“,1,2”。
您可以使用此结构按顺序检索树元素,使用ORDER BY path
子句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.