2016-11-11 181 views
0

什麼是實現產品與價格,價格的多重取決於其屬性的同時,最好的辦法?我想存儲橙汁(小)10美元和橙汁(大)14美元。我應該如何管理這些記錄?這是我的工作。數據庫設計

**products** 
---------- 
id name 
1  orange juice 

**prices** 
---------- 
id product_id price 
1  1    10 
2  1    14 

**sizes** 
---------- 
id product_id size 
1  1    small 
2  1    large 

**prices_sizes** 
---------- 
id price_id size_id 
1  1   1 
2  2   2 

或者我應該像products_prices_sizes一樣?

+1

你有什麼理由讓這個4表設計?爲什麼你不想要一個「像products_prices_sizes一樣的設計」? – philipxy

回答

1

是的,你應該「像products_prices_sizes」。沒有理由不這樣做。您給出的設計是編碼(產品價格,尺寸)三元組,作爲冗餘對,((產品價格),(產品尺寸))對。也不清楚你爲什麼使用id作爲配對。

直截了當的最簡單的設計是:

-- "product PRODUCT in size SIZE has price PRICE" 
Product(product, size, price) 

要看看你是否應該分解成更小的表(即加入回去吧),你需要了解正常化這一點。在這種情況下,根據我們對應用程序的常識理解,{name,size}是唯一的候選鍵,表格在5NF中,不應該分解爲更簡單的表。僅僅因爲每個名字對有一個價格,這並不意味着你必須有一個二元關係。我不知道你爲什麼提出一對配對。

您可能需要產品ID。你可能想要大小ID。這是不太可能的,你會想要價格ID。但是你應該有一個理由有代替或除了「自然鍵」的ID。 (這是有原因的。)(你應該學習它們)。但這與是否應該有三方關係無關。

0

事情是這樣的:每一個產品和每一個尺寸都有一個id,價格表的價格分配給一對(產品,size_id)

**products** 
---------- 
id name 
1  orange juice 

**sizes** 
---------- 
id  size 
1  small 
2  large 

**prices** 
---------- 
id product_id size_id  price 
1  1    1   10 
2  1    2   14