用多个变量建模产品

3
我目前正在处理一个项目,其中数据库将包含具有变化的产品,我想知道在数据库中建模的最佳方法。
所谓“具有变化的产品”,是指像T恤这样的东西,一个单独的衬衫将有多种尺寸和颜色,但本质上仍然是相同的物品。
这些将被分组成产品“系列”,这使我认为这将是非常简单的,因为我可以为系列创建一个表,并创建一个链接familyproducts表以识别每个系列中的产品-使用每个变体本身是一个单独的产品的假设。
问题在于这些可变产品的某些属性将是固定的数量/值-例如,颜色将是一组特定的颜色,但尺寸可以是任何东西,因为T恤(按比喻)是定制的,因此基于测量的胸围大小。
由于项目的性质,每当创建产品时,即使是系列的一部分并且略有不同,也需要所有产品的信息。
简而言之: - 产品变体可以是固定的(即有限数量)或滑动比例(即基本上是无限数量) - 因此,我需要以这样的方式存储产品系列,即: - 可以将产品定义为具有变化的“设置”或“滑动比例” - 系列中的新产品,即使是滑动比例,也可以显示所有信息 - 有意义!
我不一定需要提供数据库模型,只需要指点方向将是巨大的帮助,因为我对如何有效地处理此问题感到非常迷茫。

“产品系列”是否共享一个SKU,还是每个变体都有自己的SKU? - landons
每个变量都会有自己的。 - Saladin Akara
你需要对数据做什么?只是存储和检索,还是查询?例如:“获取项目xyz123的产品信息”或“查找所有尺寸为23.4的蓝色T恤”。 - Neville Kuyt
@NevilleK 我需要两个都做。 - Saladin Akara
2个回答

5
假设您的产品功能集在不同产品之间并不相同(从您的问题中可以看出),则以下结构是有意义的:
  • 产品表;包含产品ID / SKU,产品名称,产品系列ID。每个产品一行。
  • 产品系列表;包括产品系列ID,产品系列名称以及与产品系列相关的任何详细信息。每个产品系列一行。
  • 产品特性表;包含产品ID,特性ID,可能的特性类型,值,可能的值单位。每个产品多行,每个特性一行。
  • 通过特性ID链接到产品特性的特性查找表;包含特性ID,特性描述,特性类型以及可能的值单位(后两个可能更适合于产品特性表,具体取决于您如何使用该表)。
这样,您就可以直接访问所需的功能等,而无需担心“滑动比例”或其他问题。您还可以为非定量值的特性表设置查找表(我认为您不会将其存储在特性表中,因为该表应该是每个特性一行)。如果您的特性与每个产品几乎唯一,则可以跳过1行/特性查找表,并只使用多行特性值表,但似乎情况并非如此。

4
这是一个相当常见的问题 - 通常被称为“如何将对象继承映射到关系结构中”。有许多选择。
Joe所描述的通常称为“实体/属性/值”或EAV。它非常灵活 - 您可以处理各种数据属性,而无需重新设计数据库 - 但在复杂查询方面很快就会失去效力 - 想象一下要求所有颜色为红色,尺码为(M,S,L),领围大于44的T恤。
以下替代方案在Craig Larman的书“应用UML和模式”中进行了描述 - 获取更多详细信息的副本。或参见此处
首先,您可以在一个表中对每个子类之间的共同数据进行建模,并为每个子类单独创建一个表。在您的例子中,您将拥有一个“产品”表,其中包含SKU等内容,以及一个“T恤衫”表,其中包含颜色ID、胸部测量等内容。这意味着需要进行许多连接以检索多个不同的产品类型,但可以给您提供一个相当“干净”的数据模型。
Larman描述的下一个模型是“超级表”-您只有一个包含所有可能列的表。丑陋而笨重,但如果您只有几个子类型,则可能是最简单和最快的方法。
最后,是“每个子类型一个表”的选项 - 您仅将每种类型映射到其自己的表中 - 例如“T恤衫”,“裤子”,“帽子”等。非常干净和可预测,但很难跨产品类型查询。
除了明显的关系型数据库解决方案外,您还可以查看面向文档的解决方案,例如使用数据库引擎对XML的支持。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接