多对多关系的MongoDB模式设计

时间:2019-05-08 03:25:36

标签: mongodb nosql many-to-many schema

我在NoSQL模式中遇到了“多对多”关系的问题。我找到了一些指南,有两种处理方法-

  1. 将关系存储在两个集合中(http://learnmongodbthehardway.com/schema/schemabasics/
Student: [ 
 { _id: 1, name: Hei, courseId: [ 1001, 1002, ... ] }
 { _id: 2, name: Vivian, courseId: [ 1001, 1003, ... ] }, 
... ]

Course: [ 
 { _id: 1001, name: Database Design, studentId: [ 1, 2, ... ] }, 
 { _id: 1002, name: Big Data Analysis, studentId: [ 1, ... ] },
... ]
  1. 将关系存储在第三张表(https://www.techighness.com/post/nosql-many-to-many-bound-unbound-associative-examples/
Student: [ 
 { _id: 1, name: Hei }, 
 { _id: 2, name: Vivian }, 
...]

Course: [
 { _id: 1001, name: Database Design }, 
 { _id: 1002, name: Big Data Analysis }, 
...]

Registration: [
 { studentId: 1, courseId: 1001 }, 
 { studentId: 1, courseId: 1002 }, 
 { studentId: 2, courseId: 1001 }, 
 { studentId: 2, courseId: 1003 }, 
...]

我认为第二种方法会更好,因为第一种方法中存在重复数据,但是第二种方法存在困难-如果查询很复杂,则很难提取我需要的内容(例如,基于关键字和确定学生注册了哪些课程)。在这种情况下,我发现第一种方法的查询要容易得多。

哪种方法在NoSQL结构中处理多对多关系会更好?

1 个答案:

答案 0 :(得分:0)

在我看来,这两个结构都不错,很难说哪个更好。 有一篇很好的文章,位于:https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-3 请参阅第六条规则:“ ...与MongoDB一样,数据建模的方式完全取决于特定应用程序的数据访问模式。您希望结构化数据以匹配应用程序查询和更新数据的方式。 ..“