簡體   English   中英

使用外鍵時在同一表中包含parent_id的表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM