Database-Design

為什麼關係數據庫管理系統中不能存在多對多關係?

  • February 15, 2022

在閱讀 Joan Casteel 的 Oracle 11g Sql 時,作者提到關係數據庫中不存在多對多關係。我想知道這個事實背後的原因是什麼。

我認為這是一個術語問題。正如賈斯汀所說,現實世界中可能存在多對多的關係。但是,這需要數據庫中的中間表來彌合關係級別的差距。該中間表將呈現為一對多關係。從更高的層次來看,中間表左右兩邊的表代表了現實世界中的多對多關係。

詳細說明賈斯汀的商人範例。一個商家可以有很多客戶,就像他們可以有很多產品一樣。任何數量的客戶都可以購買任何數量的產品,就像任何數量的客戶可能已經購買了任何數量的產品一樣。但是您永遠不會嘗試在客戶或產品表中直接關聯這兩者。

相反,您將創建一個訂單表。對於每個單獨的客戶,您將與他們下的訂單數量建立一對多的關係。從產品方面來看,您的產品與訂單數量之間存在一對多的關係。

如果沒有以這種方式處理關係,請想像一個客戶表需要為使用者購買的每個產品提供一個列,或者一個產品表需要為每個購買該產品的客戶提供一個列。

京東在評論中提出了一個很好的觀點。另一個人可能會弄亂多對多關係的另一種方式是……

購買產品的單個通用列和客戶表中每個客戶購買的每個產品的行。這種非規範化設計會導致客戶表的基數不等於客戶數量的基數。多對多關係的橋接表

所以,在這點上,作者是對的。

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