2 数据模型与查询语言
3种常见的数据模型:关系模型、文档模型和图模型
2.1 关系模型与文档模型
- 关系模型:数据被组织成关系,也就是表,关系(表)是元组(行)的无序集合
- 关系模型存在的问题:对象-关系不匹配
- 文档模型:采用JSON或XML等文档表示数据,表现为某种层次结构,没有固定模式
- 文档模型的问题:不支持数据库联结操作(一对多和多对多的联结)
- 优点:模式灵活
- 建议文档应该尽量小且避免写入时增加文档大小。因为读取时数据库会加载整个文档,更新时会重写整个文档。
- 关系数据库和文档数据库的融合
2.2 数据查询语言
-
SQL是声明式查询语言;IMS和CODASYL是命令式语言
- 关于IMS和CODASYL见:https://blog.csdn.net/clevi0654/article/details/100253687
-
命令式语言和声明式查询语言的差别
- 命令式语言需要指明如何实现某一查询目标;声明式查询语言只需指定所需的数据模式,需要满足什么条件等,而无需指明如何实现这一目标
- 声明式查询语言更易用简洁,对外隐藏了数据库引擎的实现细节
- 声明式查询语言适合并行执行
-
SQL没有任何限制规定它只能在单个机器上运行
-
MapReduce查询
- 见第10章
2.3 图数据模型
- 如果数据是一对多(树状结构)或者记录之间没有关系,使用文档模型
- 如果是复杂的多对多,虽然关系模型也支持,但使用图模型更合适
2.3.1 属性图模型
- 顶点:唯一的标识符、出边的集合、入边的集合、属性集合(键值对)
- 边:唯一的标识符、边两端的顶点、描述两个顶点见关系类型的标签、属性集合(键值对)
- 可以使用关系模型存储,两张表:顶点表和边表
- 属性图查询语言:Cypher是一种用于属性图的声明式查询语言,最早为Neo4j图数据库创建
- 关于Cypher查询语言:Cypher查询入门
- 虽然可以用关系模型存储属性图数据,然后使用SQL查询,但与Cypher相比,显得笨拙
2.3.2 三元存储模型
-
主体-谓语-客体。如(张三,喜欢,苹果)、(Jack,age,13)。有以下两种情况:
- 主体是顶点,谓语和客体是主体属性中的键值对。(Jack,age,13)
- 主体和客体都是顶点,谓语是图中的边。(Jack,marriedTo,Marry)
-
SPARQL:一种采用RDF数据模型的三元存储查询语言。
-
Datalog:一种比sparal和cypher更老的语言,是以后查询语言的基础