父子关系可能的mysql数据库表结构
我有一道考题: 我的名字是D。我是三个孩子A、B和C的父亲。我有一个父母Z。我的父母有一个父母X,我有一个兄弟Y。我存储在Mysql数据库中父子关系可能的mysql数据库表结构,mysql,sql,tree,Mysql,Sql,Tree,我有一道考题: 我的名字是D。我是三个孩子A、B和C的父亲。我有一个父母Z。我的父母有一个父母X,我有一个兄弟Y。我存储在Mysql数据库中 CREATE TABLE `test_tree` ( `idperson` int(11) NOT NULL, `name` varchar(45) DEFAULT NULL, `prime` int(11) DEFAULT NULL, `product` int(11) DEFAULT NULL, PRIMARY KEY (`idperson`) ) E
CREATE TABLE `test_tree` (
`idperson` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL,
`prime` int(11) DEFAULT NULL,
`product` int(11) DEFAULT NULL,
PRIMARY KEY (`idperson`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
INSERT INTO `temp`.`test_tree`
(`idperson`,
`name`,
`prime`,
`product`)
VALUES
('1', 'x', '2', '2'),
('2', 'z', '3', '6'),
('3', 'y', '17', '102'),
('4', 'd', '5', '30');
注:素数和乘积用于计算我的家庭的父子关系。
Prime=下一个可用的质数
乘积=(素数*父项的乘积)。素数的每一个乘积只能被这些素数所除
问题:创建树的其他方法有哪些?它们与当前解决方案相比如何?
我的回答:
Solution 1:
**test_tree**
-id pk
-parent_id fk (references id)
-name
Solution 2:
**person**
-id pk
-name
**relation**
-child_id fk (references person.id)
-parent_id fk (references person.id)
For me, solution 2 has redundant table.
您能给我推荐其他方法来创建这种关系的表吗?您省略了表示层次结构的“嵌套集模型”
wikipedia文章提供了一个示例,以及指向其他参考文献的链接,并提供了大量示例。您建议的方式就是我会这样做的方式。谢谢,但问题还说:最多3个备选方案。所以一定有其他解决方案,不是吗?当然您也可以将关系存储在单独的表中,如果你有更复杂的关系需要映射,那么这可能更合适。或者我最喜欢的方法是将树结构存储在NoSQL数据库中,在这种情况下,您可以将树的对象表示形式存储在整个数据库中。请查看更新后的问题。那可能是解决方案2吗?是的,你的解决方案2就是我所说的。正如我所说的,如果我使用关系数据库,我会使用解决方案1,但解决方案2是另一种方法,如果您想直接定义一些更复杂的关系(即个人id、父母id、祖父母id等),那么解决方案2实际上可能是更好的方法对我来说,这将取决于应用程序需要如何访问树关系。你能给出一个解决上述问题的示例吗?