我希望标题有点帮助。我使用 MySQL 作为我的数据库
我正在建立一个产品数据库,但不确定如何处理存储产品变体的价格/SKU。一个产品可能有无限的变体,每个变体组合都有自己的价格/SKU/等。
这就是我目前设置产品/变体表的方式:
PRODUCTS
+--------------------------+
| id | name | description |
+----+------+--------------+
| 1 | rug | a cool rug |
| 2 | cup | a coffee cup |
+----+------+--------------+
PRODUCT_VARIANTS
+----+------------+----------+-----------+
| id | product_id | variant | value |
+----+------------+----------+-----------+
| 1 | 1 | color | red |
| 2 | 1 | color | blue |
| 3 | 1 | color | green |
| 4 | 1 | material | wool |
| 5 | 1 | material | polyester |
| 6 | 2 | size | small |
| 7 | 2 | size | medium |
| 8 | 2 | size | large |
+----+------------+----------+-----------+
(`products.id` is a foreign key of `product_variants.product_id`)
我用这个示例数据创建了一个 SQLFiddle:http ://sqlfiddle.com/#!2/2264d/1
用户可以输入任何变体名称 ( product_variants.variant
) 并可以为其分配任何值 ( product_variants.value
)。用户可以输入的变体/值的数量不应受到限制。
这就是我的问题出现的地方:每次有人添加具有以前不存在的变体的产品时,为每个变体存储价格/SKU,而不添加新的表/列。
每个变体可能具有相同的价格,但每个产品的 SKU 是唯一的。例如,产品1
有 6 种不同的组合(3 种颜色 * 2 种材料),而产品2
只有 3 种不同的组合(3 种尺寸 * 1)。
我考虑过将组合存储为文本,即:
+------------+-----------------+-------+------+
| product_id | combination | price | SKU |
+------------+-----------------+-------+------+
| 1 | red-wool | 50.00 | A121 |
| 1 | red-polyester | 50.00 | A122 |
| 1 | blue-wool | 50.00 | A123 |
| 1 | blue-polyester | 50.00 | A124 |
| 1 | green-wool | 50.00 | A125 |
| 1 | green-polyester | 50.00 | A125 |
| 2 | small | 4.00 | CD12 |
| 2 | medium | 4.00 | CD13 |
| 2 | large | 3.50 | CD14 |
+------------+-----------------+-------+------+
但是必须有一种更好的、标准化的方式来表示这些数据。假设情况:我希望能够搜索不到 10 美元的蓝色产品。使用上述数据库结构,不解析文本是不可能的,这是我想要避免的。
任何帮助/建议表示赞赏=)