【发布时间】:2020-06-08 14:26:38
【问题描述】:
背景故事:
我正在构建一个电子商务网络应用程序(在线商店) 现在我开始选择数据库系统和合适的设计。 我一直在为产品属性开发设计
我一直在考虑选择 NoSQL (MongoDB) 或 SQL 数据库系统
我需要你的建议和帮助
问题:
当您选择产品类型(例如表格)时,它应该会显示该类型的相应过滤器(例如高度、材料等)。当您选择其他类型时,例如“汽车”,它会为您提供汽车特定的过滤器属性(例如燃料、发动机容量)
例如,在一个流行的在线商店中,如果您选择一种数据存储类型,您将获得针对该类型属性的过滤器,例如硬盘驱动器大小或连接类型
问题
哪种方法最适合解决此类问题?我在下面描述了一些,但也许您对此有自己的想法
MongoDB
可能的解决方案:
你可以很容易地实现这样的产品属性结构。
您可以为每个产品创建一个包含字段属性的集合,然后将您想要的任何内容放在那里,就像他们在此处建议的那样(字段“详细信息”):
https://docs.mongodb.com/ecosystem/use-cases/product-catalog/#non-relational-data-model
结构将是
问题:
使用这样的解决方案,您根本没有产品类型,因此您无法按产品类型过滤掉产品。每个产品在 attrs 字段中都包含它自己的任意结构,并且不遵循任何模式
也许我可以采用这种方法?
SQL
有像单表这样的解决方案,其中所有产品都存储在一个表中,您最终会得到与所有产品的属性编号一样多的字段。
或者为每种产品类型创建一个新表
但我不会考虑这些。一个非常笨重,另一个不够灵活,需要动态方案设计
可能的解决方案
有一种非常灵活的解决方案,称为 EAV https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model
我们的架构是:
这样的设计可能是在 MongoDB 系统上完成的,但我不确定它是为这样一个规范化的结构而设计的
问题
架构将变得非常庞大,并且非常难以查询和掌握
【问题讨论】:
标签: sql database mongodb database-design