我即将设计我的第一个电子商务数据库。
我在大多数电子商务网站上发现的是,这些网站有Category,然后是SubCategory,然后是SubCategory等等。并且SubCategory的深度不固定意味着一个类别有六个嵌套的子类别,而另一些有不同的
现在所有产品都有与之相关的属性。
现在我的问题是这些网站是否继续为嵌套子类别添加表格,并继续为数据库中的属性添加列
或
他们应用称为“EAV”模型的东西(如果我是对的)来解决这个问题,或者他们继续添加列和/或表继续更新WebPages,因为在我发现现在有一个新的网站上类别。
(如果他们使用EAV模型,那么网站的性能会受到影响。)
由于这是我的第一个电子商务项目,请提供一些有价值的建议。
谢谢,
感谢任何帮助。
答案 0 :(得分:7)
您需要的是组合 产品功能的EAV 和产品类别的嵌套设置。
虽然我当然同意EAV几乎总是一个糟糕的选择,但EAV是完美选择的一个应用程序是用于处理在线目录中的产品属性。</ p>
考虑网站如何显示产品属性......产品的属性始终显示为包含两列的垂直列表:“属性”| “值”。有时,这些列表会显示多个产品的并排比较。 EAV非常适合做这种事情。使EAV对大多数应用程序毫无意义且效率低下的原因正是使EAV对在线目录中的产品属性有意义和高效的原因。
每个人总是说“EAV是邪恶的!”的原因之一因为列名称(即属性的含义)是表驱动的,因此EAV中的属性是“无意义的”,因此不是由模式定义的。模式的全部意义在于给出模型的含义,因此这一点很好。 但是就在线产品目录而言,产品属性的含义对于系统本身而言非常重要。目录系统关注产品属性的唯一原因是将它们转储到列表中,或者可能转储到产品比较矩阵中。因此,在这种特殊情况下,EAV不会是邪恶的 。
对于产品类别,您需要一个嵌套集模型,正如我在this question的答案中所述。嵌套集可以非常快速地检索,并且能够以编辑时的一些预先计算成本为代价来遍历不平衡层次结构的多个级别。