关于多对多关系
来源:4-7 【聚合操作】聚合管道的优化与局限

骑着面包去草原
2019-03-27
老师您好!
通过前面学习,还有许多疑问,因为mongodb不像mysql这样的关系型数据库,从而设计方面肯定不能按照mysql的设计思想去走!
那么像一些多对多场景应该怎么设计?
例如:一个班级有多个老师,一个老师可以教多个班级!这样的关系,应该怎么设计文档?
1回答
-
同学你好~这个问题非常优秀~
你自己也说了不能使用关系型数据库的数据模型设计思想去走,这非常正确。那么关系型数据库的设计思想是什么呢?简单来说,是以数据为中心,分析数据间的关系,然后用数据库表把这些关系清晰的表达出来。一旦数据库表的模式确定了,每个客户端请求都要根据数据库模式来制定查询语句。
然而,在使用MongoDB这样的NoSql数据库时,通常不以数据为中心,而是以【划重点】数据的使用模式【划重点】为中心。所以,我问的第一个问题并不是“一个老师可以教一个班级还是多个班级”这种关乎数据间关系的问题,老师和班级之间的关系甚至可以随着时间改变。我会问的第一个问题应该是“客户端请求将如何操作这些数据”。假设你的客户端是一个web服务。它有哪些服务端点呢?举个例子,如果最大流量的请求会通过一个端点来查询老师和他/她教授的所有班级的信息,那么将班级信息内嵌入教师文档就是一个比较好的选择,因为只需要一次查询就可以得到客户所需的所有信息,查询效率最高。当然在实际应用中,你要考虑的因素更多:客户的读写频率,数据的数量,对延迟性的敏感度,数据维护的成本,等等。但是,总而言之,一切设计和选择都是从数据的使用(而不是数据间的关系)为核心的。
这个问题之所以优秀,就是因为它没有标准答案,因为最了解你的数据使用模式的人,一定是你自己~不过,NoSql数据库中的数据模型设计也是有一定的方法和技巧的,在课程的第七章中,我们就会专门为大家讲解这个课题,近期内就会开放这部分内容了,敬请期待!
132020-03-07
相似问题