电子商务项目的数据库设计(我应该使用EAV方法)

Moo*_*ons 4 database database-design

我即将设计我的第一个电子商务数据库.

我在大多数电子商务网站上发现的是,这些网站有Category,然后是SubCategory,然后又是SubCategory等等.并且SubCategory的深度不固定意味着One Category有六个嵌套的Sub Category,而另一些则有不同

现在所有产品都具有与之相关的属性.

现在我的问题是这些网站继续为嵌套子类别添加表,并继续为数据库中的属性添加列

要么

他们应用称为"EAV"模型的东西(如果我是对的)来解决这个问题,或者他们继续添加列和/或表,并继续更新WebPages,因为在我发现现在有一个新类别的许多网站上.

(如果他们使用EAV模型,那么网站性能受到影响不是..)

由于这是我的第一个电子商务项目,请为您提供一些有价值的建议.

谢谢,

任何帮助表示赞赏.

Joe*_*own 7

您需要的是产品功能EAV产品类别的嵌套集合组合.

虽然我当然同意EAV几乎总是一个糟糕的选择,但EAV是一个完美选择的应用是在线目录中处理产品属性.

想想网站如何显示产品属性......产品的属性始终显示为包含两列的垂直列表:"属性"| "值".有时,这些列表会显示多个产品的并排比较.EAV非常适合做这种事情.使EAV对大多数应用程序毫无意义且效率低下的原因正是使EAV对在线目录中的产品属性有意义且高效的原因.

每个人总是说"EAV是邪恶的!"的原因之一 是因为列名称(即属性的含义)是表驱动的,因此EAV中的属性是"无意义的",因此不是由模式定义的.模式的全部意义在于给出模型的含义,因此这一点很好. 但是,对于在线产品目录,产品属性的含义对系统本身并不重要.目录系统关注产品属性的唯一原因是将它们转储到列表中,或者可能转储到产品比较矩阵中.因此,在这种特殊情况下, EAV并不是邪恶的.

对于产品类别,您需要嵌套集模型,正如我在此问题的答案中所述.嵌套集可以非常快速地检索,并且能够以编辑时的一些预先计算成本为代价来遍历不平衡层次结构的多个级别.