Sql-Server

在數據庫圖中表示多對一關係

  • May 18, 2018

我有兩張桌子loadingDetail,並且stowageDetail

loadingDetail           | stowageDetail
[PK] loadingID (int)    | [PK] StowageID (int)
[PK] transactionID (in) | [PK] room (int)
                       | [UNIQUE] transactionID (int) 
  • transactionIDinloadingDetail可以在loadingID值不同時重複。
  • transactionIDinstowageDetail是唯一的。
  • 許多transactionID值 inloadingDetail只能有一個transactionIDin stowageDetail
  • transactionID沒有inloadingDetail時可以刪除transactionIDin stowageDetail(No Action)

我如何在數據庫圖中表示它?

附加資訊

我真的在尋找一個數據庫圖可能的答案。但是我試圖在數據庫圖中找到有關多對一關係的資訊,但似乎找不到。這種關係就像許多容器放在大盒子裡一樣。如果 Big Box 已經被移除,容器就可以被移除。支持的數據庫圖“我知道”是一對多的,在我的情況下不適合,因為首先刪除了 Box,然後是 Containers。

當loadingID不同時,loadingDetail中的transactionID可以重複

這是您的要求。表複合鍵已經在處理這個問題。

stowageDetail 中的 transactionID 是唯一的

這是你的要求

•loadingDetail 中的許多transactionID 在stowageDetail 中只能有1 個transactionID

這是你的要求。這個可以Unique index。或者它可以通過程式碼/觸發器來處理。這永遠不能是 FK 約束。您不能定義部分 FK 約束。

•loadingDetail中的transactionID可以在stowageDetail中沒有transactionID時刪除(No Action)

因為您無法定義部分 FK 約束。您必須通過程式碼處理此問題。**Instead of Trigger**非常適合這種情況。

我假設由於您的要求,您不能在 stowageDetail 表中將 transactionID 和 loadingID 定義為 FK。

讀這個

根據您的要求,您的設計已經可以了。添加任何其他候選鍵都是無用的。你不能通過 PK-FK 約束來做到這一點。

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