例如,我在 MongoDB 中有一个字段,如下所示:
"SignedDocs" : [
{
"_id" : "blablabla"
"title": " bla bla bla"
},
{
"_id" : "blablabla2"
"title": " bla bla bla2"
},
{
"_id" : "blablabla3"
"title": " bla bla bla3"
}
]
为了您理解,在此字段内有 3 个值。使用 SQL Server 实现这一目标的最佳方法是什么?在列中保存 3 个值的最佳做法是什么?
我不想做这样的事情:
NAME | DOCSSIGNED
abduh | 1
abduh | 2
abduh | 3
拥有许多具有相同值的行只会将此DOCSSIGNED
字段更改为指向 DOCS 表的 FK。
编辑:哦,也许这两个链接它们之间的第三个表?
在较新版本的 SQL Server 上,您可能会考虑按原样引入 JSON 数据,将其存储在
nvarchar(max)
列中,并使用内置的 JSON 相关函数来解析和查询 JSON 数据。这在 SQL Server 2016+(兼容级别 130)中可用。您可以在此处阅读有关它的更多信息:SQL Server 中的 JSON 数据如果您打算将 MongoDB 文档“转换”为更具关系的模式,那么您提到的映射表将是防止签名者的“名称”在每一行中重复的好方法。
看起来您在 MongoDB 文档中建模的是已由给定人员签名的文档集合。所以关系结构是这样的:
文件表格:
签署这些文件的人的表格:
然后是一张汇总了一个人签署的所有文件的表格:
如果需要强制执行其他规则(例如,文档只能由一个人签名),您可以向表中添加更多约束。
请注意,执行这种将 NoSQL 数据转换为关系数据的“ETL”过程可能会产生大量维护开销。像 MongoDB 这样的文档数据库的优点之一是可以轻松更改文档的结构。这很有可能打破 ETL。当然,每个环境都是不同的,所以这对你来说可能不是问题。我只是觉得值得一提。