嵌入式Ids与MongoDB中规范化样式的区别

时间:2013-02-19 07:13:47

标签: mongodb

所以,我一直在观看this视频,以便学习MongoDB数据建模。在一对多的关系中,演讲者谈到三种不同的方式:

  1. 嵌入式数组/数组键:在特定文档中,您将拥有一个引用其他文档的数组的字段(例如,用户文档中的blog_posts属性将存储用户具有的博客帖子的所有ID)创建)
  2. 嵌入式树:我们在文档中有完整嵌入的文档,而不是有一个引用其他东西的数组。
  3. 规范化:彼此之间有两个集合和引用。
  4. 那么,嵌入式数组键和规范化类之间有什么区别?嵌入式数组是不是还引用了另外两个集合?

1 个答案:

答案 0 :(得分:1)

差异很简单(不幸的是,该视频中有点令人困惑)。

想象一下博客文章(Post)和评论(Comment)的建模。

  1. 嵌入式数组:Post文档包含所有Comment文档的所有ID的数组。 Comment存储在单独的文档(和/或集合)中。
  2. 树:Post文档包含嵌入的Comment。它们不存储在不同的文档中或存储在自己的集合中。虽然这表现得非常好,但BSON文档的大小限制为16MB,这可能更难以使用。
  3. 规范化:Post文档和Comment分开存储。但是,在这种情况下,Comment文档具有返回Post的外键引用。因此,它可能有一个名为postId的字段。它会引用与Post相关的Comment。此模式与#1不同,因为Post文档不包含Comments列表。因此,虽然此选项使得注释的数量基本上无限制/无限制,但如果没有构建特定的索引(例如postIdcommentDate可能有用),它可能会使注释的检索效率更低