Sql-Server

SQL Server 連結多對多表

  • October 26, 2019

我有一個場景,我們想要建構一個庫存描述系統,我正在嘗試設計架構,但需要一些指導以確保我不會偏離軌道。基本前提是:三個位置(銷售位置、運輸位置和目的地位置)的組合以及要發送的項目,用於確定應如何包裝和發送物品。將其分解為多個級別會變得更加複雜(級別1:將項目放入盒子中。級別2:磁帶盒等……)但仍然可以管理。

數據庫架構

當我們到達打包級別時,我們正在將所有欄位拖入以使用五個欄位進行 PK 以創建唯一記錄。

我的問題是,關鍵欄位長度是否有合理的限制。為每個組提供一個代理鍵然後繼續前進是否有意義?

因此,UniqueLocationLookup 將有一個欄位用作 ItemLookup 表中的標識符。

UniqueLocationID 和 Item 的組合將成為 LevelLookup 使用的另一個唯一鍵,依此類推……

堆疊的鑰匙方法(我的名字),你在桌子上攜帶鑰匙組合,往往會很快堆積起來,變得笨拙。我認為您開始通過問題中的範例看到這一點。

因此,如果您不想為所有關係拖動每個鍵,那麼代理鍵問題的答案是“”。

但是,有一個警告。您希望確保在每個查找表中強制查找表項組合的唯一性(在 SQL Server 中,使用 UNIQUE KEY)。例如,從下面的範例圖中:

位置查找表:

  • PK:LocationLookupID
  • 英國:LocationIDSales、LocationIDShip、LocationIDSend

ItemLookup 表:

  • PK:ItemLookupID
  • 英國:LocationLookupID、ItemID

LevelLookup 表:

  • PK:LevelLookupID
  • 英國:ItemLookupID、LevelID

在此處輸入圖像描述 看看當你這樣做時生活變得多麼簡單!

注意:當使用代理鍵時,我認為每個表至少有一個唯一鍵約束總是一個好主意。

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