gpt4 book ai didi

mysql - 在数据库中保存树数据(家谱)

转载 作者:可可西里 更新时间:2023-11-01 08:55:05 27 4
gpt4 key购买 nike

我正在尝试存储家谱。这是我使用的平台,Zend framework, Mysql, Ajax我搜索了 stackoverflow 我遇到了这篇文章,它对处理对象方面的数据非常有帮助。

"Family Tree" Data Structure

我将简要说明我的用例。用户可以根据数据库中定义的几个关系创建家庭成员或 friend 。我也有关系模型。用户可以创建离婚配偶、 friend 等家庭成员。最大树可以很深,我们假设孙子的 child 最大,但它也可以扩展宽度。 sibling 和他们的家人。

我正在寻找一种高效的数据库设计,以缩短查询时间。如果我必须使用上面帖子中描述的数据结构,我必须保留它们,因为它们必须是模型。

为了表示,我计划使用可视化:组织结构图,来自 http://code.google.com/apis/chart/interactive/docs/gallery/orgchart.html#Example

我会总结我需要的东西

  1. 数据库设计
  2. 放置 Controller (ajax)和模型
  3. 用户将创建的人不会是任何其他用户。只是一些其他数据

是的,就是这样!当我完成项目时,我会在此线程上发布一个完整的解决方案,当然是在你们专业知识的帮助下

提前致谢

编辑我会贡献更多来详细说明我的情况

我有一个用户表、一个关系表和最后一个家谱/家谱表

Family 表必须具有与以下相似的结构

ID        userid              relation id             Name

1         34                   3 // for son             ABC
2 34 4 // for Wife XYZ
3 34 3 // for Mom PQR
4 34 3 // for DAd THE
5 34 3 // for Daughter GHI
6 34 3 // for Brother KLM

这种方法的缺点是会生成与其他节点的关系,例如儿媳、妻子的兄弟及其家人。

理想的做法是对于用户,我们可以添加 parent 、 sibling 、 child ,对于额外的关系,他们必须从家庭成员关系中派生出来,即姐夫必须派生为姐姐的丈夫或妻子的兄弟。

这就是我现在能想到的。我只需要实现指南。

希望这能帮助你们提供更好的解决方案。

最佳答案

我想从数据库的角度来看,最好像这样实现它

id | name | parent_male | parent_female

其他选项是字符串前缀

id | name | prefix 
1 | Joe | 0001
2 | Jack | 000100001 //ie. Joes son
3 | Marry| 0001 //ie. Jacks mother
4 | Eve | 0002 // new family tree
5 | Adam | 00020001 // ie. Eves son
6 | Mark | 000200010001 // ie. Adams son

其他(更有效的)算法,如 MPTT 假设数据是一棵树,在这种情况下不是(它有圆圈)。

为了证明它可行——选择 Mark 的祖 parent :

--Mark
SELECT prefix FROM family_tree WHERE id = 6;
-- create substring - trim N 4-character groups from the end where N is N-th parent generation => 2 for grandparent ==> 0002
--grandparents
SELECT * FROM family_tree WHERE prefix = '0002'
-- same for other side of family
-- cousins from one side of family
SELECT * FROM family_tree WHERE prefix LIKE '0002%' AND LENGTH(prefix) = 12

关于mysql - 在数据库中保存树数据(家谱),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6296263/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com