MongoDB中的模式设计 - 多对一关系

时间:2014-09-15 22:33:19

标签: mongodb one-to-many

我计划首次使用MongoDB构建社区。 我想我已经弄明白了,除了......

通常情况下,我会在MySQL中加入以获取作者姓名和每个帖子。

在Mongo,我很难下定决心。在我看来,我有以下两个选项:

1) 在帖子文档中存储用户ID和名称。 缺点:数据库将大于选项2。 如果用户名被更改,我将被迫更新用户曾写过的每个帖子。

2) 仅将用户ID存储在发布文档中。 缺点:必须查询每个10-50个文档的唯一用户,以便用帖子打印用户名。

有没有我不知道的第三种选择?

1 个答案:

答案 0 :(得分:0)

归结为:非规范化用户名。 在模式方面,我没有看到任何其他合理的选择(我们不讨论在用户文档中存储帖子)。

但是,您有很多关于实施的选项,例如:

  • 禁止用户名更改
  • 缓存用户ID< - >用户名

这完全取决于您的基数,您将要执行的请求类型以及您计划扩展层数的程度(应用层和客户端通常比数据库更容易横向扩展,不管它们是SQL还是SQL不是)。

如果你负担得起,我会选择一个标准化模型,一个用户缓存(你可能想在某些时候添加头像,声誉或徽章),甚至在SQL中 - 没有加入(或者更确切地说)客户端加入)。

相关问题