【发布时间】:2011-05-03 06:16:09
【问题描述】:
我正在为电子商务应用程序设计我的数据库/域,但我很难弄清楚如何存储产品。
该网站将出售各种各样的产品,钢笔、丁字裤、纹身、雨伞,应有尽有。这些产品中的每一个都有一些共同的属性,高度、宽度、长度、重量等,但有些产品有特殊的数据。例如,钢笔有不同的墨水颜色,笔尖/盖子和小册子可以有不同类型的折叠。到目前为止,我已经想到了大约 20 多个额外属性,但这些属性可能仅适用于网站上 1% 的产品。
所以我想知道是否适合实施 EAV 模型来处理额外数据。请记住,当客户在前端查看网站时,将会有一个过滤侧边栏,就像在 eBay 和 carsales.com.au 上一样。 (所以请记住,会有相当多的查询)
我认为实现类表继承并不实际,因为系统需要保持灵活性。这是因为,在未来我们可能会通过新类型的产品获得更多属性。
我考虑过的另一件事是使用 NoSQL 数据库(可能是 MongoDB),但是我对这些类型的数据库几乎没有经验,它甚至可以解决我的问题吗?
选项审查:
- 具有大量列的单一产品实体
- 单独的属性实体 (EAV)
- 切换到无模式持久性
我正在构建一个带有属性实体的原型,以了解它的灵活性,并测试性能以及查询的失控程度。
编辑:当然,我愿意接受任何其他解决方案。
【问题讨论】:
-
您手动构建电子商务应用程序是否有特殊原因?这可能很困难、很危险,而且可能有点不必要……
-
刚找到的this question 好像和你问的差不多。
-
@BenV,虽然问题很相似,但答案可能完全不同,尤其是与 Magento 相关的问题。 Magento 最初确实在 EAV 性能方面遇到了困难,但他们通过仔细缓存(查询、模型、html 块和整页)和可选的非规范化解决了这个问题。自从提出这个问题以来,这些都是新的发展,值得在这种情况下重新提出这个问题,恕我直言。
-
我正在制作的应用程序与典型的电子商务应用程序非常不同。我在 PHP 中找到的唯一可能的现有解决方案是 Magento,但它似乎相当复杂,而且对我来说学习它然后从头开始制作自己的解决方案同样困难/耗时。
-
@Cobby,很公平,您比任何人都更了解您的需求,但恕我直言,如果您觉得学习 Magento 很复杂,那么编写自己的电子商务应用程序不是我的事d 推荐。确实有数以万计的开发人员和架构师时间投入到像 Magento 这样的应用程序中,并且在此过程中留下了很多战斗伤痕。当您处理客户或您客户的钱时,我宁愿让其他人在过去犯过这些错误,而不是我......
标签: php database-design magento entity-attribute-value doctrine-orm