![](/img/trans.png)
[英]column “parent_id” referenced in foreign key constraint does not exist when creating SQL table
[英]Table which contains parent_id in same table while using a foreign key
我有一張桌子,其中將包含各種類別。 以下是縮小的表結構:
tb_categories
category_id
category_name
category_parent_id
我在category_id上的category_parent_id上創建了一個外鍵約束,以便可以在同一張表中保持數據完整性。
第一個問題是,在同一張桌子上有一個外鍵是否是一個好習慣。 從我的思維方式來看,我認為在這種情況下是不錯的做法。
第二個問題是,如何存儲全局父實體的最佳方法是什么?
我想出了以下方法:
方法1:category_parent_id可以存儲null,唯一的null是名為All的全局父類別
方法2:category_parent_id無法存儲空值,並且全局對象ALL將包含其相同的category_id。 因此,僅對於此類別,category_id和category_parent_id都將相同。 沒有空值,我不能將此category_parent_id插入為0,因為0不存在為category_id
方法3:沒有全球父母,並且會有不同的“父母”。 例如,將“音頻,視覺”作為“父”,將MP3,“ WMA”作為“音頻”的子代,將MPEG,“ AVI”作為Visual的子代。 在整個方法中,方法1和2的原理相同。
方法4:這是我最不希望使用的最小方法,其中包括不具有此外鍵約束,因此可以將全局父級設置為0,而在任何其他類別中都不存在。
有什么建議么? 我正在尋找最佳實踐,而不是“行之有效”的東西。
有一個表引用是正常的。 在現實世界中有很多情況需要這種情況(“雇員->經理”是著名的教科書示例)。
而且,無論是單個全局父代還是多個全局父代,最終都將擁有一個“全局”父代。 因此,您需要提出一種方法。
我更喜歡方法1-沒有父元素的元素將根本沒有父元素,因為它很好地實現了您的業務規則。
如果您有復雜的查詢,將0
或將self稱為父代會產生問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.