2016-11-11 149 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