Подтвердить что ты не робот

Можно ли создать реляционную базу данных с помощью MongoDB?

Я собираюсь создать систему управления студентами с использованием MongoDB. У меня будет одна таблица для студентов, а другая - для записей посещаемости. Могу ли я получить ключ в таблице посещаемости для доступа к таблице студентов, как показано на рисунке ниже? Как?

diagram of a relational database

4b9b3361

Ответ 1

Идея MongoDB заключается в устранении (или, по крайней мере, минимизации) реляционных данных. Рассматривали ли вы просто встраивание данных посещаемости непосредственно в каждую запись учащихся? Это на самом деле предпочтительный шаблон проектирования для MongoDB и может привести к значительно лучшей производительности и масштабируемости.

Если вам действительно нужны сильно реляционные и нормализованные данные, вы можете пересмотреть использование MongoDB.

Ответ 2

Ответ зависит от того, как вы собираетесь использовать данные. У вас действительно есть 2 варианта, встроить таблицу посещаемости или связать ее. Подробнее об этих подходах подробно описано здесь: http://www.mongodb.org/display/DOCS/Schema+Design

Для общего варианта использования вы, вероятно, вложите эту конкретную коллекцию, поэтому каждая запись студента будет иметь встроенную таблицу "посещаемости". Это будет работать, потому что записи посещаемости вряд ли будут разделяться между учащимися, и для получения данных о посещаемости, вероятно, потребуется также информация о студенте. Получение данных посещаемости будет таким же простым, как:

db.student.find( { login : "sean" } )
{
  login : "sean",
  first : "Sean", 
  last : "Hodges",
  attendance : [
    { class : "Maths", when : Date("2011-09-19T04:00:10.112Z") },
    { class : "Science", when : Date("2011-09-20T14:36:06.958Z") }
  ]
}

Ответ 3

Да. Нет жестких правил. Вы должны взглянуть на плюсы и минусы вложений или ссылок на данные. Это видео, безусловно, поможет (https://www.youtube.com/watch?v=-o_VGpJP-Q0&t=21s). В вашем примере атрибут номера телефона должен находиться в одной и той же таблице (в базе данных документа), так как номер телефона человека редко изменяется.