教程 > mongodb 教程 > 阅读:80

mongodb 数据模型——迹忆客-ag捕鱼王app官网

mongodb 的数据是非常的灵活的,在一个集合中的文档可以是多种多样的。它们不需要具有相同的一组字段或结构。集合文档中的公共字段可能包含不同类型的数据。

这种灵活性有助于将文档映射到实体或对象。每个文档都可以匹配所表示实体的数据字段,即使该文档与集合中的其他文档有很大的差异。

数据模型设计

mongodb 提供两种类型的数据模型:

  • 嵌入式数据模型
  • 规范化数据模型

根据要求,我们可以在设计准备文档时使用两种模型中的任意一种。

嵌入式数据模型

在此模型中,我们可以将所有相关数据“嵌入”在单个文档中,也称为非规范化数据模型。

嵌入式数据模型允许应用程序在同一个数据库记录中存储相关信息。因此,应用程序可能需要发出更少的查询和更新来完成常见操作。

通常,在以下情况下使用嵌入式数据模型:

  • 实体之间存在“包含”关系。 见与嵌入文档建立一对一关系模型。
  • 实体之间有一对多的关系。在这些关系中,“多个”或子文档始终与“一个”或父文档一起出现或在其上下文中查看。 见与嵌入文档建立一对多关系模型。

一般来说,嵌入为读取操作提供了更好的性能,并且能够在单个数据库操作中请求和检索相关数据。嵌入式数据模型使得在单个原子写入操作中更新相关数据成为可能。

例如,假设我们在三个不同的文档中获取员工的详细信息,即 personal_details、contact 和 address,我们可以将所有三个文档嵌入到一个文档中,如下所示

{
    _id: ,
    emp_id: "10025ae336"
    personal_details:{
        first_name: "radhika",
        last_name: "sharma",
        date_of_birth: "1995-09-26"
    },
    contact: {
        e-mail: "radhika_sharma.123@gmail.com",
        phone: "9848022338"
    },
    address: {
        city: "hyderabad",
        area: "madapur",
        state: "telangana"
    }
}

规范化数据模型

规范化数据模型使用文档之间的 引用来描述关系。

通常,以下场景使用规范化数据模型:

  • 当嵌入将导致重复数据,但不会提供足够的读取性能优势,超过重复的影响。
  • 表示更复杂的多对多关系。
  • 为大型分层数据集建模。

例如,我们可以使用规范化模型重写上述文档:

employee:

{
    _id: ,
    emp_id: "10025ae336"
}

personal_details:

{
    _id: ,
    empdocid: " objectid101",
    first_name: "radhika",
    last_name: "sharma",
    date_of_birth: "1995-09-26"
}

contact:

{
    _id: ,
    empdocid: " objectid101",
    e-mail: "radhika_sharma.123@gmail.com",
    phone: "9848022338"
}

address:

{
    _id: ,
    empdocid: " objectid101",
    city: "hyderabad",
    area: "madapur",
    state: "telangana"
}

在 mongodb 中设计 schema 时的注意事项

  • 根据用户要求设计我们的架构。
  • 如果实际情况中我们需要一起使用对象,那么将它们合并到一个文档中。否则将它们分开(但确保不需要连接)。
  • 复制数据(但是不要全部复制),因为与计算时间相比,磁盘空间便宜。
  • 在写入时加入,而不是在读取时加入。
  • 针对最常见的用例优化我们的架构。
  • 在模式中进行复杂的聚合。

示例

假设客户需要为其博客/网站设计数据库,并查看 rdbms 和 mongodb 模式设计之间的差异。网站有以下要求。

  • 每个帖子都有唯一的标题、描述和网址。
  • 每篇文章都可以有一个或多个标签。
  • 每个帖子都有其发布者的名称和喜欢的总数。
  • 每个帖子都有用户给出的评论以及用户的姓名、消息、评论时间和是否喜欢。
  • 在每个帖子上,可以有零个或多个评论。

在 rdbms 模式中,针对上述要求的设计将至少包含三个表。

rdbms 设计结构

在 mongodb 模式中,将只有一个集合帖子,结构如下:

{
   _id: post_id
   title: title_of_post, 
   description: post_description,
   by: post_by,
   url: url_of_post,
   tags: [tag1, tag2, tag3],
   likes: total_likes, 
   comments: [    
      {
         user:'comment_by',
         message: text,
         datecreated: date_time,
         like: likes 
      },
      {
         user:'comment_by',
         message: text,
         datecreated: date_time,
         like: likes
      }
   ]
}

因此,在显示数据时,在 rdbms 中您需要连接三个表,而在 mongodb 中,只需要显示一个集合中的数据。

查看笔记

扫码一下
查看教程更方便
网站地图