Foreign-Key

單列上的多個外鍵

  • April 7, 2017

我有一張桌子Item,裡面有很多種類的物品。不同類型的項目連結到不同的資源,每個資源都有一個帶有主鍵的表。

目前為了實現這一點,我在表中有兩列ItemResource typeResource ID.

問題是,以某種方式重構Item表以便我可以設置外鍵的正確方法是Resource ID什麼?

最好不要僅僅因為這個原因而創建許多新表,或者不向表中添加許多新列Item,其中大部分都是空的。

編輯

*附加說明:*除了資源 id 之外,所有項目還具有多個其他欄位,其中一些可能僅由 some 使用Resource type

據我查閱,我看到了 4 個選項:

  1. 有一個Item包含列Resource type以及Resource ID所有附加列的表(上面解釋過的情況)。
  • (+) 更少的未使用單元格
  • (-) 一些未使用的單元格
  • (-) 沒有外鍵Resource ID
  1. 有一個表Item,其中每個列Resource type以及所有其他公共列都有附加列。
  • (+) 外鍵的可用性Resource ID
  • (-) 大量未使用的單元格
  1. 有一個Item只有公共列的表(甚至只有Item ID)+ 具有列的附加表:ID, Item ID, Value type, Value BIGINT, Value INT, Value STRING。第二個表將用於Resource ID’s 以及一個或另一個唯一的欄位Resource type
  • (+) 更小且數量恆定的未使用單元格
  • (+/-) 每個唯一欄位的更多空間,但總體上小於其他情況。
  • (-) 沒有外鍵Resource ID
  1. 每個新表Resource type
  • (+) 外鍵的可用性Resource ID
  • (+) 更多地控制每個Resource type
  • (-) 很多新表,隨著新表Resource type的引入,數量會增加。

我現在正在評估,這些案例中的哪一個對我的案例更有利。

決定在第二個和第三個選項之間使用一些東西 - 添加帶有列的附加表,Value type並為每個列添加單獨的列Resource type

  • (+) 更易於在程式碼中管理
  • (+) 外鍵的可用性Resource ID
  • (+) 表數沒有成本
  • (+) 能夠Resource type為每個添加多個不同的Item
  • Resource type(-) 為每個未使用的欄位使用額外的空間
  • (-)當資源 with被刪除時,缺乏級聯刪除相關的能力。Item``Resource ID

引用自:https://dba.stackexchange.com/questions/168766