Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
父子关系可能的mysql数据库表结构_Mysql_Sql_Tree - Fatal编程技术网

父子关系可能的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

我有一道考题: 我的名字是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`)
) 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实际上可能是更好的方法对我来说,这将取决于应用程序需要如何访问树关系。你能给出一个解决上述问题的示例吗?