知识卡片

NoSQL四种数据模型的复杂度递增谱系

结构图卡

内容

[[NoSQL数据库的四种存储模型]]卡片讨论的是”哪种场景该选哪种模型”, 这张卡片补充的是另一个角度:四种模型之间并非各自独立、并列的四个 选项,而是存在一条从简单到复杂逐步扩展的结构谱系,后一种模型往往 是前一种模型能力的自然延伸。键值对模型是最基础的形态:只描述数据 本身(键唯一标识、值可以是任意类型的数据),完全不描述数据之间的 关联,是一个纯粹的”集合类型”数据模型,因此结构上比层次模型、网状 模型、关系模型都更简单——数据库只需要通过键做存取,完全不关心值 的内部结构。列数据模型是键值对模型的直接扩展:可以理解为”用键值对 模型构造的键值对模型”——键依然是唯一标识,但对应的值不再是单一 数据,而是一到多个键值对组成的”列簇”集合,相当于给值这一侧增加了 一层内部结构,用列和列簇更细致地描述数据的值部分,但依然没有引入 数据之间的关联描述。文档数据模型进一步把值这一侧的结构从”扁平的 列簇集合”升级成”树形结构”:一个文档内部的键值对集合,每个元素 本身又可以是另一个嵌套文档或对某文档的引用,因此能表达比列模型 更丰富的层级关系。图数据模型是复杂度最高的一环:不再局限于”键→值” 这条单向描述链,而是显式引入了实体与实体之间的关联关系(三元组 “实体-关系-实体”),能表达前三种模型都无法直接表示的网状关联结构。 这条谱系说明NoSQL的”多样化”不是随意发散的,而是沿着”是否描述数据 关联、关联的表达能力有多强”这一条清晰的复杂度轴线逐级展开的。

结构图

flowchart LR
    A["键值对模型<br/>只描述数据本身<br/>不描述关联"] --> B["列数据模型<br/>=用键值对构造键值对<br/>值侧增加列簇结构"]
    B --> C["文档数据模型<br/>值侧升级为树形结构<br/>支持嵌套文档/引用"]
    C --> D["图数据模型<br/>显式引入实体间关联<br/>三元组:实体-关系-实体"]

参考来源

- 位置:《数据库原理(微课版)》第13章《数据库前沿技术》13.3.2节"NoSQL 数据库的数据模型"(源文件:_epub-src/index_split_008.html) - 结论依据:原文明确"键值对数据模型是一个集合类型的数据模型,仅 描述数据本身,而不描述数据之间的联系。因此键值对模型比层次模型、 网状模型、关系模型和面向对象模型等更加简单""列数据模型……是键 值对模型的扩展……可看作由键值对模型构造的键值对模型……与键值对 数据模型一样,列数据模型也没有描述数据之间的关系""文档……可 抽象为树形结构……图结构由节点和边组成……可简单理解为三元组 〈实体,关系,实体〉的集合",因此可以推出四种模型沿复杂度轴线递增 的结构关系。 - 原始内容:列数据模型……是键值对模型的扩展……可看作由键值对模型 构造的键值对模型……图结构由节点和边组成,每个节点代表一个实体 ……每条边表示实体之间的一种关联关系……可简单理解为三元组 〈实体,关系,实体〉的集合。