Normalization

您如何規範化間接依賴於多對多關係的表?

  • May 4, 2016

我目前有以下數據庫設計:

  • 產品:包含各種描述屬性

    • 屬於許多 ProductSets
  • 產品集:

    • 有很多產品
    • 屬於許多商店
  • 店鋪:

    • 有一個 ProductSet
    • 必須通過某些關係集指定其產品集中每個產品的價格

我正在努力尋找以標準化方式合併最後一個項目符號的最佳方法。到目前為止,我想出的唯一解決方案是在 Store 和 Product 之間建立一個連接表,但這並不能保證商店在其 ProductSet 中具有所有(並且只有)產品的價格。什麼(如果有)是實現這一目標的最佳方式?

您可以創建一個表 ProductPrice:

CREATE TABLE ProductPrice (
 ProductID int NOT NULL,
 ProductSetID int NOT NULL,
 StoreID int NOT NULL,
 Price numeric(10,2) NOT NULL,
 PRIMARY KEY (ProductID, ProductSetID, StoreID),
 FOREIGN KEY (ProductID, ProductSetID) REFERENCES ProductProductSet,
 FOREIGN KEY (StoreID, ProductSetID) REFERENCES Store
)

ProductProductSet``Product形成和之間的多對多關係ProductSet

這兩個外鍵將確保價格指的是打算擁有此類產品的商店。然後您可以創建一個查詢來找出缺少哪些價格:

SELECT s.*, p.*
FROM Product p
JOIN ProductProductSet pps ON (pps.ProductID = p.ProductID)
JOIN Store s ON (s.ProductSetID = pps.ProductSetID)
LEFT JOIN ProductPrice pp ON (pp.ProductID = p.ProductID AND pp.StoreID = s.StoreID)
WHERE pp.ProductID IS NULL

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