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