gpt4 book ai didi

sql - 电子商务的产品属性数据库结构

转载 作者:行者123 更新时间:2023-12-05 07:12:39 25 4
gpt4 key购买 nike

背景故事:

我正在构建一个电子商务网络应用程序(在线商店)现在我要选择数据库系统和适当的设计了。我在开发产品属性设计时遇到了困难

我一直在考虑选择NoSQL(MongoDB)还是SQL数据库系统

我需要你的建议和帮助

问题:

当您选择产品类型(例如 table )时,它应该会向您显示该类型的相应过滤器(例如高度、 Material 等)。当您选择另一种类型时,比如“汽车”,它会为您提供汽车特定的过滤器属性(例如燃料、发动机容积)

例如,在一个流行的在线商店中,如果您选择一种数据存储类型,您将获得针对该类型属性的过滤器,例如硬盘驱动器大小或连接类型

enter image description here




问题

解决此类问题的最佳方法是什么?我在下面描述了一些,但也许你对此有自己的想法


MongoDB

可能的解决方案:

您可以很容易地实现这样的产品属性结构。

您可以为每种产品创建一个带有字段属性的集合,然后将您想要的任何内容放在那里,就像他们在此处建议的那样(字段“详细信息”):

https://docs.mongodb.com/ecosystem/use-cases/product-catalog/#non-relational-data-model

结构将是

enter image description here

问题:

使用这样的解决方案,您根本没有产品类型,因此您无法按产品类型过滤掉产品。每个产品在 attrs 字段中包含它自己的任意结构,并且不遵循任何模式

也许我可以以某种方式采用这种方法?

SQL

有像单表这样的解决方案,其中所有产品都存储在一个表中,您最终会得到与所有产品的属性编号一样多的字段。

或者为每种产品类型创建一个新表

但我不会考虑这些。一个非常笨重,另一个不太灵活,需要动态方案设计

可能的解决方案

有一种非常灵活的解决方案叫做 EAV https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

我们的模式是:

EAV enter image description here

这样的设计可能是在MongoDB系统上做的,但我不确定是不是为这样的规范化结构做的

问题

模式将变得非常庞大并且很难查询和掌握

最佳答案

如果你选择SQL数据库,看看PostgreSQL which supports JSON features .您不一定需要遵循数据库规范化

如果选择 MongoDB,则需要使用通用 {key:"field", value:"value"} 对存储 attrs 数组。

{id:1, attrs:[{key: "prime", value: true}, {key:"height", value:2}, {key:"material", value:"wood"},{key:"color", "value":"brown"}]}
{id:2, attrs:[{key: "prime", value: true}, {key:"fuel", value:"gas"}, {key:"volume", "value":3}]}
{id:3, attrs:[{key: "prime", value: true}, {key:"fuel", value:"diesel"}, {key:"volume", "value":1.5}]}

然后你定义Multi-key index像这样:

db.collection.createIndex({"attrs.key":1, "attrs.value":1})

如果您想应用逐步过滤器,请使用带有$elemMatch 运算符的MongoDB 聚合

☑ Prime
☑ Fuel
☐ Other

...

☑ Volume 3
☐ Volume 1.5

查询的表示

db.collection.aggregate([
{
$match: {
$and: [
{
attrs: {
$elemMatch: {
key: "prime",
value: true
}
}
},
{
attrs: {
$elemMatch: {
key: "fuel"
}
}
},
{
attrs: {
$elemMatch: {
key: "volume",
"value": 3
}
}
}
]
}
}
])

MongoPlayground

关于sql - 电子商务的产品属性数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60384704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com