首页 文章

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

提问于
浏览
3

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

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

这些将被分为产品“家族”,这让我觉得它很简单,因为我可以为家庭创建一个表格,并有一个链接的家庭产品表来识别每个家庭的产品 - 假设每个变化是个别产品本身 .

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

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

tl;dr:

  • 产品变化可以设置(即,数量有限)或滑动比例(即,基本上是无限数量)

  • 因此我需要以下列方式存储'families'产品:

  • 产品可以在不同的属性上定义为'set'或'sliding scale'

  • 家庭中的新产品,甚至是滑动秤,都可以显示所有信息

  • 有道理!

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

2 回答

  • 5

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

    • 产品表;包含产品ID / SKU,产品名称,产品系列ID . 一排/产品 .

    • 产品系列表;包含产品系列ID,产品系列名称以及特定于产品系列的任何详细信息 . 一排/产品系列 .

    • 产品功能表;包含产品ID,功能ID,可能的功能类型,值,可能的值单位 . 多行/产品,一行/一行 .

    • 按功能ID链接到产品功能的功能查找表;包含功能ID,功能描述,功能类型以及可能的值单位(后两者在产品功能表中可能会更好,具体取决于您使用表格的方式) .

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

  • 4

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

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

    Craig Larman的书中描述了以下备选方案"Applying UML and patterns" - 获取更多细节的副本 . 或者参见here .

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

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

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

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

相关问题