2012-08-01 51 views
0

我有一個考試問題: 我的名字是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. 

ü可以給我建議其他的方法來創建表這樣的關係?

+0

你建議的方式是我會這麼做的。 – 2012-08-01 17:31:17

+0

謝謝,但問題也說:最多3個替代品。因此,必須有其他解決方案不是嗎? – rockstar 2012-08-01 17:33:24

+1

確信你可以將關係存儲在一個單獨的表中,如果你有更復雜的關係需要映射,這可能會更合適。或者我最喜歡的是將樹結構存儲在NoSQL數據庫中,在這種情況下,您的案例將整個樹存儲對象表示。 – 2012-08-01 17:36:35

回答

1

您已經省略了用於表示層次結構的「嵌套集模型」。

http://en.wikipedia.org/wiki/Nested_set_model


維基百科的文章提供了一個例子,以及鏈接到用大量的其他實施例的引用。

+0

你可以給這個問題的一個樣本解決方案與上述問題? – rockstar 2012-08-01 18:17:39