Доброго времени суток всем
Сейчас занимаюсь разработкой нетривиальной CRM системы и возникли небольшие сложности в правильной проектировке базы данных.
Начнём с небольшого введения.
База данных - MongoDB
Сервер - NodeJS
ODM - Mongoose + Typegoose (проект на typescript)
CRM система разрабатывается для онлайн школы.
Итак, у нас есть сама база данных, и она подразделяется на две коллеции: Pupils и Groups
В коллекции Pupils хранятся документы такого формата:
А в коллекции Groups хранятся вот такие документы:
Итого: есть 2 сущности — ученики и группы, в которых они будут учиться.
Как вы могли заметить, в объекте группы присутствует поле PUPILS, в котором и хранятся ученики, обучающиеся в этой группе. Но не конкретно сами объекты учеников, а их ID в коллекции Pupils.
Я отказался от дублирования этих объектов из коллекции учеников в группы, т.к. мне сказали, что повторяющиеся данные в двух разных коллекциях — это плохо.
То есть в БД получаем вот такой объект:
Но когда фронтенд будет отрисовывать страницу, ему в итоге будет нужно вначале получить по API объект группы, потом сделать ещё один запрос на получение объектов учеников из массива.
Может быть это и не звучит ужасно, но расписание нужно хранить для каждого ученика отдельно, и ещё куча всяких нюансов, которые я даже перечислять не буду, чтобы не отвлекатся от главных двух проблем.
Проблема 1:
Можно ли, чтобы эти идентификаторы были ссылками на объекты из коллекции Pupils? Чтобы в базе данных они хранились как:
["id1", "id2", "id3"]
но когда я делаю запрос на получение групп/конкретной группы, база данных возвращала бы мне объект такого вида:
Где
{
...
}
и есть
Проблема 2
Если такая возможность есть, то можно ли дополнять эту ссылку своими данными? Чтобы в итоге в коллекции групп были такие данные:
Чтобы в итоге этот Reference разворачивался в объект ученика и к нему добавлялись вот эти поля.