【发布时间】:2010-10-26 15:05:29
【问题描述】:
可以肯定地说EAV/CR 数据库模型很糟糕。也就是说,
问题:应该使用什么数据库模型、技术或模式来处理描述电子商务产品的属性“类”,这些属性可以在运行时更改?
在一个好的电子商务数据库中,您将存储选项类别(例如电视分辨率,然后为每台电视设置一个分辨率,但下一个产品可能不是电视,也没有“电视分辨率”)。您如何存储它们、有效搜索并允许您的用户使用描述其产品的可变字段设置产品类型?如果搜索引擎发现客户通常根据控制台深度搜索电视,您可以将控制台深度添加到您的字段中,然后在运行时为每种电视产品类型添加一个深度。
优秀的电子商务应用有一个很好的共同特征,它们会显示一组产品,然后有“向下钻取”侧边菜单,您可以在其中看到“电视分辨率”作为标题,以及最常见的前五名电视搜索结果的分辨率。您单击一个,它只显示该分辨率的电视,允许您通过选择侧面菜单上的其他类别进一步深入研究。这些选项将是在运行时添加的动态产品属性。
进一步讨论:
长话短说,互联网上是否有任何链接或模型描述可以“从学术上”解决以下设置?我感谢 Noel Kennedy 提出了一个类别表,但可能需要大于那个。我在下面用不同的方式描述它,试图突出它的重要性。我可能需要更正视点来解决问题,或者我可能需要更深入地了解 EAV/CR。
喜欢对 EAV/CR 模型的积极响应。我的开发人员同事都说 Jeffrey Kemp 在下面谈到的内容:“新实体必须由专业人士建模和设计”(断章取意,请阅读下面的回复)。问题是:
- 实体每周添加和删除属性
(搜索关键字决定未来的属性) - 每周都有新实体到货
(产品由零件组装而成) - 旧实体每周消失
(已存档,不太受欢迎,季节性)
客户想要为产品添加属性有两个原因:
- 部门/关键词搜索/同类产品对比图
- 结帐前的消费者产品配置
属性必须有意义,而不仅仅是关键字搜索。如果他们想比较所有有“奶油糖霜”的蛋糕,他们可以点击蛋糕,点击生日主题,点击奶油糖霜,然后检查所有有趣的蛋糕,知道它们都有奶油糖霜。这不是特定于蛋糕的,只是一个例子。
【问题讨论】:
-
为什么不能有一个“类别”表,外键引用它自己?
-
说 EAV 数据库模型不好并不安全,也不准确,因为它非常适合某些应用程序。
-
如果你用各种属性装饰各种对象,像在 Entity Framework 4 中那样从父对象继承呢?它如何持久化这些对象?
-
回到这篇优秀的文章,该文章讲述了一位顾问使用基于extreme 版本EAV 的系统的经验。阅读! simple-talk.com/opinion/opinion-pieces/bad-carma
-
EAV 是一种非常可行的数据库模型。我正在解决与您类似的问题,解决方案是 EAV。我会推荐以下文章:sqlblog.com/blogs/aaron_bertrand/archive/2009/11/19/…
标签: sql database design-patterns entity-attribute-value key-value