存储具有不同属性的类似产品

时间:2014-10-27 10:46:25

标签: mysql database database-design

我需要存储具有不同属性(如长度或颜色)的类似产品,我应该使用不同的ID添加此产品,还是将一个产品添加到具有许多属性的产品中?

我需要按属性(4个红色靴子,3个蓝色等)查看产品数量的主要问题,并且需要在产品页面上实现属性选择器。

如果创建一个id,如何在购物车表中存储具有所选属性的属性以及如何管理数量?

如果创建多个ID,则可以轻松管理数量,但如何实现属性选择?

我想到了一些用于将产品ID与属性和属性值相关联的SKU。但是如何将所有人联系在一起?

2 个答案:

答案 0 :(得分:1)

Tables用于存储您拥有的任何数据。如果您需要有关这些条目的任何特定信息,则必须使用不同的queries。例如,假设以下product表:

+----+-------------+-------------+
| ID | ProductNAme | ProductType |
+----+-------------+-------------+
| 1  | Product A   | Type A      |
+----+-------------+-------------+
| 2  | Product B   | Type A      |
+----+-------------+-------------+
| 3  | Product C   | Type B      |
+----+-------------+-------------+

您可以通过撰写以下Type A来获取query商品的数量(查看This Link以获得更好的理解):

Select count(*) as CountOfProduct from Product where ProductType="Type A";

修改

您在评论中提到,一种产品可能有不同的类型和不同的数量。你可以在一张桌子上做到这一点,但看起来很混乱。如果您希望这种情况发生,您需要在两个名为**relationship**product的表之间构建一个1-Many type

type表可能是这样的:

| TYPE_ID |   TYPE |
|---------|--------|
|       1 | Type A |
|       2 | Type B |
|       3 | Type C |

并且您的product表可能是这样的:

| PRODUCT_ID | PRODUCTNAME | QUANTITY | TYPE_ID |
|------------|-------------|----------|---------|
|          1 |   Product A |        3 |       1 |
|          2 |   Product B |        2 |       1 |
|          3 |   Product C |        1 |       2 |
|          4 |   Product C |        5 |       3 |

**请注意type_id是构建这两个表之间关系的外键。由于您可以拥有多个具有相同类型的产品(例如本例中的产品C),因此该表将是您的many表,类型表将是您的one表。因此,将foreign key放入many表后,您将建立one to many关系。

现在,为了将这两个表组合(或换句话说,join),您需要编写join查询,如下所示:

select ProductName,quantity,Type from Product p
inner join type t on t.type_id=p.type_id

,结果将是您想要的:

| PRODUCTNAME | QUANTITY |   TYPE |
|-------------|----------|--------|
|   Product A |        3 | Type A |
|   Product B |        2 | Type A |
|   Product C |        1 | Type B |
|   Product C |        5 | Type C |

Check this link out for the fiddle

答案 1 :(得分:0)

如果您正在构建电子商务网站,则此域概念通常称为“变体”;见here

通常,您有一个“产品”表,其中包含该项的主要属性,以及一个“变体”表,按产品ID链接回产品。

如果您只处理类似产品,您可以让变体表包含所有属性的列(例如尺寸,价格,颜色);如果您有许多不同类型的变体(例如衣服,鞋子,运动器材),那么您将参与“使用关系数据库进行继承建模”;见this回答。