【问题标题】:Something I don't understand about NoSQL (M:N relationships)我对 NoSQL 的一些不理解(M:N 关系)
【发布时间】:2012-08-21 06:25:40
【问题描述】:

我承认……我在 NoSQL 世界中缺乏很多理论概念。

我正在考虑将一些使用 Java+MySQL 的简单应用程序移植到 NodeJS+MongoDB(我发现 mongoose ORM 看起来非常酷)。

我发现真正困难且文档较少的第一件事是映射多对多关系。

我首先阅读了 Mongo-DOCS:http://www.mongodb.org/display/DOCS/Schema+Design

...然后潜伏在一些真实世界的信息中,我发现了很多这样的问答:Modeling data on a many-to-many join in Mongo?

这是实现 M:N 的方法,太酷了!但后来我读到了一些让我非常害怕和失望的东西:“老实说,如果你发现自己需要连接,我只会使用关系数据库。

好的!我明白了,但是....假设我有通用的 User + Roles + UserRoles 多对多模式,并且我使用 embedding,我的意思是,我没有为角色使用另一个表模式,我只使用包含所有角色数据的用户

我需要:

  • 查询数据库中的所有用户,同时读取他们的角色数据;
  • 查询数据库中刚刚可用的所有角色,例如,用于选择在用户创建中关联的角色;

第一点是微不足道的,但第二点呢?

你会告诉我我需要另一个表模式“角色”并将角色数组存储在“用户”中,其中包含角色的 ID,但随后,你会告诉我这是一个关系世界!

你是在告诉我它不适合 NoSQL 数据库吗?那么什么会是?

【问题讨论】:

  • 重点是什么?要么根据 MongoDB 支持调整数据模型,要么对数据进行非规范化处理,或者执行多个查询……有什么问题?
  • 如果你想更好地解释你的英语,也许能给我们一些例子,我相信我们可以为你提供更多帮助。我对用于实际描述问题的英语感到特别困惑。

标签: mongodb many-to-many nosql


【解决方案1】:

您可能需要对数据进行非规范化处理。

正确的方法是查看您的用例并相应地设计您的数据库
这意味着您必须考虑使用场景。

用户/角色示例

让我们考虑一下用例。

  • 快速判断用户的角色
  • 查询所有角色,以便在创建或编辑用户时为用户选择角色。

我会这样做:

  • 像现在一样将角色存储在用户身上
  • 还将所有角色存储在单独的集合中

这将正确满足所有要求。
显然,由于非规范化,您在更新/重命名角色时需要特别小心。

【讨论】:

  • 如何实施“特殊照顾”? mongodb 是否提供了执行此操作的工具?
  • @Asad 我不确定是否有这方面的工具。我的意思是,很可能你必须自己照顾它。我认为您需要在应用程序代码中实现它。
【解决方案2】:

您的选择是:

  • 非规范化您的数据
  • 执行多个查询
  • 使用 MongoDB 聚合框架(如果在此处适用)
  • 不要使用 MongoDB

做出你的选择...

【讨论】:

  • 事实上,我的问题是“最佳实践”请求!您能否在答案中添加一些更基本的概念(例如每种方式的优缺点)?
  • 老实说,这不是什么答案...我的意思是您甚至猜测聚合框架的需求,这里没有回答基于问题的事实,所以不确定为什么应该标记它...
猜你喜欢
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多