【问题标题】:Data model for products with attributes, with different prices for each attributes combination具有属性的产品的数据模型,每个属性组合具有不同的价格
【发布时间】:2019-05-28 13:39:00
【问题描述】:

我正在使用关系数据库 (MySQL) 开发通用电子商务解决方案,我想管理这样的产品:

  • 每个产品(例如木材塑料)都有几个属性(例如厚度宽度高度颜色)。
  • 反过来,每个属性可以有多个(例如3 mm5 mm表示厚度, bluered 表示颜色等),在每种情况下都有不同的价格

到目前为止一切顺利,我目前的方法依赖于 4 个表:

  • 产品(id、名称、描述)
  • 属性(id、名称、描述、类型)
  • attribute_values(idattribute_id、值)
  • attribute_product(attribute_idproduct_id、价格)

有了这个数据模型,我可以很好的结合产品和属性,例如:

  • 定义一个名为wood产品,它有2 个属性thicknessheight),而3 mm5 mm 选项用于厚度和bluered 颜色选项...

价格计算会出现问题,因为如果我在 attribute_product 数据透视表中声明 price,我仍然不知道选择了哪个值该特定属性和产品。

如何修改数据模型以能够以某种方式将产品与属性值“链接”? 提前致谢。

【问题讨论】:

  • 请提供一些数据样本和预期结果集

标签: mysql sql database database-design


【解决方案1】:

对,像attribute_product这样的链接表只链接1个实例到1个实例,而你的产品可以有多个属性,所以模型不起作用。

您所说的attribute_product 就是大多数人所说的产品。这是有代价的东西。所以我就称之为“产品”。您所说的产品可能是 product_categories。

所以属性表将是它的子表。

  • product_categories (id, desc) -- 例如。 “木头”
  • 产品(id、name、desc、category_id、price)——例如。 “木头:3x5mm 红色”
  • 属性(id、name、desc、type)——例如。 “厚度”
  • product_attributes (id, product_id, attribute_id, value) -- 每个产品多行;例如。 “3mm”“红色”

【讨论】:

  • 感谢您的回复。您的架构看起来与@DenisdeBernardy 在这里提出的架构相似:stackoverflow.com/questions/19144200/…... 但你们俩都将price 字段放在products 表(或SKUs 表)中。在我的情况下,价格必须从属性动态生成,因为我有由客户自己填写的选项(例如,具有宽度或高度的开放数字字段......)。在这种情况下,我无法为每个可能的宽度值创建一条线......有什么想法吗?
  • 换句话说,如果attributes不限于几个选项,并且可以由用户输入以完全定制他们的产品怎么办?
  • 那么木材会有价格吗,再加上 3mm 等的额外金额?
  • 是的,就是这个想法。客户将使用例如thickness(从下拉列表中选择几个可用值)来定制产品,但也会手动指定width(通过数字输入)等等......所以价格应该从所有属性动态生成。在此先感谢乔恩。
  • 听起来每个产品和attribute_value都有自己的价格,你想把它加起来得到总费用吗?如果是这样,您可以将价格字段添加到您的产品和属性值表中。链接和求和将发生在发票中。您可能需要在发票中为同一选定产品的属性值提供明细表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多