我有一个名为 posts
的集合,其中包含多篇文章帖子和一个名为 users
的集合,其中包含大量用户信息。每个 post
都有一个名为 author
的字段,它引用 users
集合中的帖子作者。
在我的主页上,我将查询 posts
集合并将帖子列表返回给客户端。因为我还想显示帖子的作者,所以我需要执行类似 sql 的连接命令,以便所有帖子都有作者姓名、ID 等。
如果我返回一个包含 40 个帖子的列表,我必须执行 40 个类似 sqllike 的连接。这意味着每次我都会进行 41 次查询以获取包含作者信息的帖子列表。这看起来真的很贵。
我正在考虑在存储帖子信息时存储作者信息。这样我只需要做 1 个查询来检索所有帖子和作者信息。但是,当用户信息发生变化时(例如名称更改),列表将过时,并且管理这样的列表似乎不太容易。
那么有更好的或标准的方法吗?
p.s: 我用的是mongodb
最佳答案
Mongo 是 NoSQL 数据库。根据定义,NoSQL 解决方案意味着非规范化(所有必需的数据应位于同一位置)
在您的示例中,作者和帖子之间的关系是一对多的,但作者与帖子的比例非常小。简单来说,不。作者相比没有。职位将非常小。
基于此,您可以安全地将作者信息存储在帖子集合中。
如果您需要查询帖子集合,即如果您知道大多数查询将在帖子集合上执行,那么将作者存储在帖子中是有意义的。存储一个属性不会占用大量空间,但会在查询性能和编码/检索数据的简便性方面产生巨大差异。
关于mongodb - 具有大量类似 sql 连接的查询的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30842548/