Можно ли создать реляционную базу данных, используя MongoDB? - PullRequest
23 голосов
/ 15 ноября 2011

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

diagram of a relational database

Ответы [ 3 ]

34 голосов
/ 15 ноября 2011

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

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

19 голосов
/ 15 ноября 2011

Ответ зависит от того, как вы собираетесь использовать данные. У вас действительно есть 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") }
  ]
}
1 голос
/ 21 декабря 2017

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

...