MongoDB之数据建模

数据库 其他数据库 MongoDB
MongoDB与关系型数据库的建模还是有许多不同,因为MongoDB支持内嵌对象和数组类型。MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link)。那么何时Embed何时Link呢?那得看两个实体之间的关系是什么类型。

 一对一的关系:Embed,比如用户信息集合有Address字段,Address字段有省、市、县三个字段。建模如下:

QQ截图20120725190049

 

 

QQ截图20120725185306

一对多关系:一篇文章有多条评论,为1对多关系

QQ截图20120725185727QQ截图20120725190617

由于MongoDB对单个文档(document)有大小限制16M(高于v1.8),设计时也要将这个限制纳入考虑中。

多对多关系:学生和课程是多对多的关系,一个学生可以选多门课程,一门课程有多名学生参与。

QQ截图20120725190110

多对多使用了连接(Linking),连接是通过引用(References)来连接两个集合。MongoDB References有两种:一种是 手动引用(Manual References),另一种是DBRefs。

Manual References:

QQ截图20120725192451(user集合)

QQ截图20120725192634(post集合)

红框地方就是Manual References,如果想查询一篇文章的作者信息,首先在post集合找出那篇文章,然后在user集合查找出用户的全部信息。但是假如有这么一个场景:用户可以对图片,文章等各种资源评论,所有的评论都放在comment集合中,如果只是使用Manual References,就分不清楚评论到底是属于哪类资源了,图片?文章?。所以有了DBRef。

DBRef的形式:

{ $ref : <value>, $id : <value>, $db : <value> }

$ref:集合名称;$id:引用的id;$db:数据库名称,可选参数。

可以看到DBRef的结构比Manual References的复杂,占用的空间大,但是功能也强大,如果要跨数据库连接,上面讲的评论集合的例子,都得需要使用DBRef,MongoDB提供了函数来解析DBRef,不用像Manual References需要自己手动写两次查询。

QQ截图20120725195916

关于MongoDB的数据建模MongoDB官网也给出了一些建议。这些建议都是提供了一些参考,实际建模需要根据具体的需求来分析,分析数据经常会执行哪些操作(排序,查找,修改)来选择Embed和Link。

原文链接:http://www.cnblogs.com/alab/archive/2012/07/25/2608905.html

【编辑推荐】

  1. MongoDB 2.0 正式版发布
  2. MongoDB 2.0新功能逐个看之Compact Command
  3. 主流NoSQL数据库全方位评测之MongoDB
  4. 教你如何利用MySQL学习MongoDB
  5. 在Windows环境下MongoDB搭建和简单操作

责任编辑:彭凡 来源: 博客园
相关推荐

2017-02-05 14:59:18

MongoDB数据建模数据库

2020-10-10 06:53:18

数据建模数据库

2024-01-10 08:22:38

物联网数据分析建模人工智能

2017-05-05 10:00:51

MongoDB查询数据

2023-08-24 09:44:16

数据库性能

2014-01-06 10:44:17

Angular数据

2011-09-14 15:30:00

MongoDB

2012-05-15 10:28:29

NoSQL数据库建模技术

2010-06-30 13:17:12

UML业务建模

2012-05-15 11:03:22

NoSQL数据建模

2010-07-01 17:05:34

UML包图

2022-03-01 17:16:16

数仓建模ID Mapping

2010-06-30 14:46:49

UML类图

2022-09-06 08:00:00

机器学习金融数据科学

2016-05-10 10:43:02

2011-06-14 09:09:13

NoSQLMongoDB

2011-05-23 13:30:00

MySQLMongoDB

2022-03-15 10:00:00

美团数据治理

2011-10-13 10:18:50

设计数据库

2021-07-30 18:35:57

数据建模聚类
点赞
收藏

51CTO技术栈公众号