mongodb - mogodb如何进行设计
淡淡烟草味
淡淡烟草味 2017-04-28 09:04:48
0
1
762

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

淡淡烟草味
淡淡烟草味

全部回复(1)
仅有的幸福

MongoDB 考虑两种基本模式:文档和分表。

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

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

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

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

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板