我正在尝试存储一个家谱。 这是我正在使用的平台,Zend框架,Mysql,Ajax 我搜索过stackoverflow我遇到过这篇文章,它非常有助于处理对象数据。
我将简要说明我的用例。 用户可以根据数据库中定义的少数关系创建家庭成员或朋友。我也有关系模型。用户可以创建家庭成员,如离婚配偶,frineds。 Max the Tree可以很深,我们假设最大的孙子的孩子,但它也可以扩大宽度。兄弟姐妹&他们的家人。
我正在寻找一种有效的数据库设计,以减少查询时间。如果我必须使用上面帖子中描述的数据结构,我必须保留它们,因为它们必须是模型。
为表示我计划使用可视化:组织结构图 http://code.google.com/apis/chart/interactive/docs/gallery/orgchart.html#Example
我将总结我需要的东西
提前致谢
编辑我会更多地阐述我的情况
我有一个用户表,一个关系表,&最后一个家庭/家庭树桌
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
这种方法的缺点是产生与其他节点的关系,如媳妇兄弟和妻子。他们的家人。
理想的做法是为用户添加父母,兄弟姐妹,儿童和儿童。对于额外的关系,他们必须来自家庭成员的关系,即兄弟媳妇必须是姐妹的丈夫,或妻子的兄弟。
这就是我现在能想到的。我只需要实施指南。
希望这有助于你们提供更好的解决方案。
答案 0 :(得分:1)
我想从数据库的角度来看,最好像
那样实现它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
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