数据库设计与产品,属性和价格

时间:2016-11-11 11:41:15

标签: database-design database-normalization

实现具有多个价格的产品的最佳方法是什么,价格同时取决于其属性?我想储存橙汁(小)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的东西吗?

2 个答案:

答案 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
相关问题