【发布时间】:2017-12-28 07:10:39
【问题描述】:
我正在学习 mongodb,想为网络博客页面构建一个小数据库。 众所周知,在 mongo 中,我们使用集合和文档,而不是表和记录。
我有 2 个文档(实体):用户(id,nikname)和出版物(id,title ...) 在关系数据库中,我们将 user_id 作为“出版物”内的列,这意味着用户可以拥有很多出版物。
示例 1
User
{
id: "123456",
nikname: "cool guy",
publications: [
{
id: "some id1",
title: "some title111",
text: "bla bla bla",
// any fields
},
{
id: "some id2",
title: "some title222",
text: "bla bla bla",
// any fields
},
....
]
}
Publication
{
id: "some id",
title: "some title",
text: "bla bla bla",
// any fields
}
在上面的示例中,每个用户都有自己的出版物数组。
我的问题是:这是一个很好的方法吗?如果一个用户有 1000 个出版物怎么办?
此外,如果每个用户都有自己的出版物,那么为什么我们需要存储出版物表(在 MONGO 中称为 COLLECTION) 在用户之外作为单独的实体。
我还在考虑在用户内部存储出版物 ID。
示例2
User
{
id: "123456",
nikname: "cool guy"
}
Publication 1
{
id: "some id",
title: "some title",
text: "bla bla bla",
// any fields
USER_ID: 123456
}
Publication 2
{
id: "some id",
title: "some title",
text: "bla bla bla",
// any fields
USER_ID: 123456
}
但 Example2 与关系方法没有区别...
那么什么方法会更好呢?
简而言之,想知道与 mongo 合作过的人的意见。
【问题讨论】:
-
第一种方法是要走的路。正如您所说,第二个示例是关系方法;不过,它在某些用例中可能很有用。但是,就您而言,当您获取用户时,通常也需要她的帖子。因此,将出版物嵌入到用户本身中绝对没问题(而且速度更快)。
-
如果使用第一种方法,您不会为 2 个不同的用户两次存储相同的数据,那么第一种方法就是要走的路。我的意思是,如果许多用户的出版物不同,那么方法 1 是可以的,但如果不是这样,那么分离数据总是更好,因为它可以帮助您不存储相同的信息两次、三次或“ n' 次。
标签: mongodb