我在数据库中有我家人的详细信息。我想通过从表中读取来生成一个动态生成的族谱的网页。
我的表架构看起来像这样
id(int) name father(int) mother(int) spouse(int) dateOfBirth
其中father
,mother
和spouse
引用同一个表的id
列。父节点和母节点的根节点将为空。
根据这些数据,我如何动态生成族谱。我是设计表格的新手,所以如果这个设计是次优的,请提出另一个可以实现这一目标的模式。
任何有关如何开始使用的指示都将受到高度赞赏。
答案 0 :(得分:2)
答案 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
子句按顺序检索树元素。