mongodb - mogodb如何进行设计

 你看看我的世界_420 发布于 2022-10-25 06:29

想知道大家在做非关系型数据库的项目时是如何进行设计的,以学生选课为例,每个学生可以选择多个课程,每个课程可以让多个学生选择,这种多对多关系要如何设计,如果我要删除一个课程,如何保证数据库的一致性?

1 个回答
  • MongoDB 考虑两种基本模式:文档和分表。

    文档模式把一条记录记入一个文档,以学生选课为例,就是在一个学生的文档下记录所有他选的课程;分表模式就是像关系型数据库那样,学生和课程分开建表,然后再建一个学生和课程对应关系(选课)的表。

    文档的主要优点是读取效率高,MongoDB 没有joint,如果分表,每次查询涉及几张表就要做几次查询。文档的主要缺点第一就是维护不便,比如你修改了一个课程的信息,就得找到所有包含这个课程的学生文档,然后逐个修改。另外一个文档的大小是有限制的,不能无限增加数据。

    分表的优缺点和文档式相反。

    实践中要权衡选择,以读为主的数据倾向于选择文档模式,写/修改频率高的数据可以考虑分表。另外对于可能无限增加数据的字段,通常也要考虑分表存储。

    一般是二者结合起来用,在文档中记录读取频率较高的信息,其它细节信息单独建表。到你这个例子里,就是学生和课程建两个表,每个学生文档下记录选课的基础信息(比如课程代码和名称),然后每个课程的具体信息存储在课程表里。

    当你每次列出一个学生的选课信息时,一次查询就可以列出所有选课的代码和名称,当需要查看具体一门课程的详细信息时再对课程表做一次查询。这样比完全分表可以减少一次查询,比完全文档记录减少了文档的大小和修改课程信息时要修改的范围。

    如果你要删除一门课,先在课程表里删除这门课的文档,然后在学生表里找到所有包含这门课的记录然后修改之。灵活运用索引和操作符,并不是问题。

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