对具有多种变化的产品建模

时间:2013-06-05 15:14:08

标签: database-design

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

“有变化的产品”我的意思是像T恤这样的东西,一件衬衫会有各种尺寸和颜色,但仍然基本上是相同的项目。

这些将被分组为产品'家族',这让我觉得它很简单,因为我可以为家庭创建一个表格,并有一个链接家庭产品表来识别每个家庭的产品 - 使用假设每种变体都是单独的产品本身。

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

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

TL; DR:

  • 产品变化可以设置(即数量有限)或滑动规模(即基本上是无限数量)
  • 因此,我需要以下列方式存储“家庭”产品:
    • 产品可以在不同的属性上定义为“设置”或“滑动比例”
    • 家庭中的新产品,甚至是滑动尺度,都可以显示所有信息
    • 有道理!

我不一定在寻找一个可以提供给我的数据库模型,只是一个正确方向的指针将是一个巨大的帮助,因为我很遗憾有效地做到这一点。

2 个答案:

答案 0 :(得分:5)

假设您的产品中的功能集不相同(从您的问题中可以看出这一点),这种结构是有道理的:

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

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

答案 1 :(得分:4)

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

Joe描述的一般称为“实体/属性/值”或EAV。它非常灵活 - 您无需重新设计数据库即可应对各种各样的数据属性 - 但它很快就会出现复杂的查询 - 想象一下所有颜色为红色,尺寸为(M)的T恤,S,L),颈部大于44.

Craig Larman的书“应用UML和模式”中描述了以下备选方案 - 获取更多细节的副本。或者参见here

首先,您可以在一个表中为每个子类之间的公共数据建模,并为每个子类分别创建一个表。在你的例子中,你有一个带有SKU等的“产品”表和一个带有colourID,chestMeasurement等的“T恤”表。这意味着有很多连接来检索多种不同的产品类型,但是给你一个相当“干净”的数据模型。

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

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

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

相关问题