2012-08-04 86 views
0

我有一個包含各種類別的表格。下面是一個縮小的表結構:使用外鍵時在同一個表中包含parent_id的表格

tb_categories 
    category_id 
    category_name 
    category_parent_id 

我在創建CATEGORY_ID上category_parent_id外鍵約束這樣的數據完整性可以在同一個表內舉行。

第一個問題是,在同一張桌子上有一個外鍵是不錯的做法。從我的思維方式來看,我認爲在這種情況下是的,這是一個很好的做法。

第二個問題是,如何存儲全局父實體的最佳方法是什麼?

我想出了以下方法:

方法1:category_parent_id可以存儲空值和唯一的空有權所有

方法2全球父類:category_parent_id不能存儲空值和全球parrent ALL將包含相同的category_id。因此,只有這個類別,category_id和category_parent_id都是相同的。沒有空值,我不能插入這個category_parent_id爲0,因爲0不存在作爲category_id

方法3:沒有全局父項,並且會有不同的'父項'。例如,將Audio,Visual作爲父母和MP3,將WMA作爲Audio的孩子,將MPEG,AVI作爲Visual的孩子。在整個這種方法中,方法1和方法2的原理都適用。方法4:這是我最不喜歡的方法,它包括沒有這個外鍵約束,因此全局父元素可以被設置爲0,這在其他任何類別中都不存在。

有什麼建議嗎?因爲我正在尋找最佳實踐,而不是「正常工作」。

+0

[有很少一個最好的設計解決方案與軟件問題。(http://www.codinghorror.com/blog/ 2008/03/revisiting-the-facts-and-fallacies-of-software-engineering.html)「Just works」就像它得到的一樣好。 – Andomar 2012-08-04 16:45:56

+0

我並不是指一般的「正義作品」。我指的是現在的正義工作,未來會出現問題。 – seedg 2012-08-04 17:02:34

回答

1

有表引用它本身是正常的。有很多現實世界的情景需要這種情況(Employee - > Manager是一個着名的教科書示例)。

而且,無論您是單個全球父母還是多個全球父母,您最終都會擁有「全球」父母。所以你需要想出一個辦法。

我更喜歡方法1 - 沒有父項的元素根本沒有父項,因爲它恰好實現了您的業務規則。

有,當你有複雜的查詢一個0或引用自父會出現問題

+0

這是我選擇的方法。 – seedg 2012-08-04 17:03:13

相關問題