作为最流行的NoSQL解决方案之一,MongoDB具有这种方法的大部分优势.但是我仍然在努力解决的一个问题是如何在NoSQL数据存储中反映对象关系,特别是MongoDB.
例如,让我们考虑一个简单的数据模型:用户、POST和 comments .我很清楚, comments 本身没有价值,因此成为帖子的嵌入对象.但当涉及到用户时——这就变得很棘手,因为用户本身就是一个实体,不与Post相耦合.现在,如果我需要在网页上列出带有用户全名和个人资料链接的帖子,我需要一个帖子列表和关于帖子作者的信息(至少包括姓名和id).
我在这里看到了两种可能的解决方案:
- 对数据进行反规范化,使每个帖子条目都包含作者ID和全名(以及列出帖子时可能需要的任何其他用户属性).通过这种方式,我可以让查询数据变得非常简单,但当用户更新他/她的个人资料时,我也需要更新用户的所有帖子.但是,我还需要在comments对象中存储用户属性,这意味着更新用户配置文件基本上需要我更新所有至少有一条用户 comments 的帖子,除非我想将 comments 存储在单独的集合中.
- 只将用户ID存储在POST对象中,并运行两个查询:一个用于获取帖子列表,另一个用于获取用户ID在帖子作者列表中的用户列表.这需要在我的应用程序代码中执行2个查询和额外的处理,以将用户映射到帖子.
我肯定我不是第一个面对这个问题的人,但不幸的是,到目前为止,我还没有找到任何关于这个话题的最佳实践.意见?