gpt4 book ai didi

Azure DocumentDb 扁平建模与嵌套建模

转载 作者:行者123 更新时间:2023-12-03 01:49:31 25 4
gpt4 key购买 nike

我是 Azure DocumentDb 新手,对集合中数据建模的最佳方法有疑问。在集合中,并非所有文档都必须具有相同的架构。在一个非常简单的示例中,假设我有一个学校集合,其中包含有关教师和学生的文档。多个 json 属性可能相同,例如“lastName”。我需要区分教师和学生,并运行查询以获取所有姓氏为“Smith”的学生。我的问题是,与“教师”相比,定义“学生”文档的最佳方法是什么。我见过添加“类型”属性的示例,如下所示:

//Student document
{
"id": "035cbc59-76ba-4255-9abf-fa57cdcf81f4",
"lastName": "Smith",
"grade": 10,
"type": "student"
}

//Teacher document
{
"id": "035cbc59-76ba-4255-9abf-fa57cdcf81f4",
"lastName": "Smith",
"subjectTaught": "Algebra I",
"type": "teacher"
}

然后你可以这样查询:

SELECT * from c where c.lastName = "Smith" and c.type ="student" 

我还看到了另一种嵌套对象类型的方法:

  //Student document
{
"student": {
"lastName": "Smith",
"grade": 10
},
"id": "7d2c5595-21b1-4598-8a70-196a3feeeab0"
}

//Teacher document
{
"teacher": {
"lastName": "Smith",
"subjectTaught": "Algebra I",
},
"id": "7d2c5595-21b1-4598-8a70-196a3feeeab0"
}

那么您的查询将如下所示:

SELECT c.student from c where c.student.lastName = "Smith"

从数据建模最佳实践的角度来看,我很好奇哪种方法更好。显然,这是一个非常简单的示例,现实世界的集合会有更复杂的文档。

最佳答案

您的第一个示例(使用 type 字段)是最常见的,一些 Entity Framework 支持这一点。

但是,我做了一些性能测试,发现使用单独的 isStudentisTeacher 字段稍好一些,这些字段都是 bool 值,要么始终为 true,要么缺少该字段。因此,使用您的示例:

//Student document
{
"id": "035cbc59-76ba-4255-9abf-fa57cdcf81f4",
"lastName": "Smith",
"grade": 10,
"isStudent": true
}

//Teacher document
{
"id": "035cbc59-76ba-4255-9abf-fa57cdcf81f4",
"lastName": "Smith",
"subjectTaught": "Algebra I",
"isTeacher": true
}

然后查询:

SELECT * from c where c.lastName = "Smith" and c.isStudent 

我从未见过有人用第二种方式做这件事,也没有尝试过对其进行性能分析,但我的猜测是它具有与我上面推荐的类似的性能特征。

我的基本建议是做一些实验。然后,如果差异很小,请选择对您和您的开发人员最有意义的一种。

关于Azure DocumentDb 扁平建模与嵌套建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620201/

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