产品变体 - 如何建模?希望不是EAV?

时间:2014-07-22 22:22:44

标签: mysql database database-design data-modeling

鉴于产品,产品可能有变化(例如尺寸:小,中,大或颜色:白色,黑色)。如果产品具有多个变体,则总变化是各个变化的组合(例如,小白,小黑,中白,中黑,大白,大黑)。每种变体组合都将分配自己的SKU,价格,库存水平等。每种变化也将与一般产品详细信息(例如产品名称,产品描述等)相关联。

当您不知道变体可能是什么时,对产品变体进行建模的最佳方法是什么?我认为这可能是EAV,但过去我遇到过这个问题。想知道是否有更好的方法。

更新1:

这不是How to design a product table for many kinds of product where each product has many parameters的重复。

在阅读了接受的答案后,我仍然处于迷失状态。似乎我对EAV的不情愿是有根据的。所以也许我远离那个解决方案。此外,如果我使用EAV,那么总是存在哪些属性,例如价格,SKU和库存水平?我知道那些必须永远存在 - 因此,他们不需要EAV的灵活性。

@Bill Karwin说他的第一选择是使用Class Table Inheritance。我不确定这对我是否有用。我需要存储数万(甚至数十万)条记录。我不知道前面会有什么变体(我的代码会知道,因为它可以动态解析XML提要和电子表格 - 但不久之后)。因此,在这一点上试图预测我需要的其他表格是不可能的。

所以 - 我还是迷路了。如何为产品变体建模?

1 个答案:

答案 0 :(得分:0)

我不是EAV的捍卫者,但在某些情况下这是必要的,而且听起来像是你的情况之一。如果您不知道在设计时需要哪些属性,那么您的选择相当有限。

使用无模式设计可能是一种选择,因为NoSQL正在变得越来越主流,但仍然会涉及允许具有 n 动态属性的对象/文档的奇怪之处。

如果它满足您的需求,还可以考虑简单地使用描述每个产品的动态部分的BLOB或XML列。这将比EAV简化您的解决方案,但也限制了您的数据检索选项(取决于您的要求)。

  

此外,如果我使用EAV,那么属性是什么   总是在那里,比如价格,SKU和库存水平?

我绝对建议您尽可能明确地建模,并将您的解决方案(XML,EAV或其他)隔离到需要它的区域。没有理由比你必须限制自己。