2012-07-15 27 views
1

我目前有一個表佔多數(如99%)的一個字段的數據依賴於一個字段,但其他1%依賴於其他字段。如何設計一個具有類似條目的數據庫表

例如,我有以下的價格表

product PK 
color PK 
cost 

以下是該表中某些條目

product|color|cost 
pen|red|$1.00 
pen|blue|$1.00 
pen|green|$1.00 
etc.... 
pen|black|$0.90 
pen|white|$0.85 
pencil|red|$0.50 
pencil|blue|$0.50 
pencil|green|$0.50 
etc... 
pencil|black|$0.35 
pencil|gray|$0.40 

我與此表時遇到的問題是,每當我有添加一個產品或顏色我必須添加數百個類似的條目到這個表。

我目前想存儲通過以下方式

pen|all_other_colors|$1.00 
pen|black|$0.90 
pen|white|$0.85 
pencil|all_other_colors|$0.50 
pencil|black|$0.35 
pencil|gray|$0.40 

我在正確的軌道上或有更好的數據庫設計,處理這個問題的數據?任何幫助或鏈接將不勝感激。我無法爲這個問題找到正確的措辭。

+0

獲取信息可能你總結你的問題?是不是要單獨管理每個價格?或者?即使沒有價格,您也需要管理哪些產品組合可用 – 2012-07-15 16:30:59

+0

在我的設計中,我假定產品在顏色表中可以有任何顏色。我希望減少插入數百種產品顏色組合條目的需求(每次我添加一個新產品(經常發生),並且只處理產品顏色組合的定價例外情況(這很少見)。您的答案是那種我正在尋找的東西。我可能會用一個「異常」表,但我不確定是否違反了任何數據庫設計理論。謝謝您的幫助! – 2012-07-15 20:20:31

回答

0
  • BaseProduct擁有的所有產品名稱及其價格
  • Product擁有所有可用的有效產品的色彩組合
  • ColorPrice是從基礎價格上的差異(偏移)。
  • ColorCharge具有有例外定價僅行(沒有行的ColorPrice = 0)

enter image description here

要爲特定基礎產品(specific_prodict_id

select 
     b.ProductName 
    , c.ColorName 
    , b.ProductPrice + coalesce(x.ColorPrice, 0.0) as ProductPrice 
from  Product  as p 
join  BaseProduct as b on b.BaseProductID = p.BaseProductID 
join  Color  as c on c.ColorId  = p.ColorId 
left join ColorCharge as x on x.BaseProductID = p.BaseProductID and x.ColorID = p.ColorID 
where p.BaseProductID = specific_prodict_id; 
1

您需要規範化的數據庫表

突破它在如下三個表:

產品

id | product 

顏色

id | color 

product_cost

id | Product_id | color_id | Cost 
+0

我確實有產品表和顏色表,但我仍然有同樣的問題。向產品表中添加一個條目迫使我爲product_cost表創建數百個類似的條目。 – 2012-07-15 13:43:00

+0

他們將不會類似使用每個產品的唯一主鍵 - 顏色 - 成本組合 – Lucifer 2012-07-15 13:47:05

+0

如果我向產品表中添加標記等產品,並且顏色表中的數百種顏色的標記價格相同除了顏色爲黑色和紅色的標記外,正確的方法是將數百個條目添加到product_cost表中? – 2012-07-15 13:59:41

0

你可以組的顏色放在一起,然後將價格爲整個集團:

enter image description here

而且你的例子可以類似地表示這個...

PRICE: 

    PRODUCT_ID GROUP_ID PRICE 
    pen   1   $1.00 
    pen   2   $0.90 
    pen   3   $0.85  
    pencil  1   $0.50 
    pencil  2   $0.35 
    pencil  4   $0.40 

GROUP: 

    GROUP_ID 
    1 
    2 
    3 
    4 

COLOR_GROUP: 

    GROUP_ID COLOR_ID 
    1   red 
    1   blue 
    1   green 
    2   black 
    3   white 
    4   gray 

COLOR: 

    COLOR_ID 
    red 
    blue 
    green 
    black 
    white 
    gray 

增加的複雜性是否值得它取決於你...

相關問題