Database design 具有多种变体的造型产品

Database design 具有多种变体的造型产品,database-design,Database Design,我目前正在从事一个项目,其中数据库将包含具有变体的产品,我想知道在数据库中对此进行建模的最佳方法 我所说的“有变化的产品”是指像t恤衫这样的东西,一件t恤衫有各种尺寸和颜色,但本质上仍然是同一件 这些将被分为产品“系列”,这让我觉得这足够简单,因为我可以为系列创建一个表,并有一个链接的familyproducts表来识别每个系列中的产品——假设每个变体本身就是一个单独的产品 问题在于,这些可变产品的某些属性将是一个设定的数量/值-例如,颜色将是一组特定的颜色,但尺寸可以是任何颜色,因为t恤(根据

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

我所说的“有变化的产品”是指像t恤衫这样的东西,一件t恤衫有各种尺寸和颜色,但本质上仍然是同一件

这些将被分为产品“系列”,这让我觉得这足够简单,因为我可以为系列创建一个表,并有一个链接的familyproducts表来识别每个系列中的产品——假设每个变体本身就是一个单独的产品

问题在于,这些可变产品的某些属性将是一个设定的数量/值-例如,颜色将是一组特定的颜色,但尺寸可以是任何颜色,因为t恤(根据类比)是定制的,因此基于测量的胸部尺寸

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

tl;医生:

  • 产品变化可以是设定的(即,有限数量的)或滑动比例的(即,基本上是无限数量的)
  • 因此,我需要以以下方式存储“系列”产品:
    • 产品可以根据不同的属性定义为“集合”或“滑动比例”
    • 家族内的新产品,甚至滑动比例,都可以显示所有信息
    • 有道理

我不一定要找一个数据库模型提供给我,只要有一个指向正确方向的指针就可以帮上大忙,因为我对有效实现这一点的最佳方法非常迷茫。

假设您的产品中的功能集不完全相同(从您的问题中可以明显看出),这种结构是有意义的:

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

这样,您就可以相当直接地访问您想要的那些功能/等等,而不必担心“滑动比例”之类的问题。您还可以为非定量值的要素表中的值设置查找表(我认为您不会将其存储在要素表中,因为该表应为1行/要素)。如果您的功能非常接近于每个产品的唯一性,那么您可以跳过1行/功能查找表,只使用多行功能值表,但情况并非如此。

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

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

Craig Larman的书《应用UML和模式》中描述了以下备选方案——请获取一份副本以了解更多细节。或者看看

首先,您可以在一个表中为每个子类之间的公共数据建模,并为每个子类创建一个单独的表。在您的示例中,有一个包含SKU等的“product”表,以及一个包含colorID、chestMeasurement等的“tShirt”表。这意味着要检索多个不同的产品类型,需要进行大量的连接,但可以为您提供一个相当“干净”的数据模型

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

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


除了显而易见的RDBMS解决方案之外,您还可以考虑面向文档的解决方案,例如,通过使用数据库引擎对XML的支持

“产品系列”是共享一个SKU,还是每个变体都有自己的SKU?每个变体都有自己的SKU。您需要如何处理数据?只是存储和检索,还是查询?例如,“获取xyz123项目的产品信息”或“查找23.4号的所有蓝色t恤”@NevilleK我需要同时执行这两项操作。