嵌入式数据与引用
有效的数据模型可支持应用程序的需求。 模式设计的一个关键决策是嵌入数据还是使用引用。
嵌入式数据模型
您可以在单个文档中嵌入相关数据。 在以下示例中, contact
和access
字段是嵌入式文档:
嵌入式数据模型通常是非规范化的,其原因是频繁访问的数据在多个集合中重复出现。
嵌入式数据模型允许应用程序在同一数据库记录中查询相关信息。因此,应用程序完成常见操作所需进行的查询和更新操作更少。
用例
在以下场景中使用嵌入式数据模型:
实体之间存在“包含”关系。 示例,包含
address
的contacts
文档。 请参阅使用嵌入式文档建立一对一关系模型。实体之间存在一对多关系。在这些关系中,“多”或子文档在“一”或父文档的上下文中查看。请参见使用嵌入式文档建立一对多关系模型。
嵌入具有以下优点:
读取操作性能更佳
在单个数据库操作中检索相关数据的能力
在单次原子写入操作中更新相关数据的能力
查询嵌入数据
如要查询嵌入文档中的数据,请使用点表示法。有关在数组和嵌入文档中查询数据的示例,请参阅:
参考
引用通过包含从一个文档到另一个文档的链接(称为引用)来存储数据之间的关系。在以下示例中, contact
和 access
文档包含对 user
文档的引用。
引用则会产生规范化的数据模型,其原因是数据被分为多个集合,且不会重复。
用例
在以下场景中使用引用来链接相关数据:
内嵌会导致数据重复,但无法提供足够的读取性能优势来抵消重复的不利影响时。例如,当嵌入式数据经常变化时。
您需要表示复杂的多对多关系或大型分层数据集。
相关实体经常被单独查询。例如,如果您有
employee
和department
数据,则可以考虑在employee
文档中嵌入部门信息。但是,如果您经常查询部门列表,则应用程序最好使用单独的department
集合,并通过引用与employee
集合链接。
查询规范化数据模型
为了查询多个集合中的规范化数据,MongoDB 提供了以下聚合阶段:
有关规范化数据模型的示例,请参阅使用文档引用建立一对多关系模型。
有关各种树模型的示例,请参阅对树结构进行建模。
了解详情
有关使用 MongoDB 进行数据建模的更多信息,请下载 MongoDB 应用程序现代化指南》。
下载内容包括以下资源:
介绍使用 MongoDB 进行数据建模的方法
白皮书介绍了从 RDBMS 数据模型迁移到 MongoDB 的最佳实践和注意事项
引用 MongoDB 模式及其 RDBMS 等效模式
应用程序现代化记分卡