数据库设计
问题描述:
什么是实现产品与价格,价格的多重取决于其属性的同时,最好的办法?我想存储橙汁(小)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一样?
答
是的,你应该“像products_prices_sizes”。没有理由不这样做。您给出的设计是编码(产品价格,尺寸)三元组,作为冗余对,((产品价格),(产品尺寸))对。也不清楚你为什么使用id作为配对。
直截了当的最简单的设计是:
-- "product PRODUCT in size SIZE has price PRICE"
Product(product, size, price)
要看看你是否应该分解成更小的表(即加入回去吧),你需要了解正常化这一点。在这种情况下,根据我们对应用程序的常识理解,{name,size}是唯一的候选键,表格在5NF中,不应该分解为更简单的表。仅仅因为每个名字对有一个价格,这并不意味着你必须有一个二元关系。我不知道你为什么提出一对配对。
您可能需要产品ID。你可能想要大小ID。这是不太可能的,你会想要价格ID。但是你应该有一个理由有代替或除了“自然键”的ID。 (这是有原因的。)(你应该学习它们)。但这与是否应该有三方关系无关。
答
事情是这样的:每一个产品和每一个尺寸都有一个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
你有什么理由让这个4表设计?为什么你不想要一个“像products_prices_sizes一样的设计”? – philipxy