3

我試圖在表中建模樹關係。例如,有「類別」,類別本身可以在父類別中。我是否應該使用外鍵在SQL中顯示樹關係

我的模式是:

id int PRIMARY KEY, 
parent_id int, 
name 

我的問題是,我應該標記PARENT_ID列作爲外鍵?外來意味着「外部」而不是自我參照。爲此目的是否有不同類型的鑰匙?

我的問題類似於: Self-referencing constraint in MS SQL,但我問了一個不同的問題,級聯不成問題。

+0

這裏是另一個SO張貼,你可能已經錯過:http://stackoverflow.com/questions/935098/database-structure-for-tree-data-structure – akf 2009-06-26 21:32:47

回答

10

自引用外鍵一直髮生。例如。一個員工可能會有另一個「員工」作爲他的經理,所以manager_id將是同一個表中employee_id字段的外鍵。

外鍵是用於表示分層數據的父節點的天然人選,雖然他們不是專門用於該:)

3

我不相信這是另一種類型的關鍵...外國關鍵在這種情況下會好的..它會執行對parent_id的約束,以確保它引用了一個有效的ID

6

如果你有很深層次的嵌套,可能不容易正確地選出特定的所有後代節點,因爲大多數DB不能很好地處理遞歸。另一種方法是使用所謂的「嵌套集模型」來表示關係。一個偉大的文章,請訪問:

http://www.intelligententerprise.com/001020/celko.jhtml

4

在同一個表中的兩列之間的外鍵映射的樹結構到關係數據庫時,經常被使用。但是,它不是唯一可用的方法。

請參閱本文替代reperesentations:Storing Hierarchical Data in a Database