第一部分 数据库云平台导论 2
第1章 数据库的起源与发展现状 2
1.1 数据管理 2
1.1.1 数据管理的3个阶段 2
1.1.2 数据库系统发展的3个里程碑 4
1.1.3 数据库管理系统的3个发展阶段 5
1.2 数据库的分类 6
1.2.1 层次型数据库 7
1.2.2 网状型数据库 7
1.2.3 关系型数据库 8
第2章 关系模型与数据库的优缺点 10
2.1 关系模型 10
2.1.1 关系模型概述 10
2.1.2 关系代数 14
2.1.3 关系演算 18
2.2 关系模式与关系数据库 20
2.3 关系型数据库的优势 20
2.3.1 持久存储大量数据 21
2.3.2 通过事务保证数据的强一致性 21
2.3.3 通用性好和高性能 21
2.3.4 以标准化为前提 21
2.4 关系型数据库的不足 22
2.4.1 大量数据的写入操作 22
2.4.2 对海量数据的高效存储和访问 24
2.4.3 为有数据更新的表做索引或表结构变更 24
2.4.4 对简单查询需要快速返回结果的处理 25
2.4.5 字段不固定时的应用 25
第3章 关系型数据库的补充——NoSQL 26
3.1 NoSQL的概念 26
3.2 NoSQL的起源 26
3.3 NoSQL数据库解决的核心难题 28
3.3.1 实现高速查询 28
3.3.2 满足多写需要 28
3.4 NoSQL数据库的分类 29
3.4.1 面向列的有序存储数据库 29
3.4.2 键/值存储数据库 30
3.4.3 面向文档数据库 31
3.4.4 图形数据库 32
3.4.5 对象数据库 33
第4章 数据库云平台 35
4.1 数据库云平台的概念 35
4.2 数据库云平台的特点 35
4.3 数据库云平台的分类 37
4.3.1 数据库即服务 37
4.3.2 分布式数据库 37
4.4 国产自主可控数据库云平台产品介绍 37
4.4.1 虚谷云数据库 38
4.4.2 南大通用列存数据库 41
4.5 为何推荐使用自主可控产品 43
4.5.1 当前国际主流数据库的安全隐患 44
4.5.2 信息安全最终要落实到数据库安全 44
4.5.3 满足需求就好 45
4.5.4 一站式服务方式是优势 46
第二部分 数据库云平台理论基础 48
第5章 关系型数据库中的事务 48
5.1 事务处理的重要性 48
5.2 事务的特性要求 49
5.2.1 一致性 50
5.2.2 原子性 50
5.2.3 持久性 51
5.2.4 隔离性 51
5.3 事务的状态 51
5.4 系统日志 53
5.5 并发控制 53
5.5.1 基于锁的协议 54
5.5.2 两阶段加锁 58
5.5.3 死锁处理 59
5.5.4 基于时间戳排序的并发控制 61
5.5.5 多版本并发控制 63
5.5.6 饥饿处理 64
5.5.7 索引中使用加锁进行并发控制 65
5.5.8 其他并发控制问题 66
5.6 锁的粒度 67
5.6.1 加锁的粒度级别 68
5.6.2 多粒度级别加锁 68
5.7 集中式系统中的事务处理 71
5.7.1 单用户系统的组织 71
5.7.2 集中式多用户系统的组织 72
5.8 分布式系统上的事务处理 73
5.8.1 数据库服务器分布的关键因素 73
5.8.2 分布式系统的组织 73
5.8.3 会话与上下文信息 77
5.8.4 队列事务处理 79
5.8.5 分布式事务基本两阶段提交协议 79
5.8.6 分布式事务基本两阶段提交协议的改进 80
5.9 结构化查询语言中的事务支持 82
第6章 关系型数据库的数据恢复 84
6.1 数据库数据恢复的概念 84
6.1.1 数据库故障的种类 84
6.1.2 恢复算法概要及分类 85
6.1.3 故障恢复技术 86
6.1.4 潜入/非潜入与强制/非强制 88
6.1.5 日志中的检查点 88
6.1.6 事务故障的恢复 90
6.2 延迟更新恢复技术 90
6.2.1 单用户环境下使用延迟更新的恢复 91
6.2.2 多用户环境下采用并发执行方案的延迟更新 92
6.2.3 不影响数据库的事务动作 93
6.3 即时更新恢复技术 93
6.3.1 单用户环境下即时更新的恢复 94
6.3.2 多用户环境下采用并发执行方案即时更新的恢复 94
6.4 镜像分页 94
6.5 多数据库系统中数据的恢复 96
6.6 系统与介质故障的恢复 96
第7章 关系型数据库结构化查询语言SQL 98
7.1 SQL基础知识 98
7.1.1 语句 98
7.1.2 名称 101
7.1.3 数据类型 102
7.1.4 常量 107
7.1.5 表达式 108
7.1.6 内嵌函数 108
7.1.7 NULL值 109
7.1.8 别名和匿名 110
7.1.9 时间段 110
7.2 SQL的数据定义 111
7.2.1 在SQL中创建和删除数据库 112
7.2.2 SQL中基本表的创建、修改、删除 113
7.2.3 SQL中索引的建立与删除 117
7.3 SQL的数据查询 119
7.3.1 查询语句的基本结构 119
7.3.2 单表查询 120
7.3.3 连接查询 128
7.3.4 嵌套查询 129
7.3.5 集合查询 133
7.3.6 窗口和窗口函数 134
7.3.7 查询取回数量的控制 138
7.4 SQL的数据操纵 139
7.4.1 插入数据 139
7.4.2 删除数据 140
7.4.3 更新数据 142
7.4.4 管线化数据操纵语言 143
7.5 SQL的视图 144
7.5.1 DBMS如何处理视图 145
7.5.2 创建视图 145
7.5.3 删除视图 147
7.5.4 查询视图 147
7.5.5 更新视图 147
7.5.6 物化视图 148
7.6 时态SQL 149
7.6.1 时态的概念 149
7.6.2 应用时间段表 152
7.6.3 系统版本表 156
7.6.4 双时态表 160
7.7 数据库持久化存储模块 161
7.7.1 存储过程与函数 161
7.7.2 时态SQL与PSM 164
7.8 SQL的触发器 166
7.8.1 创建触发器 167
7.8.2 触发器使用的特殊表 168
7.8.3 修改触发器 174
7.8.4 删除触发器 174
7.8.5 触发器的使用限制 175
7.9 SQL的访问控制 175
7.9.1 授予权限 175
7.9.2 取消权限 176
7.9.3 视图机制与SQL安全 177
第8章 分布式数据库 178
8.1 分布式数据库系统的概念 178
8.1.1 分布式数据库系统的定义 178
8.1.2 分布式数据库系统的特点 180
8.1.3 分布式数据库系统的分类 181
8.1.4 分布式数据库系统的特色功能 182
8.2 分布式数据库系统的体系结构 183
8.2.1 分布式数据库系统的模式结构 183
8.2.2 分布式数据库管理系统的组成 185
8.2.3 网络应用程序 186
8.3 分布式数据库的数据分片、复制和分配技术 189
8.3.1 数据分片和分配 189
8.3.2 数据复制 192
8.3.3 数据分配 196
第9章 NoSQL型数据库的一致性与事务 197
9.1 一致性问题 197
9.1.1 更新一致性 197
9.1.2 读取一致性 198
9.2 放宽一致性约束 201
9.2.1 CAP定理 202
9.2.2 BASE理论 207
9.2.3 NWR理论 207
9.3 放宽持久性约束 208
9.4 版本戳 209
9.4.1 “商业事务”与“系统事务” 209
9.4.2 在多结点环境中生成版本戳 210
9.5 键/值数据库的一致性与事务 212
9.5.1 键/值数据库的一致性 212
9.5.2 键/值数据库的事务 212
9.6 文档数据库的一致性与事务 213
9.6.1 文档数据库的一致性 213
9.6.2 文档数据库的事务 214
9.7 列族数据库的一致性与事务 214
9.7.1 列族数据库的一致性 214
9.7.2 列族数据库的事务 216
9.8 图形数据库的一致性与事务 216
9.8.1 图形数据库的一致性 216
9.8.2 图形数据库的事务 216
第三部分 数据库云平台的应用 220
第10章 开发数据库应用的编程 220
10.1 关系型数据库的嵌入式SQL 220
10.1.1 程序化SQL技术 220
10.1.2 简单的嵌入式SQL语句 227
10.1.3 嵌入式SQL中的数据检索 240
10.1.4 基于游标的删除和更新 251
10.1.5 游标和事务处理 252
10.2 关系型数据库的动态SQL 253
10.2.1 动态SQL的概念 253
10.2.2 动态语句的执行 254
10.2.3 动态SQL的两步动态执行 256
10.2.4 动态查询 259
10.3 关系型数据库应用编程接口 268
10.3.1 应用编程接口的概念 268
10.3.2 ODBC和SQL/CLI标准 270
10.3.3 ODBC API 292
10.3.4 Java数据库连接 298
10.3.5 ADO.NET接口 310
10.4 NoSQL数据库编程 314
10.4.1 MongoDB文档型数据库的编程接口 314
10.4.2 Cassandra列族数据库的编程接口 328
10.4.3 Redis键/值存储数据库的编程接口 352
第11章 数据库性能调优 361
11.1 调优问题概述 361
11.1.1 调优的目标 361
11.1.2 识别性能问题 362
11.1.3 剖析性能问题 363
11.1.4 优化解决问题 364
11.2 关系型数据库的查询优化 366
11.2.1 查询处理的架构 367
11.2.2 基于关系代数等价性的启发式优化 368
11.2.3 查询执行计划的开销估计 371
11.2.4 选择一个计划 377
11.3 应用程序的优化 380
11.3.1 SQL语句的优化 381
11.3.2 索引 391
11.3.3 反向规范化 393
11.3.4 实现惰性读取 394
11.3.5 引入缓存 395
11.3.6 充分利用工具 395
11.4 物理资源的管理 397
11.5 NoSQL数据库的调优 398
11.5.1 NoSQL数据库调优的原则 398
11.5.2 文档型数据库MongoDB的常用优化方案 398
11.5.3 列族数据库Cassandra的优化 402
第12章 数据库应用系统的设计 405
12.1 数据库应用系统设计的目标 405
12.2 数据库应用系统的设计方法学 405
12.2.1 数据库应用系统涉及的角色 406
12.2.2 数据库应用的设计与实现过程 408
12.2.3 使用UML图作为数据库设计规范说明的辅助工具 417
12.3 面向数据的关键设计 427
12.3.1 在关系数据库内查找对象 427
12.3.2 实现引用完整性 433
12.3.3 实现安全访问控制 436
12.4 支持数据库渐进式开发的潜在工具 445
12.4.1 工具 445
12.4.2 沙箱 446
12.4.3 脚本 447
第13章 数据库重构 449
13.1 数据库重构的重要性 449
13.2 数据库重构的概念 451
13.2.1 数据库重构的定义 451
13.2.2 数据库重构的内涵是保持语义 453
13.2.3 数据库重构的类别 453
13.2.4 重构工具 454
13.3 数据库重构的过程 454
13.3.1 确认数据库重构是必要的 454
13.3.2 选择最合适的数据库重构 456
13.3.3 确定数据清洗的需求 456
13.3.4 使原数据库模式过时 458
13.3.5 编写单元测试进行前测试、中测试和后测试 458
13.3.6 实现预期的数据库模式变化 461
13.3.7 迁移源数据 462
13.3.8 更新数据库管理脚本 462
13.3.9 重构外部访问程序 463
13.3.10 进行回归测试 463
13.3.11 为重构编写文档 463
13.3.12 对工作进行版本控制 464
13.4 数据库重构的策略 464
13.4.1 通过小变更降低变更风险 464
13.4.2 唯一地标识每一次重构 464
13.4.3 转换期触发器优于视图或批量同步 465
13.4.4 确定一个足够长的转换期 465
13.4.5 封装对数据库的访问 466
13.4.6 使建立数据库环境简单 466
13.4.7 将数据库资产置于变更控制之下 467
13.5 数据库重构的方法 467
13.5.1 结构重构 467
13.5.2 参照完整性重构 481
13.5.3 数据质量重构 493