Предполагая, что следующая схема "схема/связь" является рекомендуемой практикой для обработки удаления с помощью операции каскадного удаления как??
Реляционная схема:
+---------+ +--------+ | Student |-*--------1-[Enrollment]-1--------*-| Course | +---------+ +--------+
MongoDB:
+---------+ +--------+ | Student |-*----------------*-| Course | +---------+ +--------+
Учитывая этот классический дизайн зачисления студентов на курсы, наличие набора курсов для студентов и наоборот, похоже, является подходящей моделью данных при использовании MongoDB (это ничего не касается таблицы отношений/регистрации). Но исходя из реляционного мира, как я должен обрабатывать семантику удаления курса? То есть, когда курс удаляется, все записи "регистрации" также должны быть удалены. То есть, я должен удалить курс из коллекции каждого студенческого рекорда. Похоже, я должен запустить 2 запроса: один для удаления курса, а затем удалить его из каждой коллекции учеников. Есть ли способ иметь один запрос для выполнения этого "каскадного удаления", например, семантики без дополнительного запроса? Необходимо ли изменить модель данных?
ПРИМЕЧАНИЕ. Для всех других случаев использования приведенная выше модель данных работает очень хорошо:
- Удаление ученика
=>
просто удалит этого студента и связанную с ним коллекцию курсов, удаленных вместе с ним. - Студент, желающий отказаться от курса
=>
, просто удалит его из студенческой коллекции курсов. - Добавить ученик/курс
=>
по существу. Просто добавьте его в соответствующую "таблицу".
Единственная сложная вещь - обработка удаления курса. Как я должен обрабатывать этот сценарий в MongoDB, так как я родом из реляционного фона и не могу понять это.