2017-01-30 72 views
0

我正在設計一個系統的關係數據庫,該系統存儲有關某些類型的產品,零售商和零售商的供應商的信息。數據庫設計 - 存儲等效

一些供應商的銷售同樣的產品 - 但是,他們沒有一個標準的鑑定,這意味着供應商A可能與ID 618261一種產品,就相當於給供應商B的產品的產品007162.

問題是,我不想爲不同的供應商多次存儲相同的產品。目前,我有以下表格:

等價

  • supplier1_id
  • supplier2_id
  • supplier1_product_id
  • supplier2_product_id

產品

  • ID(生成)
  • supplier_id
  • supplier_product_id

這似乎是一個壞主意。不管什麼時候被插入到「產品」,

  1. 「等同」必須進行查詢以找到每一個等價
  2. 「產品」必須查詢發現,如果同類產品中已存儲
  3. 如果等同找不到,該產品可以插入

有沒有更聰明的方法來做到這一點?

回答

1

這不是一種不常見的情況,不同的供應商很多時候都會有一個共同產品的SKU編號。此外,產品可能有不同的製造商,每個製造商都有自己的零件號。但讓我們看看供應商。

用簡單的英語,供應商可能會提供許多產品和產品可能從許多供應商提供。這種多對多的關係通過交叉表或交叉表來維護。如果您仔細考慮,SKU編號不是產品實體或供應商實體的屬性。相反,它是關係的一個屬性。是的,關係可能像任何實體一樣具有屬性。

create table ProductSupplier(
    ProductID int not null references Products(ID), 
    SupplierID int not null references Suppliers(ID), 
    UnitPrice currency not null, 
    SKU   varchar 
); 

UnitPrice很可能是一個單位價格的列表,根據訂單的數量會有所不同。因此它可能在另一個表格中 - 我在此添加它以顯示另外的供應商 - 產品關係屬性。

再次用簡單的英語,從這個表中的元組說,「這產品這個供應商有這個 SKU數量。「