MongoDB – 数据建模

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: "[email protected]",
		phone: "9848022338"
	},
	Address: {
		city: "Hyderabad",
		Area: "Madapur",
		State: "Telangana"
	}
}

规范化数据模型

在此模型中,您可以使用引用来引用原始文档中的子文档。例如,您可以将上述规范化模型中的文档重写为:

员工:

{
	_id: <ObjectId101>,
	Emp_ID: "10025AE336"
}

个人资料:

{
	_id: <ObjectId102>,
	empDocID: " ObjectId101",
	First_Name: "Radhika",
	Last_Name: "Sharma",
	Date_Of_Birth: "1995-09-26"
}

接触:

{
	_id: <ObjectId103>,
	empDocID: " ObjectId101",
	e-mail: "[email protected]",
	phone: "9848022338"
}

地址:

{
	_id: <ObjectId104>,
	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 中,数据将仅显示来自一个集合。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁