假设以下“模式/关系”设计,使用级联删除操作处理删除的推荐做法是什么?
关系模式:
+---------+ +--------+ | 学生|-*--------1-[注册]-1--------*-| 课程 | +---------+ +--------+
MongoDB:
+---------+ +--------+ | 学生|-*----------------*-| 课程 | +---------+ +--------+
考虑到学生注册课程的这种经典设计,在使用 MongoDB 时,在学生中包含课程集合(反之亦然)似乎是一个合适的数据模型(这对于关系/注册表来说没有任何意义)。但是来自关系世界的我应该如何处理删除课程的语义?也就是说,当一个课程被删除时,所有的“注册”记录也应该被删除。也就是说,我应该从每个学生记录的集合中删除课程。看起来我必须触发 2 个查询:一个用于删除课程,然后从每个学生的收藏中删除它。有没有办法让一个查询来执行这种“级联删除”之类的语义而无需额外的查询?数据模型需要改变吗?
注意:对于所有其他用例,上述数据模型工作得很好:
- 删除学生
=>
只需删除该学生以及随之删除的相关课程集合。 - 愿意放弃课程
=>
的学生只需将其从学生课程集中删除即可 - 添加学生/课程
=>
本质上只是将其添加到相应的“表”中。
唯一棘手的事情是处理课程的删除。我应该如何在 MongoDB 中处理这种情况,因为我来自关系背景并且无法弄清楚这一点。