3

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

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

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

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

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

tl;博士:

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

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

4

2 回答 2

5

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

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

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

于 2013-06-05T15:27:51.737 回答
4

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

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

Craig Larman 的“应用 UML 和模式”一书中描述了以下替代方案 - 获取副本以获取更多详细信息。或看这里

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

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

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

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

于 2013-06-07T10:52:17.607 回答