【问题标题】:Modelling products with multiple variations对具有多种变化的产品进行建模
【发布时间】:2013-06-01 08:51:21
【问题描述】:

我目前正在开展一个项目,其中数据库将包含具有变体的产品,我想知道在数据库中对此进行建模的最佳方法。

我所说的“有变化的产品”是指 T 恤之类的东西,其中一件衬衫可以有多种尺寸和颜色,但本质上仍然是相同的产品。

这些将被分组到产品“系列”中,这让我认为这很简单,因为我可以为这些系列创建一个表并有一个链接 familyproducts 表来识别每个系列中的产品 - 使用假设每个变体本身就是一个单独的产品。

问题出现了,这些可变产品的某些属性将是一个设定的数量/价值 - 例如,颜色将是一组特定的颜色,但尺寸可以是任何东西,因为 T 恤(按照类比)是定制的这样做是基于测量的胸部尺寸。

由于项目的性质,无论何时创建产品,即使是“家庭”的一部分并且略有不同,都需要该产品的所有信息。

tl;博士:

  • 产品变体可以设置(即,数量有限)或按比例调整(即,本质上是无限的)
  • 因此,我需要以以下方式存储“系列”产品:
    • 产品可以在不同的属性上定义为“集合”或“滑动比例”
    • 家族内的新产品,即使是滑动刻度,也能显示所有信息
    • 有道理!

我不一定要寻找提供给我的数据库模型,只是一个指向正确方向的指针将是一个巨大的帮助,因为我非常迷失有效地做到这一点的最佳方法。

【问题讨论】:

  • “产品系列”是否共享一个 SKU,或者每个变体都有自己的 SKU?
  • 每个变体都有自己的。
  • 你需要对数据做什么?只是存储和检索,还是查询?例如。 “获取商品 xyz123 的产品信息”,或“查找所有尺寸为 23.4 的蓝色 T 恤”
  • @NevilleK 我需要同时做这两件事。

标签: database-design


【解决方案1】:

假设您的产品的功能集不相同(这从您的问题中似乎很明显),这种结构是有道理的:

  • 产品表;包含产品 ID/SKU、产品名称、产品系列 ID。一行/产品。
  • 产品系列表;包含产品系列 ID、产品系列名称以及特定于产品系列的任何详细信息。一行/产品系列。
  • 产品特性表;包含产品 ID、功能 ID、可能的功能类型、值、可能的值单位。多行/产品,一行/功能。
  • 按功能 ID 链接到产品功能的功能查找表;包含功能 ID、功能描述、功能类型以及可能的价值单位(后两者在产品功能表中可能会更好,具体取决于您使用表格的方式)。

这使您可以立即访问这些功能/等。您想要的,而不必担心“滑动比例”或诸如此类的事情。您还可以为您的非定量值的特征表中的值设置查找表(我认为您不会将其存储在特征表中,因为该表应该是 1 行/特征)。如果您的功能非常接近每个产品的唯一性,您可以跳过 1 行/功能查找表而只使用多行功能值表,但听起来并非如此。

【讨论】:

    【解决方案2】:

    这是一个相当普遍的问题——它通常被称为“我如何将对象继承映射到关系结构中”。有很多选择。

    Joe 所描述的通常称为“实体/属性/值”或 EAV。它非常灵活——你可以处理各种各样的数据属性而无需重新设计你的数据库——但它很快就会因复杂的查询而失去动力——想象一下要求所有颜色为红色、尺寸为 (M) 的 T 恤, S, L), 颈部尺寸大于 44。

    克雷格·拉曼 (Craig Larman) 的“应用 UML 和模式”一书中描述了以下替代方案 - 获取副本以获取更多详细信息。或见here

    首先,您可以在一个表中对每个子类之间的公共数据进行建模,并为每个子类创建一个单独的表。在您的示例中,您将有一个包含 SKU 等的“产品”表,以及一个包含 colourID、胸部测量等的“t-shirt”表。这意味着需要大量连接来检索多种不同的产品类型,但会给您一个相当“干净”的数据模型。

    Larman 描述的下一个模型是“超级表”——您有一个简单地包含所有可能列的表。丑陋而笨拙,但如果你只有几个子类型,可能是最简单和最快的。

    最后,“每个子类型一个表”选项 - 您只需将每种类型映射到其自己的表 - 例如“T 恤”、“裤子”、“帽子”等。非常干净且可预测,但很难跨产品类型查询。

    除了明显的 RDBMS 解决方案之外,您还可以查看面向文档的解决方案,例如通过使用您的数据库引擎对 XML 的支持。

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 2012-07-21
      • 2023-03-12
      • 2013-02-15
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多