如何在MongoDB中组织多对多的关系
我有两个表/集合; 用户和组。 用户可以是任何数量的组的成员,并且用户也可以是任何数量的组的拥有者。 在关系型数据库中,我可能会有第三个名为UserGroups的表,其中包含一个UserID列,一个GroupID列和一个IsOwner列。
我正在使用MongoDB,我相信在文档数据库中有这种关系的不同方法。 我是否应该将用户表中的组和组作为所有者列表作为两个ObjectID数组embedded? 我是否也应该将成员和所有者列表作为两个数组存储在组表中,从而有效地映射引起关系信息重复的关系?
或者是一个桥梁UserGroups表格合法的概念在文件数据库中的多对多的关系?
谢谢
我所看到的,以及我目前使用的是每个文档中带有节点ID的embedded式数组。
所以文档user1具有属性组:[id1,id2]
而文档组1具有属性用户:[user1]。 文档组2也具有属性用户:[user1]。
这样你就可以得到一个Group对象,并轻松地select所有相关的用户,并且对于User来说也是一样的。
创build和更新对象时需要更多的工作。 当你说2个对象是相关的,你必须更新这两个对象。
在MongoDB中还有一个概念DBReferences,根据你的驱动程序,当检索一个文档时它会自动地拉引用的对象。
http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef
让我们通过一个例子来理解多对多关系
- 书给作者
- 学生给老师
作者的书是less数几个关系,所以我们可以在另一个文档中有一组书或作者。 学生对教师也一样。 我们也可能陷入重复的风险。 然而,这将要求每个学生在插入之前在系统中有一名教师,反之亦然。 应用程序逻辑可能永远不会允许它。 换句话说,父对象必须存在才能使子对象存在。
但是,当你有多对多的关系,使用两个集合,并有一个真正的链接。