我有一个考试问题: 我的名字是D.我是三个小孩的父亲,A,B和C.我有一个父母Z.我的父母有一个父母X我有一个兄弟,Y.我存储在一个Mysql数据库中。亲子关系可能的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 =下一个可用素数 Product =(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.
ü可以给我建议其他的方法来创建表这样的关系?
你建议的方式是我会这么做的。 – 2012-08-01 17:31:17
谢谢,但问题也说:最多3个替代品。因此,必须有其他解决方案不是吗? – rockstar 2012-08-01 17:33:24
确信你可以将关系存储在一个单独的表中,如果你有更复杂的关系需要映射,这可能会更合适。或者我最喜欢的是将树结构存储在NoSQL数据库中,在这种情况下,您的案例将整个树存储对象表示。 – 2012-08-01 17:36:35