实现具有多个价格的产品的最佳方法是什么,价格同时取决于其属性?我想储存橙汁(小)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的东西吗?
答案 0 :(得分:1)
是的,你应该"有像products_prices_sizes"这样的东西。没有理由不这样做。您提供的设计是编码(产品价格,尺寸)三元组作为冗余对,((产品价格),(产品尺寸))。它还不清楚你为什么使用id成对。
直截了当的最简单的设计是:
-- "product PRODUCT in size SIZE has price PRICE"
Product(product, size, price)
要查看是否应将其分解为较小的表(连接回来),您需要了解规范化。碰巧在这种情况下,根据我们对您的应用程序的常识理解,{name,size}是唯一的候选键,该表在5NF中,不应该被分解为更简单的表。仅仅因为每个名称大小对有一个价格,这并不意味着你必须有二元关系。我不知道为什么你提出了一对配对。
您可能想要产品ID。您可能需要大小ID。您不太可能想要价格ID。但是你应该有一个原因来代替或除了#34;自然键"之外还有ids。 (并且有原因。)(你应该学习它们。)但这与是否应该有三向关系无关。
答案 1 :(得分:0)
这样的事情:每个产品和每个尺码都有一个id,价格表为一对(product_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