MongoDB 数据建模

  • 数据建模

    MongoDB中的数据在同一集合中具有灵活的schema.documents。它们不需要具有相同的字段集或结构。集合文档中的公共字段可以保存不同类型的数据。
  • 数据模型设计

    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: <ObjectId101>,
      Emp_ID: "10025AE336"
    }
    
    Personal_details
     
    {
      _id: <ObjectId102>,
      empDocID: " ObjectId101",
      First_Name: "Radhika",
      Last_Name: "Sharma",
      Date_Of_Birth: "1995-09-26"
    }
    
    Contact
     
    {
      _id: <ObjectId103>,
      empDocID: " ObjectId101",
      e-mail: "radhika_sharma.123@gmail.com",
      phone: "9848022338"
    }
    
    Address
     
    {
      _id: <ObjectId104>,
      empDocID: " ObjectId101",
      city: "Hyderabad",
      Area: "Madapur",
      State: "Telangana"
    }
    
  • 在MongoDB中设计架构时的注意事项

    • 根据用户要求设计架构。
    • 如果将它们一起使用,则将它们组合到一个文档中。否则,将它们分开(但请确保不需要连接)。
    • 复制数据(但有限制),因为磁盘空间比计算时间便宜。
    • 在写入时进行联接,而不是在读取时进行联接。
    • 针对最常见的用例优化架构。
    • 在架构中进行复杂的聚合。
    示例
    假设客户需要为其博客/网站进行数据库设计,并查看RDBMS与MongoDB模式设计之间的区别。网站具有以下要求。
    • 每个帖子都有唯一的标题,描述和网址。
    • 每个帖子可以有一个或多个标签。
    • 每个帖子都有其发布者的名称和喜欢的总数。
    • 每个帖子都有用户提供的评论,以及他们的姓名,消息,数据时间和喜欢。
    • 在每个帖子上,可以有零个或多个评论。
    在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中,数据将仅从一个集合中显示。