数据模型设计
常规关系
- 内嵌式结构:利用内嵌文档来表示事物之间的关系,一般更具有独立性的数据应作为顶层文档,补充性数据作为内嵌文档
- 优点:查询效率高,一次查询就可以返回所有数据
- 缺点:更新复杂度高
- 一对多(多为内嵌数组):内嵌数组元素较多时,更新效率也低
- 一对多(一为内嵌数组):大量的冗余数据,更新时需要更新多篇文档
- 规范式结构:利用类似外键形式,存储另一个文档的ID来表示事物之间的关系
- 优点:减少冗余数据,降低了文档更新的复杂度
- 缺点:需要多次读取操作才能得到完整数据
关系 | 使用规则 |
---|---|
一对一 | 内嵌式结构 |
一对多 | 内嵌式结构(多为内嵌数组):适用于常常要返回全部相关文档的查询 内嵌式结构(一为内嵌数组):适用于更新频率较低的数据 规范式结构:更新频率较高的数据,想减少冗余的数据 |
多对多 | 规范式结构 |
树形结构关系
多见于静态数据或更新频率较低的参考数据中,因为更新的成本过于高,可能需要更新大片文档
- 用一个字段存储父节点ID:通过查询该字段能快速定位子节点
- 用一个字段以数组形式存储子节点ID:通过查询该字段能快速定位父节点
- 用一个字段以数组形式存储祖先节点ID:通过查询该字段能定位从一个节点开始所有的子集树
- 用两个字段存储深度遍历编号:通过查询这两个字段范围能快速定位到以该节点为根的子树,具体如下图所示
Comments NOTHING