我正在为一个电子商务应用程序设计数据库/域,但是我很难弄清楚如何存储产品。
这个网站将销售各种产品,例如笔、丁字裤、纹身、雨伞等等。这些产品会共享一些常见的属性,例如高度、宽度、长度、重量等等,但是有些产品有特殊的数据。例如,笔有不同的墨水颜色和笔尖/盖子,而小册子可以有不同类型的折叠方式。到目前为止,我已经想出了20多个额外的属性,但是这些属性可能只适用于网站上1%的产品。
因此,我想知道是否适合实现EAV模型来处理额外的数据。请记住,当客户在前端查看网站时,将会有类似于eBay和carsales.com.au的筛选侧栏。(因此要考虑到查询会比较频繁)
我不认为实现单表继承的方式是可行的,因为该系统需要保持灵活性。这是因为,将来我们可能会有更多的属性和新类型的产品。
我考虑的另一件事是使用NoSQL数据库(可能是MongoDB),但是我对这些类型的数据库了解甚少,那么它能解决我的问题吗?
选项评估:
- 拥有许多列的单个产品实体
- 分离的属性实体(EAV)
- 切换到无模式持久性
我正在构建一个带有属性实体的原型,以查看其灵活性,并测试性能和查询的控制程度。
编辑:当然,我也开放接受其他解决方案。