database - 我应该选择哪个,文档模型或关系模型?
问题描述
在我的应用程序中,我选择了文档模型,但我仍然有一些问题。
这是我的示例文档:
{
"catalogs": {
"cat-id1": {
"name": "catalog-1",
"createdAt": 123,
"products": {
"pro-id1": {
"name": "product-1",
"createdAt": 321,
"ingredients": {}
},
"pro-id2": {
"name": "product-2",
"createdAt": 654,
"ingredients": {}
}
}
},
"cat-id2": {
"name": "catalog-2",
"createdAt": 456,
"products": {
"pro-id3": {
"name": "product-3",
"createdAt": 322,
"ingredients": {}
},
"pro-id4": {
"name": "product-4",
"createdAt": 655,
"ingredients": {}
}
}
}
}
}
但是产品中的成分是另一个文档的引用者。
{
"ingredients": {
"ing-id1": {},
"ing-id2": {}
}
}
文档模型有几个好处:
- 易于编辑架构,例如
if (user.first_name) user.first_name = user.name.split(' ')[0]
- 无需
join
,一次轻松获取所有数据。
我也知道:
在更新文档时,通常需要重写整个文档。由于这些原因,通常建议您将文档保持在相当小的范围内,并避免增加文档大小的写入操作。
主要思想是:哪种数据模型导致应用程序代码更简单?
我的问题是:
- 我应该保留多大的文档?
- 我的应用程序已经有一个关系数据库,我应该将文档模型与关系数据库结合起来以降低复杂性吗?
解决方案
由于您已经使用了关系数据库,因此我认为使用基于文档的数据库也没有真正的好处。
您的数据库模式似乎很简单,可以使用关系数据库。然而,如果目录条目彼此非常不同,您可以考虑使用基于文档的模型。但情况似乎并非如此。
因此,我的建议是,你坚持使用关系模型。
我会这样设计模型:
- 每个实体 (
catalog
,product
,ingredient
) 的表,其中每个条目都有一个唯一的 Id - 每个
n:m
关系 (catalogProduct
,productIngredient
) 的关系表,仅包含关系实体的 Id。
一个例子:
- 食材
ing1
,ing2
都ing3
存放在餐桌上ingredient
。 - 产品
prod1
和prod2
存储在product
. ing1
并且ing2
需要prod1
ing2
并且ing3
对于prod2
- 在
productIngredient
每个条目中,您存储成分的 ID 和使用它的产品的 ID。prod1
:ing1
prod1
:ing2
prod2
:ing2
prod2
:ing3
推荐阅读
- java - matlab中的Java机器人鼠标click.trouble
- javascript - 在 React 中迭代数据数组时呈现 JSX 元素的最有效方式
- ldap - Airflow 10 LDAP 授权错误 - LDAPInvalidPortError:端口必须是整数
- scala - scala中的日期转换问题
- angular - 使用 Id 在 ngFor 循环中显示单个 ngrx 实体
- javascript - 在反应 js 中创建新事件时更新日历
- c# - C#删除数据库中所有选中的复选框
- sql-server - SQL Server:还原备份导致“此备份集中的日志太新”
- c# - .NET C# 中的高性能 TCP 套接字编程
- javascript - Vue+element popover 不能改变当前页面