对于N:M关系,MongoDB中级联删除的推荐等价物是什么?

 隔壁小王 发布于 2023-02-13 00:31

假设以下"模式/关系"设计,使用级联删除操作删除处理删除的推荐做法是什么?

关系模式:

  +---------+                                    +--------+
  | Student |-*--------1-[Enrollment]-1--------*-| Course |
  +---------+                                    +--------+

MongoDB的:

  +---------+                    +--------+
  | Student |-*----------------*-| Course |
  +---------+                    +--------+

考虑到学生的课程招生的这一经典设计,具有学生,反之亦然课程集合似乎使用MongoDB的(即没有为关系/报名表)时是合适的数据模型.但是来自关系世界我应该如何处理删除课程的语义?也就是说,当删除课程时,也应删除所有"注册"记录.也就是说,我应该从每个学生记录的集合中删除该课程.看起来我必须触发2个查询:一个用于删除课程,然后从每个学生的集合中删除它.有没有办法让单个查询执行这种"级联删除",如语义而无需额外的查询?数据模型是否需要更改?

注意:对于所有其他用例,上述数据模型工作正常:

删除学生=>只会删除该学生以及随之删除的相关课程集.

愿意放弃课程=>的学生只需将其从学生课程集中删除即可

添加学生/课程=>只是将其添加到相应的"表格"中.

唯一棘手的事情是处理删除课程.我应该如何处理MongoDB中的这种情况,因为我来自关系背景,我无法弄清楚这一点.

1 个回答
  • 你正在做的是在Mongo中做到这一点的最佳和最佳方式.我处于类似的情况,在完成N:M设计模式的所有可能实现后,也达到了同样的解决方案.

    显然,这不是一个mongodb的事情,而是更多的NoSQL概念,其中,变化较少的数据(课程)可以单独保存.并且由于删除课程不会是一个非常频繁的操作,它的可行性足以通过所有记录来删除它.

    另一方面,你可以让它成为现实.在您的应用程序逻辑中,只需忽略Student文档中课程文档中根本没有reference_id的课程值.但在这种情况下,您必须确保旧的已删除的Course_id不会被重用.

    或者只使用课程文档中的已删除标志,并处理应用程序逻辑中的所有其他内容.

    2023-02-13 00:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有