MongoDB 数据建模
MongoDB中的数据具有灵活的模式。相同集合中的文档不需要具有相同的字段集或结构。在一个集合的文档中,常见字段可能包含不同类型的数据。
数据模型设计
MongoDB提供了两种类型的数据模型:嵌入式数据模型和规范化数据模型。 根据需求,您可以在准备文档时使用其中的任一模型。
嵌入式数据模型
在这个模型中,您可以在一个单独的文档中嵌入(或包含)所有相关的数据,它也被称为非规范化数据模型。
例如,假设我们在三个不同的文档中获取员工的详细信息,分别为个人详情、联系方式和地址,您可以将这三个文档嵌入到一个文档中,如下所示-
标准化数据模型
在这个模型中,你可以使用引用来引用原始文件中的子文档。例如,你可以将上述文档重写为标准化模型中的:
Employee:
Personal_details:
Contact:
Address:
在设计MongoDB中的模式时考虑的要点
- 根据用户要求设计模式。
-
如果您将它们一起使用,请将对象组合到一个文档中。否则分开它们(但请确保不需要连接)。
-
复制数据(但有限),因为磁盘空间比计算时间便宜。
-
在写入时执行连接,而不是在读取时执行。
-
针对最频繁使用的用例优化模式。
-
在模式中进行复杂的聚合。
示例
假设客户需要一个用于他的博客/网站的数据库设计,并查看关系数据库管理系统(RDBMS)和MongoDB模式设计之间的差异。网站具有以下要求。
- 每篇文章都有唯一的标题、描述和URL。
-
每篇文章可以有一个或多个标签。
-
每篇文章都有其发布者的名称和总点赞数。
-
每篇文章都有用户提供的评论,包括他们的名称、留言、日期和点赞数。
-
每篇文章上可以有零个或多个评论。
在RDBMS模式中,满足上述要求的设计将至少有三个表。
在MongoDB的模式设计中,将包含一个名为”post”的集合,并具有以下结构:
因此,在展示数据时,在关系型数据库管理系统(RDBMS)中,您需要连接三个表,在MongoDB中,数据仅从一个集合中显示。