Foreign-Key
單列上的多個外鍵
我有一張桌子
Item
,裡面有很多種類的物品。不同類型的項目連結到不同的資源,每個資源都有一個帶有主鍵的表。目前為了實現這一點,我在表中有兩列
Item
:Resource type
和Resource ID
.問題是,以某種方式重構
Item
表以便我可以設置外鍵的正確方法是Resource ID
什麼?最好不要僅僅因為這個原因而創建許多新表,或者不向表中添加許多新列
Item
,其中大部分都是空的。編輯
*附加說明:*除了資源 id 之外,所有項目還具有多個其他欄位,其中一些可能僅由 some 使用
Resource type
。據我查閱,我看到了 4 個選項:
- 有一個
Item
包含列Resource type
以及Resource ID
所有附加列的表(上面解釋過的情況)。
- (+) 更少的未使用單元格
- (-) 一些未使用的單元格
- (-) 沒有外鍵
Resource ID
- 有一個表
Item
,其中每個列Resource type
以及所有其他公共列都有附加列。
- (+) 外鍵的可用性
Resource ID
- (-) 大量未使用的單元格
- 有一個
Item
只有公共列的表(甚至只有Item ID
)+ 具有列的附加表:ID
,Item ID
,Value type
,Value BIGINT
,Value INT
,Value STRING
。第二個表將用於Resource ID
’s 以及一個或另一個唯一的欄位Resource type
。
- (+) 更小且數量恆定的未使用單元格
- (+/-) 每個唯一欄位的更多空間,但總體上小於其他情況。
- (-) 沒有外鍵
Resource ID
- 每個新表
Resource type
- (+) 外鍵的可用性
Resource ID
- (+) 更多地控制每個
Resource type
- (-) 很多新表,隨著新表
Resource type
的引入,數量會增加。我現在正在評估,這些案例中的哪一個對我的案例更有利。
決定在第二個和第三個選項之間使用一些東西 - 添加帶有列的附加表,
Value type
並為每個列添加單獨的列Resource type
。
- (+) 更易於在程式碼中管理
- (+) 外鍵的可用性
Resource ID
- (+) 表數沒有成本
- (+) 能夠
Resource type
為每個添加多個不同的Item
Resource type
(-) 為每個未使用的欄位使用額外的空間- (-)當資源 with被刪除時,缺乏級聯刪除相關的能力。
Item``Resource ID