假设下面的"模式/关系"设计使用类似级联删除的操作来处理删除,推荐的做法是什么?
关系架构:
+---------+ +--------+ | Student |-*--------1-[Enrollment]-1--------*-| Course | +---------+ +--------+
MongoDB:
+---------+ +--------+ | Student |-*----------------*-| Course | +---------+ +--------+
考虑到这种classic 的课程注册设计,在使用MongoDB时,在学生中拥有一个课程集合(反之亦然)似乎是一个合适的数据模型(这对于关系/注册表没有任何意义).但是,来自关系世界的我应该如何处理删除课程的语义呢?也就是说,当一个课程被删除时,所有的"报名"记录也应该被删除.也就是说,我应该从每个学生记录的集合中删除该课程.看起来我必须触发两个查询:一个用于删除课程,然后将其从每个学生的集合中删除.有没有一种方法可以让单个查询执行这种类似语义的"级联删除",而不需要额外的查询?数据模型是否需要更改?
注意:对于所有其他用例,上述数据模型工作正常:
- 删除学生
=>
只是删除该学生和与其一起删除的相关课程集合. - 愿意放弃某门课程的学生
=>
只需将其从学生课程集合中删除即可 - 添加学生/课程
=>
本质上只需将其添加到相应的‘表’中即可.
唯一棘手的事情是处理课程的删除.我应该如何在MongoDB中处理此场景,因为我来自关系背景,无法弄清楚这一点.