Разработка схемы MongoDB для отношений «многие ко многим» - PullRequest
0 голосов
/ 08 мая 2019

У меня проблема с отношением «многие ко многим» в схеме 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, ... ] },
... ]
сохранить отношение в третьей таблице (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 голосов
/ 10 мая 2019

По моему мнению, обе структуры в порядке, и трудно сказать, что лучше. Есть хорошая статья по адресу: https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-3 Смотрите шестое правило: «... Как всегда в MongoDB, то, как вы моделируете свои данные, зависит - полностью - от шаблонов доступа к данным вашего конкретного приложения. Вы хотите структурировать свои данные так, чтобы они соответствовали способам, которые ваше приложение запрашивает и обновляет.» .. "

...