Разработка схемы MongoDB - новая коллекция или ссылка? - PullRequest
2 голосов
/ 03 января 2011

Я столкнулся с вопросом, касающимся схемы для MongoDB.Со ссылкой на пример Схема MongoDB относительно db.students и db.courses.

Поскольку я более привык к структурированному SQL, я все ещепутать с этой ссылкой или вставлять проблему.Таким образом, пример показывает только курс в пределах db.students, на который ссылается db.courses.Так что, если бы я классифицировал свои курсы, такие как humanities, languages и т. Д., Как мне это сделать?

Что было бы лучшим способом сделать это?

// db.courses
{ name: Biology, cat: 1 }
{ name: English, cat: 2 }

// db.categories
{ cat: 1, name: Humanities }
{ cat: 2, name: Languages }
// db.courses
{ name: Biology, cat: Humanities }
{ name: English, cat: Languages }
{ name: History, cat: Humanities }

Может ли кто-нибудь, пожалуйста, посоветовать, что мне делать?

Спасибо.

1 Ответ

3 голосов
/ 03 января 2011

Введение:

В вашем случае оба варианта будут хороши, потому что категория просто перечисление и вам не нужна категория загрузки для отображения курса, вам просто нужно создать некоторое перечисление иполучить имя категории по идентификатору.

Но, например, если у вас есть таблица db.users и у каждого пользователя есть коллекция db.courses, вам не нужно создавать отдельный документ, вам просто нужны вложенные курсы коллекции.И это действительно круто, потому что в sql вам нужно создать отдельную таблицу со ссылкой «один ко многим».

Одно большое преимущество базы данных документов заключается в том, что вы можете создавать большие документы с вложенными коллекциями и не нужно объединять таблицы.*

Ответ:

Так что в вашем случае я предлагаю два способа:

  1. Создать перечисление для категорий и получить имя категории по идентификатору (но не загружатьот Монго).
  2. Просто скопируйте название категории в курсе (но в первом случае лучше, потому что в случае, если имя категории было изменено, необходимо обновить каждый курс новым именем категории).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...