我正在为mango db设计一些数据模型,我有一些类似于json的要求。
Single_Collection。
{
"collegeid": 1234,
"Name": "aaaa",
"otherinfo": 1,
"studnet":[
{
"stdid": 1,
"name": "n1"
},
{
"stdid": 2,
"name": "n2"
}
]
}
两个收藏。
{
"collegeid": 1234,
"Name": "aaaa",
"otherinfo": 1
}
学生信息集
{
"collegeid": 1234,
"stdid": 1,
"name": "n1"
}
{
"collegeid": 1234,
"stdid": 2,
"name": "n2"
}
哪个是阅读表现的更好的方式(单个收集或分离出来),我有更多阅读像给定的学生ID找到大学ID。学生证名单会很大。
我还执行更多的学生插入操作
IMO,每个模型设计都有自己的优点和缺点,我们所说的“更好的方式”取决于您的使用案例(如何查询数据?您是否需要一开始的所有数据?您需要分页吗?等等。 。)
让我们从您的要求开始。
显然大学和学生是1:m的映射,因为一个大学里的很多学生但每个学生只能留在一所大学。
我将向您展示一些不同的模型设计,并为每个型号提供优点和缺点。
这是您作为单个集合提到的设计。
{
"collegeid":1234,
"Name":"aaaa",
"otherinfo":1,
"studnet":[
{
"stdid":1,
"name":"n1"
},
{
"stdid":2,
"name":"n2"
}
]
}
优点:
缺点:
这是您作为两个集合提到的设计。它类似于RDBMS表,学生模型拥有其大学的参考关键点。
{
"collegeid":1234,
"Name":"aaaa",
"otherinfo":1
}
{
"collegeid":1234,
"stdid":1,
"name":"n1"
}
{
"collegeid":1234,
"stdid":2,
"name":"n2"
}
优点:
"collegeid"
和"stdid"
字段上添加索引。缺点:
这种方法看起来像我们混合方法1和方法2.我们有两个集合:大学将其学生嵌入其中,并且还有一个独立的学生集合。因此,学生数据在两个馆藏中都是重复的。
{
"collegeid":1234,
"Name":"aaaa",
"otherinfo":1,
"studnet":[ // duplicated here!
{
"stdid":1,
"name":"n1"
},
{
"stdid":2,
"name":"n2"
}
]
}
{
"collegeid":1234,
"stdid":1,
"name":"n1"
}
{
"collegeid":1234,
"stdid":2,
"name":"n2"
}
优点:
缺点:
这是方法3的变体。我们假设您的用例是:
简而言之,用户在开始时不需要所有学生的完整数据,他只需要学生的基本信息(例如学生ID)。如果用户接受此类方案,您可以使用以下型号:
{
"collegeid":1234,
"Name":"aaaa",
"otherinfo":1,
"studnetIds":[1, 2] // only student IDs are duplicated
}
{
"collegeid":1234,
"stdid":1,
"name":"n1"
}
{
"collegeid":1234,
"stdid":2,
"name":"n2"
}
学院只有学生证。与方法3相比,这是不同的。
优点:
缺点: