我正在构建产品数据库,其中一个产品可能有多种变体,例如单个产品的尺寸、颜色、形状等。我遇到的棘手部分是数据库的结构,允许我链接依赖项,例如“红色”“M”“T 恤”或“蓝色”“XS”“裤子”在这种情况下是颜色和尺码的变体。我希望这些变体是通用的,所以我避免使用
sizes
、shapes
、colors
表格等。有些项目甚至可能根本没有任何变体,或者只有一个,例如只是颜色。
理想的形状应该是这样的
products
id | 名字 |
---|---|
1 | T恤 |
2 | 裤子 |
variants
id | 名字 |
---|---|
1 | 颜色 |
2 | 尺寸 |
variant_values
id | variant_id | 名字 |
---|---|---|
1 | 1 | 蓝色 |
2 | 1 | 红色 |
3 | 2 | XS |
4 | 2 | S |
5 | 2 | M |
product_variants
如果我提供已经与特定变体有关系的
variant_id
,我可能甚至不需要variant_value_id
。
id | 产品_id | variant_id | variant_value_id |
---|---|---|---|
1 | 1 | 1 | 1 |
product_variants
结构允许我拥有“蓝色T恤”记录,但我如何让这些variant_value_id
一起工作,以便我可以存储蓝色M T恤或红色XS裤子等?
我从这些线程中激发了我的模型......
...但找不到适用于我可以将变体组合在一起的情况的答案。
定义:
设计数据库表:
attributes
,其中包含 id、name 等列attribute_values
,其中包含 id、attribute_id、name 等列products
,其中包含 id、name 等列product_variants
,其中包含 id、product_id、attr_value_ids 等列这只是一个非常基本的例子。您的设计可能取决于业务规则、企业架构、代码/数据库优先等上下文。然而,这个简单的设计是您问题的一个答案。
最终创建变体取决于属性值的选择(例如中、大、蓝色、红色)。站在巨人的肩膀上,使用笛卡尔积这样的数学,根据属性值的选择生成所有可能的变体。有很多关于如何实现产品变体的示例。我建议看看开源项目。