[套装书]数据库系统概念(原书第7版)+数据库管理:大数据与小数据的存储、管理及分析实战(2册)
基本信息

编辑推荐
---------------------------8081317 - 数据库系统概念(原书第7版)---------------------------
数据库领域的殿堂级作品,数据库理论与实战兼修的必备之选
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
全面涵盖基础理论与新兴热点,培养下一代数据管理人才的必选书目
内容简介
书籍
计算机书籍
---------------------------8081317 - 数据库系统概念(原书第7版)---------------------------
《数据库系统概念》是数据库系统方面的经典教材之一,其内容由浅入深,既包含数据库系统基本概念,又反映数据库技术新进展。它被国际上许多大学所采用,包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学等。
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
本书全面讲解数据库设计、建模、系统构建、数据存储以及数据仓库、数据治理等方面的基础知识,并提出了一种数据库管理的新方法。本书的三位作者均为该领域专家,在大数据、数据分析、数据质量和数据集成方面经验丰富。全书理论结合实践,既有对现有数据库技术的讲解,又有对最新技术趋势的分析。为了帮助读者更好地理解基本概念,书中包含大量真实案例,涉及查询实例、代码以及图形等,并搭建了在线学习环境,这使本书成为信息系统或计算机科学专业本科生和研究生入门课程的完美教材。
计算机书籍
---------------------------8081317 - 数据库系统概念(原书第7版)---------------------------
《数据库系统概念》是数据库系统方面的经典教材之一,其内容由浅入深,既包含数据库系统基本概念,又反映数据库技术新进展。它被国际上许多大学所采用,包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学等。
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
本书全面讲解数据库设计、建模、系统构建、数据存储以及数据仓库、数据治理等方面的基础知识,并提出了一种数据库管理的新方法。本书的三位作者均为该领域专家,在大数据、数据分析、数据质量和数据集成方面经验丰富。全书理论结合实践,既有对现有数据库技术的讲解,又有对最新技术趋势的分析。为了帮助读者更好地理解基本概念,书中包含大量真实案例,涉及查询实例、代码以及图形等,并搭建了在线学习环境,这使本书成为信息系统或计算机科学专业本科生和研究生入门课程的完美教材。
作译者
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
关于我们
客户服务
友情链接
目录
[套装书具体书目]
8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战 - 9787111665199 - 机械工业出版社 - 定价 149
8081317 - 数据库系统概念(原书第7版) - 9787111681816 - 机械工业出版社 - 定价 149
---------------------------8081317 - 数据库系统概念(原书第7版)---------------------------
出版者的话
译者序
前言
关于作者
第1章 引言1
1.1 数据库系统应用1
1.2 数据库系统的目标3
1.3 数据视图6
1.3.1 数据模型6
1.3.2 关系数据模型6
1.3.3 数据抽象7
8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战 - 9787111665199 - 机械工业出版社 - 定价 149
8081317 - 数据库系统概念(原书第7版) - 9787111681816 - 机械工业出版社 - 定价 149
---------------------------8081317 - 数据库系统概念(原书第7版)---------------------------
出版者的话
译者序
前言
关于作者
第1章 引言1
1.1 数据库系统应用1
1.2 数据库系统的目标3
1.3 数据视图6
1.3.1 数据模型6
1.3.2 关系数据模型6
1.3.3 数据抽象7
1.3.4 实例和模式8
1.4 数据库语言9
1.4.1 数据定义语言9
1.4.2 SQL数据定义语言10
1.4.3 数据操纵语言10
1.4.4 SQL数据操纵语言11
1.4.5 从应用程序访问数据库11
1.5 数据库设计12
1.6 数据库引擎12
1.6.1 存储管理器13
1.6.2 查询处理器14
1.6.3 事务管理14
1.7 数据库和应用体系结构15
1.8 数据库用户和管理员16
1.8.1 数据库用户和用户界面16
1.8.2 数据库管理员17
1.9 数据库系统的历史17
1.10 总结20
术语回顾21
实践习题22
习题22
工具22
延伸阅读23
参考文献23
第一部分 关系语言
第2章 关系模型介绍26
2.1 关系数据库的结构26
2.2 数据库模式28
2.3 码29
2.4 模式图32
2.5 关系查询语言32
2.6 关系代数33
2.6.1 选择运算33
2.6.2 投影运算34
2.6.3 关系运算的复合34
2.6.4 笛卡儿积运算35
2.6.5 连接运算36
2.6.6 集合运算37
2.6.7 赋值运算38
2.6.8 更名运算39
2.6.9 等价查询40
2.7 总结40
术语回顾41
实践习题41
习题42
延伸阅读43
参考文献44
第3章 SQL介绍45
3.1 SQL查询语言概览45
3.2 SQL数据定义46
3.2.1 基本类型46
3.2.2 基本模式定义47
3.3 SQL查询的基本结构49
3.3.1 单关系查询49
3.3.2 多关系查询51
3.4 附加的基本运算55
3.4.1 更名运算55
3.4.2 字符串运算56
3.4.3 select子句中的属性说明57
3.4.4 排列元组的显示次序 57
3.4.5 where子句谓词58
3.5 集合运算58
3.5.1 并运算59
3.5.2 交运算60
3.5.3 差运算60
3.6 空值61
3.7 聚集函数62
3.7.1 基本聚集62
3.7.2 分组聚集63
3.7.3 having子句65
3.7.4 对空值和布尔值的聚集66
3.8 嵌套子查询67
3.8.1 集合成员资格67
3.8.2 集合比较68
3.8.3 空关系测试69
3.8.4 重复元组存在性测试70
3.8.5 from子句中的子查询71
3.8.6 with子句72
3.8.7 标量子查询73
3.8.8 不带from子句的标量73
3.9 数据库的修改74
3.9.1 删除75
3.9.2 插入76
3.9.3 更新77
3.10 总结78
术语回顾79
实践习题79
习题81
工具83
延伸阅读84
参考文献84
第4章 中级SQL85
4.1 连接表达式85
4.1.1 自然连接85
4.1.2 连接条件88
4.1.3 外连接89
4.1.4 连接类型和条件92
4.2 视图92
4.2.1 视图定义93
4.2.2 在SQL查询中使用视图94
4.2.3 物化视图95
4.2.4 视图更新95
4.3 事务97
4.4 完整性约束98
4.4.1 单个关系上的约束99
4.4.2 非空约束99
4.4.3 唯一性约束100
4.4.4 check子句100
4.4.5 引用完整性100
4.4.6 给约束赋名102
4.4.7 事务中对完整性约束的违反103
4.4.8 复杂check条件与断言103
4.5 SQL的数据类型与模式105
4.5.1 SQL中的日期和时间类型105
4.5.2 类型转换和格式化函数105
4.5.3 缺省值106
4.5.4 大对象类型107
4.5.5 用户自定义类型108
4.5.6 生成唯一码值110
4.5.7 create table的扩展111
4.5.8 模式、目录与环境111
4.6 SQL中的索引定义112
4.7 授权113
4.7.1 权限的授予与收回114
4.7.2 角色115
4.7.3 视图的授权116
4.7.4 模式的授权117
4.7.5 权限的转移117
4.7.6 权限的收回118
4.7.7 行级授权119
4.8 总结119
术语回顾120
实践习题121
习题122
延伸阅读123
参考文献123
第5章 高级SQL125
5.1 使用程序设计语言访问SQL125
5.1.1 JDBC126
5.1.2 从Python访问数据库132
5.1.3 ODBC132
5.1.4 嵌入式SQL134
5.2 函数和过程136
5.2.1 声明及调用SQL函数和过程136
5.2.2 用于过程和函数的语言结构137
5.2.3 外部语言例程140
5.3 触发器141
5.3.1 对触发器的需求141
5.3.2 SQL中的触发器141
5.3.3 何时不用触发器144
5.4 递归查询146
5.4.1 使用迭代的传递闭包146
5.4.2 SQL中的递归148
5.5 高级聚集特性149
5.5.1 排名150
5.5.2 分窗153
5.5.3 旋转154
5.5.4 上卷和立方体155
5.6 总结158
术语回顾158
实践习题158
习题160
工具161
延伸阅读162
第二部分 数据库设计
第6章 使用E-R模型的数据库设计164
6.1 设计过程概览164
6.1.1 设计阶段164
6.1.2 设计选择165
6.2 实体-联系模型166
6.2.1 实体集166
6.2.2 联系集167
6.3 复杂属性169
6.4 映射基数171
6.5 主码174
6.5.1 实体集174
6.5.2 联系集175
6.5.3 弱实体集176
6.6 从实体集中删除冗余属性177
6.7 将E-R图转换为关系模式180
6.7.1 强实体集的表示180
6.7.2 具有复杂属性的强实体集的表示180
6.7.3 弱实体集的表示182
6.7.4 联系集的表示182
6.7.5 模式的冗余183
6.7.6 模式的合并184
6.8 扩展的E-R特性184
6.8.1 特化185
6.8.2 概化186
6.8.3 属性继承186
6.8.4 特化上的约束187
6.8.5 聚集187
6.8.6 转换为关系模式188
6.9 实体-联系设计问题190
6.9.1 E-R图中的常见错误190
6.9.2 使用实体集还是属性191
6.9.3 使用实体集还是联系集192
6.9.4 二元还是n元联系集193
6.10 数据建模的可选表示法194
6.10.1 可选的E-R表示法195
6.10.2 统一建模语言196
6.11 数据库设计的其他方面198
6.11.1 功能要求198
6.11.2 数据流、工作流198
6.11.3 模式演化198
6.12 总结199
术语回顾200
实践习题200
习题202
工具203
延伸阅读204
参考文献204
第7章 关系数据库设计205
7.1 好的关系设计的特点205
7.1.1 分解206
7.1.2 无损分解207
7.1.3 规范化理论208
7.2 使用函数依赖进行分解208
7.2.1 符号惯例209
7.2.2 码和函数依赖209
7.2.3 无损分解和函数依赖211
7.3 范式212
7.3.1 Boyce-Codd范式212
7.3.2 第三范式214
7.3.3 BCNF和3NF的比较215
7.3.4 更高级的范式216
7.4 函数依赖理论216
7.4.1 函数依赖集的闭包216
7.4.2 属性集的闭包218
7.4.3 正则覆盖219
7.4.4 保持依赖222
7.5 使用函数依赖的分解算法223
7.5.1 BCNF分解223
7.5.2 3NF分解225
7.5.3 3NF算法的正确性226
7.6 使用多值依赖的分解227
7.6.1 多值依赖227
7.6.2 第四范式229
7.6.3 4NF分解229
7.7 更多的范式230
7.8 原子域和第一范式231
7.9 数据库设计过程232
7.9.1 E-R模型和规范化232
7.9.2 属性和联系的命名233
7.9.3 为了性能去规范化234
7.9.4 其他设计问题234
7.10 时态数据建模235
7.11 总结237
术语回顾238
实践习题239
习题241
延伸阅读243
参考文献244
第三部分 应用程序设计和开发
第8章 复杂数据类型246
8.1 半结构化数据246
8.1.1 半结构化数据模型概述246
8.1.2 JSON248
8.1.3 XML249
8.1.4 RDF和知识图谱251
8.2 面向对象253
8.2.1 对象-关系数据库系统254
8.2.2 对象-关系映射257
8.3 文本数据257
8.3.1 关键字查询258
8.3.2 相关性排名258
8.3.3 检索有效性的度量260
8.3.4 结构化数据和知识图谱上的关键字查询260
8.4 空间数据261
8.4.1 几何信息表示262
8.4.2 设计数据库263
8.4.3 地理数据264
8.4.4 空间查询265
8.5 总结266
术语回顾267
实践习题268
习题269
延伸阅读270
参考文献270
第9章 应用程序开发271
9.1 应用程序和用户界面271
9.2 Web基础272
9.2.1 统一资源定位符272
9.2.2 超文本标记语言273
9.2.3 Web服务器和会话275
9.3 servlet277
9.3.1 servlet示例277
9.3.2 servlet会话279
9.3.3 servlet的生命周期280
9.3.4 应用服务器280
9.4 可选择的服务器端框架280
9.4.1 服务器端脚本280
9.4.2 Web应用框架282
9.4.3 Django框架283
9.5 客户端代码和Web服务284
9.5.1 JavaScript284
9.5.2 Web服务288
9.5.3 断连操作288
9.5.4 移动应用平台289
9.6 应用程序体系结构290
9.6.1 业务逻辑层291
9.6.2 数据访问层和对象-关系映射291
9.7 应用程序性能294
9.7.1 通过高速缓存减少开销295
9.7.2 并行处理296
9.8 应用程序安全性296
9.8.1 SQL注入296
9.8.2 跨站点脚本和请求伪造297
9.8.3 密码泄露298
9.8.4 应用级认证299
9.8.5 应用级授权300
9.8.6 审计追踪302
9.8.7 隐私302
9.9 加密及其应用303
9.9.1 加密技术303
9.9.2 数据库中的加密支持305
9.9.3 加密和认证306
9.10 总结307
术语回顾308
实践习题309
习题309
项目建议310
工具312
延伸阅读313
参考文献313
第四部分 大数据分析
第10章 大数据316
10.1 动机316
10.1.1 大数据的来源和使用317
10.1.2 大数据查询318
10.2 大数据存储系统319
10.2.1 分布式文件系统320
10.2.2 分片322
10.2.3 键值存储系统322
10.2.4 并行和分布式数据库325
10.2.5 复制和一致性326
10.3 MapReduce范式327
10.3.1 为什么要使用MapReduce327
10.3.2 MapReduce示例1:词汇统计328
10.3.3 MapReduce示例2:日志处理329
10.3.4 MapReduce任务的并行处理331
10.3.5 Hadoop中的MapReduce332
10.3.6 MapReduce上的SQL334
10.4 超越MapReduce:代数运算335
10.4.1 代数运算的动机335
10.4.2 Spark中的代数运算336
10.5 流数据339
10.5.1 流数据的应用339
10.5.2 流数据查询341
10.5.3 流上的代数运算343
10.6 图数据库345
10.7 总结347
术语回顾347
实践习题348
习题349
工具349
延伸阅读350
参考文献350
第11章 数据分析351
11.1 分析概述351
11.2 数据仓库352
11.2.1 数据仓库成分353
11.2.2 多维数据与数据仓库模式354
11.2.3 数据仓库的数据库支持355
11.2.4 数据湖356
11.3 联机分析处理356
11.3.1 多维数据上的聚集357
11.3.2 交叉表的关系表示360
11.3.3 SQL中的OLAP361
11.3.4 报表和可视化工具364
11.4 数据挖掘365
11.4.1 数据挖掘任务的类型366
11.4.2 分类366
11.4.3 回归369
11.4.4 关联规则370
11.4.5 聚类371
11.4.6 文本挖掘372
11.5 总结372
术语回顾373
实践习题374
习题375
工具375
延伸阅读376
参考文献376
第五部分 存储管理和索引
第12章 物理存储系统378
12.1 物理存储介质概述378
12.2 存储器接口380
12.3 磁盘381
12.3.1 磁盘的物理特性381
12.3.2 磁盘的性能度量383
12.4 闪存384
12.5 RAID386
12.5.1 通过冗余提高可靠性386
12.5.2 通过并行提高性能387
12.5.3 RAID级别387
12.5.4 硬件问题389
12.5.5 RAID级别的选择390
12.5.6 其他的RAID应用391
12.6 磁盘块访问391
12.7 总结393
术语回顾394
实践习题394
习题395
延伸阅读395
参考文献396
第13章 数据存储结构397
13.1 数据库存储架构397
13.2 文件组织398
13.2.1 定长记录398
13.2.2 变长记录400
13.2.3 大对象存储402
13.3 文件中记录的组织402
13.3.1 堆文件组织403
13.3.2 顺序文件组织404
13.3.3 多表聚簇文件组织405
13.3.4 划分407
13.4 数据字典存储407
13.5 数据库缓冲区409
13.5.1 缓冲区管理器409
13.5.2 缓冲区替换策略411
13.5.3 写操作的重排序与恢复413
13.6 面向列的存储414
13.7 主存数据库的存储组织417
13.8 总结418
术语回顾418
实践习题419
习题419
延伸阅读420
参考文献420
第14章 索引421
14.1 基本概念421
14.2 顺序索引422
14.2.1 稠密索引和稀疏索引422
14.2.2 多级索引425
14.2.3 索引更新426
14.2.4 辅助索引427
14.2.5 多码索引428
14.3 B+树索引文件428
14.3.1 B+树的结构429
14.3.2 B+树的查询431
14.3.3 B+树的更新434
14.3.4 B+树更新的复杂度439
14.3.5 非唯一性搜索码440
14.4 B+树扩展441
14.4.1 B+树文件组织441
14.4.2 辅助索引和记录重分配442
14.4.3 对字符串的索引443
14.4.4 B+树索引的批量加载443
14.4.5 B树索引文件444
14.4.6 闪存上的索引445
14.4.7 主存上的索引446
14.5 散列索引447
14.6 多码访问449
14.6.1 使用多个单码索引449
14.6.2 多码索引449
14.6.3 覆盖索引450
14.7 索引的创建450
14.8 写优化索引结构452
14.8.1 LSM树452
14.8.2 缓冲树454
14.9 位图索引455
14.10 时空数据索引456
14.10.1 空间数据索引456
14.10.2 时态数据索引458
14.11 总结459
术语回顾460
实践习题461
习题463
延伸阅读463
参考文献464
第六部分 查询处理和优化
第15章 查询处理466
15.1 概述466
15.2 查询代价的度量468
15.3 选择运算470
15.3.1 文件扫描的使用和索引的选择470
15.3.2 涉及比较的选择472
15.3.3 复杂选择的实现473
15.4 排序474
15.4.1 外排序-归并算法474
15.4.2 外排序-归并的代价分析476
15.5 连接运算476
15.5.1 嵌套-循环连接477
15.5.2 块嵌套-循环连接477
15.5.3 索引嵌套-循环连接478
15.5.4 归并-连接479
15.5.5 散列-连接482
15.5.6 复杂连接485
15.5.7 空间数据上的连接486
15.6 其他运算486
15.6.1 去重486
15.6.2 投影487
15.6.3 集合运算487
15.6.4 外连接488
15.6.5 聚集489
15.7 表达式执行489
15.7.1 物化490
15.7.2 流水线490
15.7.3 对于连续流数据的流水线494
15.8 内存中的查询处理495
15.8.1 高速缓存感知算法495
15.8.2 查询编译496
15.8.3 面向列的存储496
15.9 总结496
术语回顾497
实践习题498
习题499
延伸阅读500
参考文献500
第16章 查询优化501
16.1 概述501
16.2 关系表达式的转换503
16.2.1 等价规则504
16.2.2 转换示例507
16.2.3 连接次序509
16.2.4 等价表达式的枚举509
16.3 表达式结果的统计信息估计510
16.3.1 目录信息511
16.3.2 选择规模估计512
16.3.3 连接规模估计514
16.3.4 其他运算的规模估计516
16.3.5 不同取值个数的估计516
16.4 执行计划的选择517
16.4.1 基于代价的连接次序选择517
16.4.2 采用等价规则的基于代价的优化520
16.4.3 优化中的启发式方法521
16.4.4 嵌套子查询的优化523
16.5 物化视图525
16.5.1 视图维护526
16.5.2 增量的视图维护526
16.5.3 查询优化和物化视图528
16.5.4 物化视图和索引选择529
16.6 查询优化中的高级主题529
16.6.1 top-K优化529
16.6.2 连接最小化530
16.6.3 更新的优化530
16.6.4 多查询优化和共享式扫描530
16.6.5 参数化查询优化531
16.6.6 自适应查询处理531
16.7 总结532
术语回顾532
实践习题533
习题535
延伸阅读536
参考文献536
第七部分 事务管理
第17章 事务538
17.1 事务的概念538
17.2 一个简单的事务模型539
17.3 存储器结构541
17.4 事务的原子性和持久性542
17.5 事务的隔离性543
17.6 可串行化547
17.7 事务的隔离性和原子性550
17.7.1 可恢复调度550
17.7.2 无级联调度550
17.8 事务的隔离性级别551
17.9 隔离性级别的实现553
17.9.1 锁553
17.9.2 时间戳554
17.9.3 多版本和快照隔离554
17.10 事务的SQL语句表示555
17.11 总结556
术语回顾557
实践习题558
习题558
延伸阅读559
参考文献559
第18章 并发控制560
18.1 基于锁的协议560
18.1.1 锁560
18.1.2 锁的授予563
18.1.3 两阶段封锁协议563
18.1.4 封锁的实现565
18.1.5 基于图的协议566
18.2 死锁处理568
18.2.1 死锁预防568
18.2.2 死锁检测与恢复569
18.3 多粒度571
18.4 插入操作、删除操作与谓词读573
18.4.1 删除573
18.4.2 插入574
18.4.3 谓词读和幻象现象574
18.5 基于时间戳的协议576
18.5.1 时间戳576
18.5.2 时间戳排序协议577
18.5.3 Thomas写规则578
18.6 基于有效性检查的协议580
18.7 多版本机制581
18.7.1 多版本时间戳排序582
18.7.2 多版本两阶段封锁583
18.8 快照隔离584
18.8.1 快照隔离中的多版本584
18.8.2 更新事务的有效性检查步骤585
18.8.3 串行化问题和解决方案586
18.9 实践中的弱一致性级别589
18.9.1 二级一致性589
18.9.2 游标稳定性589
18.9.3 跨用户交互的并发控制590
18.10 并发控制的高级主题591
18.10.1 在线索引创建591
18.10.2 索引结构中的并发592
18.10.3 主存数据库中的并发控制594
18.10.4 长事务596
18.10.5 利用操作的并发控制596
18.10.6 实时事务系统598
18.11 总结599
术语回顾600
实践习题601
习题603
延伸阅读604
参考文献604
第19章 恢复系统606
19.1 故障分类606
19.2 存储器607
19.2.1 稳定存储器的实现607
19.2.2 数据访问608
19.3 恢复与原子性609
19.3.1 日志记录610
19.3.2 数据库修改611
19.3.3 并发控制与恢复611
19.3.4 事务提交612
19.3.5 使用日志来重做和撤销事务612
19.3.6 检查点615
19.4 恢复算法616
19.4.1 事务回滚616
19.4.2 系统崩溃后的恢复616
19.4.3 提交处理的优化618
19.5 缓冲区管理618
19.5.1 日志记录缓冲618
19.5.2 数据库缓冲619
19.5.3 操作系统在缓冲区管理中的作用620
19.5.4 模糊检查点621
19.6 非易失性存储器上数据丢失的故障621
19.7 使用远程备份系统的高可用性622
19.8 锁的提前释放与逻辑撤销操作625
19.8.1 逻辑操作625
19.8.2 逻辑撤销日志记录626
19.8.3 有逻辑撤销的事务回滚626
19.8.4 逻辑撤销中的并发问题628
19.9 ARIES629
19.9.1 数据结构629
19.9.2 恢复算法631
19.9.3 其他特性633
19.10 主存数据库的恢复634
19.11 总结634
术语回顾636
实践习题637
习题638
延伸阅读639
参考文献639
第八部分 并行和分布式数据库
第20章 数据库系统体系结构642
20.1 概述642
20.2 集中式数据库系统642
20.3 服务器系统体系结构643
20.3.1 事务服务器体系结构644
20.3.2 数据服务器与数据存储系统646
20.3.3 客户端高速缓存647
20.4 并行系统648
20.4.1 并行数据库的动机648
20.4.2 并行系统的性能度量649
20.4.3 互连网络651
20.4.4 并行数据库体系结构654
20.4.5 共享内存655
20.4.6 共享磁盘658
20.4.7 无共享659
20.4.8 层次659
20.5 分布式系统659
20.6 并行和分布式系统中的事务处理661
20.7 基于云的服务662
20.7.1 云服务模型662
20.7.2 云服务的优缺点665
20.8 总结665
术语回顾666
实践习题667
习题667
延伸阅读668
参考文献668
第21章 并行和分布式存储669
21.1 概述669
21.2 数据分区669
21.2.1 分区策略670
21.2.2 分区技术的对比671
21.3 分区中的偏斜处理672
21.3.1 平衡的范围分区向量673
21.3.2 虚拟节点分区673
21.3.3 动态再分区674
21.4 复制676
21.4.1 副本的位置677
21.4.2 更新与副本的一致性677
21.5 并行索引678
21.6 分布式文件系统681
21.7 并行的键值存储683
21.7.1 数据表示684
21.7.2 存储与检索数据685
21.7.3 对事务的支持687
21.7.4 不使用声明式查询的管理688
21.7.5 性能优化689
21.8 总结689
术语回顾690
实践习题690
习题691
工具691
延伸阅读692
参考文献692
第22章 并行和分布式查询处理694
22.1 概述694
22.2 并行排序695
22.2.1 范围分区排序695
22.2.2 并行的外排序-归并696
22.3 并行连接697
22.3.1 分区连接697
22.3.2 分片-复制连接698
22.3.3 处理并行连接中的偏斜700
22.4 其他运算700
22.4.1 其他关系运算700
22.4.2 map和reduce操作701
22.5 查询计划的并行执行703
22.5.1 操作间并行703
22.5.2 交换算子模型705
22.5.3 情况汇总706
22.5.4 查询计划中的容错708
22.6 共享内存体系结构上的查询处理710
22.7 并行执行的查询优化711
22.7.1 并行查询计划空间712
22.7.2 并行查询计算的代价712
22.7.3 选择并行查询计划713
22.7.4 数据托管714
22.7.5 物化视图的并行维护715
22.8 流数据的并行处理716
22.8.1 元组的路由716
22.8.2 流运算的并行处理718
22.8.3 流数据的容错719
22.9 分布式查询处理720
22.9.1 来自多个数据源的数据集成720
22.9.2 模式和数据集成721
22.9.3 跨多个数据源的查询处理723
22.9.4 分布式目录系统726
22.10 总结727
术语回顾728
实践习题729
习题730
工具731
延伸阅读731
参考文献732
第23章 并行和分布式事务处理734
23.1 分布式事务734
23.1.1 系统结构735
23.1.2 系统故障模式736
23.2 提交协议736
23.2.1 两阶段提交736
23.2.2 提交期间的阻塞避免740
23.2.3 事务处理的可选模型741
23.3 分布式数据库中的并发控制743
23.3.1 封锁协议744
23.3.2 死锁处理744
23.3.3 租赁746
23.3.4 基于时间戳的分布式协议747
23.3.5 时间戳的产生747
23.3.6 分布式时间戳排序748
23.3.7 分布式有效性检查749
23.4 复制750
23.4.1 副本一致性750
23.4.2 使用副本的并发控制751
23.4.3 故障处理753
23.4.4 重构和重组755
23.5 扩展的并发控制协议756
23.5.1 多版本2PL和全局一致性时间戳756
23.5.2 分布式快照隔离757
23.5.3 联邦数据库系统中的并发控制758
23.6 具有弱一致性级别的复制759
23.6.1 用一致性换取可用性759
23.6.2 异步复制760
23.6.3 异步视图维护762
23.6.4 检测不一致性更新764
23.6.5 解决冲突的更新765
23.6.6 使用默克尔树来检测集合之间的差异766
23.7 协调器的选择768
23.7.1 备份协调器768
23.7.2 选举协调器769
23.8 分布式系统中的共识771
23.8.1 问题概述771
23.8.2 Paxos共识协议772
23.8.3 Raft共识协议774
23.8.4 使用复制状态机的容错服务777
23.8.5 使用共识的两阶段提交779
23.9 总结779
术语回顾781
实践习题781
习题783
延伸阅读783
参考文献784
第九部分 附录
附录A 详细的大学模式788
第十部分 中文在线章节一
第24章 高级索引技术
第25章 高级应用开发
第26章 区块链数据库
索引
第十一部分 英文在线章节二
第27章 形式关系查询语言
第28章 高级关系数据库设计
第29章 基于对象的数据库
第30章 XML
第31章 信息检索
第32章 PostgreSQL
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
出版者的话
赞誉
译者序
前言
作者简介
第一部分 数据库与数据库设计
第1章 数据库管理的基本概念 2
1.1 数据库技术的应用 2
1.2 关键定义 3
1.3 基于文件与数据库的数据管理方法 3
1.3.1 基于文件的方法 3
1.3.2 基于数据库的方法 4
1.4 数据库系统的元素 6
1.4.1 数据库模型与实例 6
1.4.2 数据模型 7
1.4.3 三层架构 7
1.4.4 目录 8
1.4.5 数据库用户 9
1.4.6 数据库语言 9
1.5 数据库系统和数据库管理的优点 9
1.5.1 数据独立性 9
1.5.2 数据库建模 10
1.5.3 管理结构化、半结构化、非结构化数据 10
1.5.4 管理数据冗余 10
1.5.5 指定完整性约束 11
1.5.6 并发控制 11
1.5.7 备份和恢复设备 12
1.5.8 数据安全性 12
1.5.9 性能分析工具 12
总结 12
关键术语表 13
思考题 13
问题和练习 14
第2章 数据库管理系统的架构与分类 15
2.1 DBMS的架构 15
2.1.1 连接管理器和安全管理器 16
2.1.2 DDL编译器 16
2.1.3 查询处理器 16
2.1.4 存储管理器 19
2.1.5 DBMS工具 20
2.1.6 DBMS接口 20
2.2 DBMS分类 21
2.2.1 基于数据模型的分类 21
2.2.2 基于同步访问的分类 23
2.2.3 基于架构的分类 23
2.2.4 基于使用方法的分类 24
总结 25
关键术语表 26
思考题 26
问题和练习 28
第3章 使用(E)ER模型和UML类图进行概念数据建模 29
3.1 数据库设计阶段 29
3.2 实体关系模型 30
3.2.1 实体类型 31
3.2.2 属性类型 31
3.2.3 关系类型 32
3.2.4 弱实体类型 36
3.2.5 三元关系类型 36
3.2.6 ER模型示例 38
3.2.7 ER模型的局限性 40
3.3 扩展的实体关系模型 40
3.3.1 特化/泛化 41
3.3.2 分类 42
3.3.3 聚集 43
3.3.4 EER模型的示例 43
3.3.5 设计EER模型 44
3.4 UML类图 45
3.4.1 面向对象概述 45
3.4.2 类 45
3.4.3 变量 46
3.4.4 访问修饰符 46
3.4.5 关联 47
3.4.6 特化/泛化 49
3.4.7 聚集 49
3.4.8 UML示例 49
3.4.9 高级UML建模概念 50
3.4.10 UML与EER的对比 52
总结 53
关键术语表 56
思考题 56
问题和练习 59
第4章 数据管理的组织方面 62
4.1 数据管理 62
4.1.1 目录和元数据的作用 62
4.1.2 元数据建模 63
4.1.3 数据质量 63
4.1.4 数据治理 67
4.2 数据管理中的角色 68
4.2.1 信息架构师 68
4.2.2 数据库设计师 68
4.2.3 数据所有者 68
4.2.4 数据管理员 68
4.2.5 数据库管理员 69
4.2.6 数据科学家 69
总结 69
关键术语表 70
思考题 70
问题和练习 70
第二部分 数据库系统类型
第5章 传统数据库 72
5.1 分层模型 72
5.2 CODASYL模型 75
总结 79
关键术语表 79
思考题 80
问题和练习 80
第6章 关系数据库:关系模型 81
6.1 关系模型 81
6.1.1 基本概念 82
6.1.2 正式定义 83
6.1.3 键的类型 84
6.1.4 关系约束 86
6.1.5 关系数据模型的示例 87
6.2 规范化 88
6.2.1 非规范化关系模型中的插入、删除和更新异常 88
6.2.2 非正式的规范化准则 89
6.2.3 函数依赖和主属性类型 90
6.2.4 规范化形式 90
6.3 将概念ER模型映射到关系模型 96
6.3.1 实体类型映射 96
6.3.2 关系类型映射 97
6.3.3 多值属性类型映射 103
6.3.4 弱实体类型映射 103
6.3.5 小结 104
6.4 将概念EER模型映射到关系模型 105
6.4.1 EER特化映射 106
6.4.2 EER类别映射 107
6.4.3 EER聚集映射 108
总结 109
关键术语表 110
思考题 110
问题和练习 114
第7章 关系数据库:结构化查询语言 116
7.1 关系数据库管理系统和SQL 116
7.1.1 SQL的关键特征 116
7.1.2 三层数据库架构 118
7.2 SQL数据定义语言 119
7.2.1 DDL的关键概念 119
7.2.2 DDL的示例 120
7.2.3 参照完整性约束 123
7.2.4 DROP和ALTER命令 123
7.3 SQL数据操作语言 125
7.3.1 SQL SELECT语句 125
7.3.2 SQL INSERT语句 149
7.3.3 SQL DELETE语句 149
7.3.4 SQL UPDATE语句 150
7.4 SQL视图 152
7.5 SQL索引 154
7.6 SQL权限 155
7.7 用于元数据管理的SQL 156
总结 157
关键术语表 159
思考题 160
问题和练习 167
第8章 面向对象的数据库以及对象持久性 169
8.1 概述:OO的基本概念 169
8.2 OO的高级概念 171
8.2.1 方法重载 171
8.2.2 继承 171
8.2.3 方法重写 173
8.2.4 多态和动态绑定 173
8.3 对象持久性的基本原则 175
8.4 面向对象数据库管理系统 176
8.4.1 对象标识符 177
8.4.2 ODMG标准 177
8.4.3 对象模型 178
8.4.4 对象定义语言 178
8.4.5 对象查询语言 181
8.4.6 语言绑定 183
8.5 评估OODBMS 185
总结 186
关键术语表 186
思考题 187
问题和练习 188
第9章 扩展关系数据库 189
9.1 关系模型的局限性 189
9.2 RDBMS主动拓展 190
9.2.1 触发器 190
9.2.2 存储过程 192
9.3 对象-关系型RDBMS扩展 193
9.3.1 用户定义类型 194
9.3.2 用户定义函数 197
9.3.3 继承 198
9.3.4 行为 200
9.3.5 多态性 201
9.3.6 集合类型 201
9.3.7 大对象 203
9.4 递归的SQL查询 203
总结 205
关键术语表 206
思考题 207
问题和练习 208
第10章 XML数据库 209
10.1 可扩展标记语言 209
10.1.1 基本概念 210
10.1.2 文档类型定义和XMLSchema定义 213
10.1.3 可扩展样式表语言 216
10.1.4 命名空间 219
10.1.5 XPath 219
10.2 处理XML文档 220
10.3 存储XML文档 221
10.3.1 面向文档的XML文档存储方法 222
10.3.2 面向数据的XML文档存储方法 222
10.3.3 存储XML文档的组合方法 222
10.4 XML数据和关系数据之间的差异 223
10.5 XML文档和(对象-)关系数据之间的映射 223
10.5.1 基于表的映射 223
10.5.2 模式无关的映射 224
10.5.3 模式感知的映射 226
10.5.4 SQL/XML 227
10.6 搜索XML数据 230
10.6.1 全文搜索 231
10.6.2 基于关键字的搜索 231
10.6.3 XQuery的结构化搜索 231
10.6.4 使用RDF和SPARQL进行语义搜索 232
10.7 用于信息交换的XML 234
10.7.1 面向消息的中间件 235
10.7.2 基于SOAP的Web服务 235
10.7.3 基于REST的Web服务 238
10.7.4 Web服务和数据库 239
10.8 其他数据表示格式 239
总结 243
关键术语表 245
思考题 246
问题和练习 247
第11章 NoSQL数据库 249
11.1 NoSQL运动 249
11.1.1 “一体适用”时代的终结? 249
11.1.2 NoSQL运动的出现 250
11.2 键-值存储 252
11.2.1 从键到哈希 252
11.2.2 水平扩展 253
11.2.3 实例:Memcached 254
11.2.4 请求协调器 256
11.2.5 一致性哈希 256
11.2.6 复制和冗余 258
11.2.7 最终一致性 259
11.2.8 稳定化 260
11.2.9 完整性约束和查询 261
11.3 元组和文档存储 261
11.3.1 带键的项 262
11.3.2 过滤和查询 263
11.3.3 使用MapReduce进行复杂查询和聚合 266
11.3.4 SQL毕竟…… 275
11.4 面向列的数据库 276
11.5 基于图的数据库 277
11.5.1 Cypher概述 279
11.5.2 探索社交图谱 280
11.6 其他NoSQL类别 285
总结 286
关键术语表 287
思考题 288
问题和练习 289
第三部分 物理数据存储、
事务管理和数据库访问
第12章 物理文件组织和索引 292
12.1 存储硬件和物理数据库设计 292
12.1.1 存储层次结构 292
12.1.2 硬盘驱动器的内部结构 293
12.1.3 从逻辑概念到物理结构 296
12.2 记录组织 298
12.3 文件组织 300
12.3.1 基本概念:搜索键、主文件和辅助文件组织 300
12.3.2 堆文件组织 301
12.3.3 顺序文件组织 301
12.3.4 随机文件组织(哈希) 302
12.3.5 索引顺序文件组织 306
12.3.6 列表数据组织(线性与非线性表) 310
12.3.7 辅助索引和倒排文件 313
12.3.8 B-树和B+-树 318
总结 322
关键术语表 323
思考题 324
问题和练习 325
第13章 物理数据库组织 326
13.1 物理数据库组织和数据库访问方法 326
13.1.1 从数据库到表空间 327
13.1.2 索引设计 328
13.1.3 数据库访问方法 330
13.1.4 连接操作 337
13.2 企业存储子系统和业务连续性 338
13.2.1 磁盘阵列和RAID 339
13.2.2 企业存储子系统 341
13.2.3 业务连续性 347
总结 350
关键术语表 351
思考题 351
问题和练习 353
第14章 事务管理基础 354
14.1 事务、恢复和并发控制 354
14.2 事务和事务管理 355
14.2.1 描述事务和事务生命周期 355
14.2.2 涉及事务管理的DBMS组件 356
14.2.3 日志文件 357
14.3 恢复 358
14.3.1 故障类型 358
14.3.2 系统恢复 359
14.3.3 介质恢复 360
14.4 并发控制 361
14.4.1 典型的并发性问题 361
14.4.2 调度和串行调度 363
14.4.3 可串行化调度 363
14.4.4 乐观和悲观调度器 365
14.4.5 锁和锁协议 365
14.5 事务的ACID属性 371
总结 372
关键术语表 372
思考题 373
问题和练习 375
第15章 数据库访问和数据库API 376
15.1 数据库系统的架构 376
15.1.1 集中式系统架构 376
15.1.2 分层架构 377
15.2 数据库API的分类 379
15.2.1 专有与通用API 380
15.2.2 嵌入式与调用级API 380
15.2.3 早期绑定与晚期绑定 381
15.3 通用数据库API 382
15.3.1 ODBC 382
15.3.2 OLE DB和ADO 383
15.3.3 ADO.NET 384
15.3.4 Java数据库连接 387
15.3.5 插曲:SQL注入与访问安全 392
15.3.6 SQLJ 393
15.3.7 插曲:嵌入式API与嵌入式DBMS 395
15.3.8 语言集成查询 396
15.4 对象持久性和对象关系映射API 398
15.4.1 使用Enterprise JavaBeans的对象持久性 398
15.4.2 使用Java持久性 API实现对象持久性 402
15.4.3 使用Java数据对象的对象持久性 407
15.4.4 其他宿主语言中的对象持久性 410
15.5 数据库API总结 414
15.6 万维网中的数据库访问 416
15.6.1 最初的Web服务器 416
15.6.2 通用网关接口:面向动态网页 416
15.6.3 客户端脚本:对更丰富Web的渴望 418
15.6.4 作为平台的JavaScript 419
15.6.5 DBMS自适应:REST、其他Web服务和展望 421
总结 423
关键术语表 424
思考题 424
问题和练习 426
第16章 数据分布和分布式事务管理 427
16.1 分布式系统和分布式数据库 427
16.2 分布式数据库的架构规则 428
16.3 分割、分配和复制 430
16.3.1 垂直分割 430
16.3.2 水平分割(分片) 431
16.3.3 混合分割 431
16.3.4 复制 433
16.3.5 元数据的分布和复制 433
16.4 透明性 434
16.5 分布式查询处理 435
16.6 分布式事务管理和并发控制 437
16.6.1 主站点和主副本2PL 437
16.6.2 分布式2PL 438
16.6.3 两阶段提交协议 439
16.6.4 乐观并发和松耦合系统 441
16.6.5 基于补偿的事务模型 442
16.7 最终一致性和BASE事务 445
16.7.1 水平分割和一致性哈希 445
16.7.2 CAP定理 445
16.7.3 BASE事务 446
16.7.4 多版本并发控制和向量时钟 447
16.7.5 基于Quorum的一致性 448
总结 450
关键术语表 451
思考题 451
问题和练习 452
第四部分 数据仓库、数据治理
和大数据分析
第17章 数据仓库与商务智能 454
17.1 操作与战术/战略决策 454
17.2 数据仓库定义 455
17.3 数据仓库模式 457
17.3.1 星形模式 457
17.3.2 雪花模式 458
17.3.3 事实星座模式 458
17.3.4 特定的模式问题 459
17.4 抽取、转换和加载过程 465
17.5 数据集市 467
17.6 虚拟数据仓库和虚拟数据集市 468
17.7 操作数据存储 469
17.8 数据仓库与数据湖 469
17.9 商务智能 470
17.9.1 查询和报告 471
17.9.2 数据透视表 471
17.9.3 联机分析处理 471
总结 479
关键术语表 480
思考题 481
问题和练习 483
第18章 数据集成、数据质量和数据治理 485
18.1 数据与流程集成 485
18.1.1 分析型和操作型数据需求的融合 486
18.1.2 数据集成和数据集成模式 487
18.1.3 数据和流程集成中的数据服务和数据流 494
18.2 搜索非结构化数据和企业搜索 500
18.2.1 全文搜索原理 500
18.2.2 索引全文文档 501
18.2.3 网络搜索引擎 502
18.2.4 企业搜索 504
18.3 数据质量和主数据管理 505
18.4 数据治理 506
18.4.1 全面数据质量管理 507
18.4.2 能力成熟度模型集成 507
18.4.3 数据管理知识体系 508
18.4.4 信息和相关技术的控制目标 508
18.4.5 信息技术基础架构库 508
18.5 展望 508
总结 509
关键术语表 509
思考题 510
问题和练习 511
第19章 大数据 513
19.1 大数据的5个V 513
19.2 Hadoop 516
19.2.1 Hadoop的历史 516
19.2.2 Hadoop堆栈 517
19.3 Hadoop中的SQL 528
19.3.1 HBase:Hadoop上的第一个数据库 528
19.3.2 Pig 533
19.3.3 Hive 533
19.4 Apache Spark 536
19.4.1 Spark Core 536
19.4.2 Spark SQL 538
19.4.3 MLlib、Spark Streaming和GraphX 540
总结 541
关键术语表 542
思考题 543
问题和练习 544
第20章 分析学 546
20.1 分析过程模型 546
20.2 分析应用程序实例 548
20.3 数据科学家职务简介 549
20.4 数据预处理 550
20.4.1 用于分析的去规范化数据 550
20.4.2 抽样 551
20.4.3 探索性分析 551
20.4.4 缺失值 552
20.4.5 异常值检测和处理 553
20.5 分析的类型 553
20.5.1 预测性分析 553
20.5.2 评估预测模型 560
20.5.3 描述性分析 566
20.5.4 社交网络分析 570
20.6 分析模型的后处理 574
20.7 分析模型成功的关键因素 575
20.8 分析中的经济学视角 576
20.8.1 总所有权成本 576
20.8.2 投资回报 576
20.8.3 内包与外包 577
20.8.4 本地解决方案与云解决方案 578
20.8.5 开源软件与商业软件 579
20.9 提高分析的投资回报率 580
20.9.1 新的数据来源 580
20.9.2 数据质量 582
20.9.3 管理支持 583
20.9.4 组织因素 584
20.9.5 交叉应用 584
20.10 隐私和安全 585
20.10.1 关于隐私和安全的总体考虑 585
20.10.2 RACI矩阵 586
20.10.3 访问内部数据 587
20.10.4 隐私条例 591
总结 592
关键术语表 593
思考题 594
问题和练习 597
附录 使用在线环境
1.4 数据库语言9
1.4.1 数据定义语言9
1.4.2 SQL数据定义语言10
1.4.3 数据操纵语言10
1.4.4 SQL数据操纵语言11
1.4.5 从应用程序访问数据库11
1.5 数据库设计12
1.6 数据库引擎12
1.6.1 存储管理器13
1.6.2 查询处理器14
1.6.3 事务管理14
1.7 数据库和应用体系结构15
1.8 数据库用户和管理员16
1.8.1 数据库用户和用户界面16
1.8.2 数据库管理员17
1.9 数据库系统的历史17
1.10 总结20
术语回顾21
实践习题22
习题22
工具22
延伸阅读23
参考文献23
第一部分 关系语言
第2章 关系模型介绍26
2.1 关系数据库的结构26
2.2 数据库模式28
2.3 码29
2.4 模式图32
2.5 关系查询语言32
2.6 关系代数33
2.6.1 选择运算33
2.6.2 投影运算34
2.6.3 关系运算的复合34
2.6.4 笛卡儿积运算35
2.6.5 连接运算36
2.6.6 集合运算37
2.6.7 赋值运算38
2.6.8 更名运算39
2.6.9 等价查询40
2.7 总结40
术语回顾41
实践习题41
习题42
延伸阅读43
参考文献44
第3章 SQL介绍45
3.1 SQL查询语言概览45
3.2 SQL数据定义46
3.2.1 基本类型46
3.2.2 基本模式定义47
3.3 SQL查询的基本结构49
3.3.1 单关系查询49
3.3.2 多关系查询51
3.4 附加的基本运算55
3.4.1 更名运算55
3.4.2 字符串运算56
3.4.3 select子句中的属性说明57
3.4.4 排列元组的显示次序 57
3.4.5 where子句谓词58
3.5 集合运算58
3.5.1 并运算59
3.5.2 交运算60
3.5.3 差运算60
3.6 空值61
3.7 聚集函数62
3.7.1 基本聚集62
3.7.2 分组聚集63
3.7.3 having子句65
3.7.4 对空值和布尔值的聚集66
3.8 嵌套子查询67
3.8.1 集合成员资格67
3.8.2 集合比较68
3.8.3 空关系测试69
3.8.4 重复元组存在性测试70
3.8.5 from子句中的子查询71
3.8.6 with子句72
3.8.7 标量子查询73
3.8.8 不带from子句的标量73
3.9 数据库的修改74
3.9.1 删除75
3.9.2 插入76
3.9.3 更新77
3.10 总结78
术语回顾79
实践习题79
习题81
工具83
延伸阅读84
参考文献84
第4章 中级SQL85
4.1 连接表达式85
4.1.1 自然连接85
4.1.2 连接条件88
4.1.3 外连接89
4.1.4 连接类型和条件92
4.2 视图92
4.2.1 视图定义93
4.2.2 在SQL查询中使用视图94
4.2.3 物化视图95
4.2.4 视图更新95
4.3 事务97
4.4 完整性约束98
4.4.1 单个关系上的约束99
4.4.2 非空约束99
4.4.3 唯一性约束100
4.4.4 check子句100
4.4.5 引用完整性100
4.4.6 给约束赋名102
4.4.7 事务中对完整性约束的违反103
4.4.8 复杂check条件与断言103
4.5 SQL的数据类型与模式105
4.5.1 SQL中的日期和时间类型105
4.5.2 类型转换和格式化函数105
4.5.3 缺省值106
4.5.4 大对象类型107
4.5.5 用户自定义类型108
4.5.6 生成唯一码值110
4.5.7 create table的扩展111
4.5.8 模式、目录与环境111
4.6 SQL中的索引定义112
4.7 授权113
4.7.1 权限的授予与收回114
4.7.2 角色115
4.7.3 视图的授权116
4.7.4 模式的授权117
4.7.5 权限的转移117
4.7.6 权限的收回118
4.7.7 行级授权119
4.8 总结119
术语回顾120
实践习题121
习题122
延伸阅读123
参考文献123
第5章 高级SQL125
5.1 使用程序设计语言访问SQL125
5.1.1 JDBC126
5.1.2 从Python访问数据库132
5.1.3 ODBC132
5.1.4 嵌入式SQL134
5.2 函数和过程136
5.2.1 声明及调用SQL函数和过程136
5.2.2 用于过程和函数的语言结构137
5.2.3 外部语言例程140
5.3 触发器141
5.3.1 对触发器的需求141
5.3.2 SQL中的触发器141
5.3.3 何时不用触发器144
5.4 递归查询146
5.4.1 使用迭代的传递闭包146
5.4.2 SQL中的递归148
5.5 高级聚集特性149
5.5.1 排名150
5.5.2 分窗153
5.5.3 旋转154
5.5.4 上卷和立方体155
5.6 总结158
术语回顾158
实践习题158
习题160
工具161
延伸阅读162
第二部分 数据库设计
第6章 使用E-R模型的数据库设计164
6.1 设计过程概览164
6.1.1 设计阶段164
6.1.2 设计选择165
6.2 实体-联系模型166
6.2.1 实体集166
6.2.2 联系集167
6.3 复杂属性169
6.4 映射基数171
6.5 主码174
6.5.1 实体集174
6.5.2 联系集175
6.5.3 弱实体集176
6.6 从实体集中删除冗余属性177
6.7 将E-R图转换为关系模式180
6.7.1 强实体集的表示180
6.7.2 具有复杂属性的强实体集的表示180
6.7.3 弱实体集的表示182
6.7.4 联系集的表示182
6.7.5 模式的冗余183
6.7.6 模式的合并184
6.8 扩展的E-R特性184
6.8.1 特化185
6.8.2 概化186
6.8.3 属性继承186
6.8.4 特化上的约束187
6.8.5 聚集187
6.8.6 转换为关系模式188
6.9 实体-联系设计问题190
6.9.1 E-R图中的常见错误190
6.9.2 使用实体集还是属性191
6.9.3 使用实体集还是联系集192
6.9.4 二元还是n元联系集193
6.10 数据建模的可选表示法194
6.10.1 可选的E-R表示法195
6.10.2 统一建模语言196
6.11 数据库设计的其他方面198
6.11.1 功能要求198
6.11.2 数据流、工作流198
6.11.3 模式演化198
6.12 总结199
术语回顾200
实践习题200
习题202
工具203
延伸阅读204
参考文献204
第7章 关系数据库设计205
7.1 好的关系设计的特点205
7.1.1 分解206
7.1.2 无损分解207
7.1.3 规范化理论208
7.2 使用函数依赖进行分解208
7.2.1 符号惯例209
7.2.2 码和函数依赖209
7.2.3 无损分解和函数依赖211
7.3 范式212
7.3.1 Boyce-Codd范式212
7.3.2 第三范式214
7.3.3 BCNF和3NF的比较215
7.3.4 更高级的范式216
7.4 函数依赖理论216
7.4.1 函数依赖集的闭包216
7.4.2 属性集的闭包218
7.4.3 正则覆盖219
7.4.4 保持依赖222
7.5 使用函数依赖的分解算法223
7.5.1 BCNF分解223
7.5.2 3NF分解225
7.5.3 3NF算法的正确性226
7.6 使用多值依赖的分解227
7.6.1 多值依赖227
7.6.2 第四范式229
7.6.3 4NF分解229
7.7 更多的范式230
7.8 原子域和第一范式231
7.9 数据库设计过程232
7.9.1 E-R模型和规范化232
7.9.2 属性和联系的命名233
7.9.3 为了性能去规范化234
7.9.4 其他设计问题234
7.10 时态数据建模235
7.11 总结237
术语回顾238
实践习题239
习题241
延伸阅读243
参考文献244
第三部分 应用程序设计和开发
第8章 复杂数据类型246
8.1 半结构化数据246
8.1.1 半结构化数据模型概述246
8.1.2 JSON248
8.1.3 XML249
8.1.4 RDF和知识图谱251
8.2 面向对象253
8.2.1 对象-关系数据库系统254
8.2.2 对象-关系映射257
8.3 文本数据257
8.3.1 关键字查询258
8.3.2 相关性排名258
8.3.3 检索有效性的度量260
8.3.4 结构化数据和知识图谱上的关键字查询260
8.4 空间数据261
8.4.1 几何信息表示262
8.4.2 设计数据库263
8.4.3 地理数据264
8.4.4 空间查询265
8.5 总结266
术语回顾267
实践习题268
习题269
延伸阅读270
参考文献270
第9章 应用程序开发271
9.1 应用程序和用户界面271
9.2 Web基础272
9.2.1 统一资源定位符272
9.2.2 超文本标记语言273
9.2.3 Web服务器和会话275
9.3 servlet277
9.3.1 servlet示例277
9.3.2 servlet会话279
9.3.3 servlet的生命周期280
9.3.4 应用服务器280
9.4 可选择的服务器端框架280
9.4.1 服务器端脚本280
9.4.2 Web应用框架282
9.4.3 Django框架283
9.5 客户端代码和Web服务284
9.5.1 JavaScript284
9.5.2 Web服务288
9.5.3 断连操作288
9.5.4 移动应用平台289
9.6 应用程序体系结构290
9.6.1 业务逻辑层291
9.6.2 数据访问层和对象-关系映射291
9.7 应用程序性能294
9.7.1 通过高速缓存减少开销295
9.7.2 并行处理296
9.8 应用程序安全性296
9.8.1 SQL注入296
9.8.2 跨站点脚本和请求伪造297
9.8.3 密码泄露298
9.8.4 应用级认证299
9.8.5 应用级授权300
9.8.6 审计追踪302
9.8.7 隐私302
9.9 加密及其应用303
9.9.1 加密技术303
9.9.2 数据库中的加密支持305
9.9.3 加密和认证306
9.10 总结307
术语回顾308
实践习题309
习题309
项目建议310
工具312
延伸阅读313
参考文献313
第四部分 大数据分析
第10章 大数据316
10.1 动机316
10.1.1 大数据的来源和使用317
10.1.2 大数据查询318
10.2 大数据存储系统319
10.2.1 分布式文件系统320
10.2.2 分片322
10.2.3 键值存储系统322
10.2.4 并行和分布式数据库325
10.2.5 复制和一致性326
10.3 MapReduce范式327
10.3.1 为什么要使用MapReduce327
10.3.2 MapReduce示例1:词汇统计328
10.3.3 MapReduce示例2:日志处理329
10.3.4 MapReduce任务的并行处理331
10.3.5 Hadoop中的MapReduce332
10.3.6 MapReduce上的SQL334
10.4 超越MapReduce:代数运算335
10.4.1 代数运算的动机335
10.4.2 Spark中的代数运算336
10.5 流数据339
10.5.1 流数据的应用339
10.5.2 流数据查询341
10.5.3 流上的代数运算343
10.6 图数据库345
10.7 总结347
术语回顾347
实践习题348
习题349
工具349
延伸阅读350
参考文献350
第11章 数据分析351
11.1 分析概述351
11.2 数据仓库352
11.2.1 数据仓库成分353
11.2.2 多维数据与数据仓库模式354
11.2.3 数据仓库的数据库支持355
11.2.4 数据湖356
11.3 联机分析处理356
11.3.1 多维数据上的聚集357
11.3.2 交叉表的关系表示360
11.3.3 SQL中的OLAP361
11.3.4 报表和可视化工具364
11.4 数据挖掘365
11.4.1 数据挖掘任务的类型366
11.4.2 分类366
11.4.3 回归369
11.4.4 关联规则370
11.4.5 聚类371
11.4.6 文本挖掘372
11.5 总结372
术语回顾373
实践习题374
习题375
工具375
延伸阅读376
参考文献376
第五部分 存储管理和索引
第12章 物理存储系统378
12.1 物理存储介质概述378
12.2 存储器接口380
12.3 磁盘381
12.3.1 磁盘的物理特性381
12.3.2 磁盘的性能度量383
12.4 闪存384
12.5 RAID386
12.5.1 通过冗余提高可靠性386
12.5.2 通过并行提高性能387
12.5.3 RAID级别387
12.5.4 硬件问题389
12.5.5 RAID级别的选择390
12.5.6 其他的RAID应用391
12.6 磁盘块访问391
12.7 总结393
术语回顾394
实践习题394
习题395
延伸阅读395
参考文献396
第13章 数据存储结构397
13.1 数据库存储架构397
13.2 文件组织398
13.2.1 定长记录398
13.2.2 变长记录400
13.2.3 大对象存储402
13.3 文件中记录的组织402
13.3.1 堆文件组织403
13.3.2 顺序文件组织404
13.3.3 多表聚簇文件组织405
13.3.4 划分407
13.4 数据字典存储407
13.5 数据库缓冲区409
13.5.1 缓冲区管理器409
13.5.2 缓冲区替换策略411
13.5.3 写操作的重排序与恢复413
13.6 面向列的存储414
13.7 主存数据库的存储组织417
13.8 总结418
术语回顾418
实践习题419
习题419
延伸阅读420
参考文献420
第14章 索引421
14.1 基本概念421
14.2 顺序索引422
14.2.1 稠密索引和稀疏索引422
14.2.2 多级索引425
14.2.3 索引更新426
14.2.4 辅助索引427
14.2.5 多码索引428
14.3 B+树索引文件428
14.3.1 B+树的结构429
14.3.2 B+树的查询431
14.3.3 B+树的更新434
14.3.4 B+树更新的复杂度439
14.3.5 非唯一性搜索码440
14.4 B+树扩展441
14.4.1 B+树文件组织441
14.4.2 辅助索引和记录重分配442
14.4.3 对字符串的索引443
14.4.4 B+树索引的批量加载443
14.4.5 B树索引文件444
14.4.6 闪存上的索引445
14.4.7 主存上的索引446
14.5 散列索引447
14.6 多码访问449
14.6.1 使用多个单码索引449
14.6.2 多码索引449
14.6.3 覆盖索引450
14.7 索引的创建450
14.8 写优化索引结构452
14.8.1 LSM树452
14.8.2 缓冲树454
14.9 位图索引455
14.10 时空数据索引456
14.10.1 空间数据索引456
14.10.2 时态数据索引458
14.11 总结459
术语回顾460
实践习题461
习题463
延伸阅读463
参考文献464
第六部分 查询处理和优化
第15章 查询处理466
15.1 概述466
15.2 查询代价的度量468
15.3 选择运算470
15.3.1 文件扫描的使用和索引的选择470
15.3.2 涉及比较的选择472
15.3.3 复杂选择的实现473
15.4 排序474
15.4.1 外排序-归并算法474
15.4.2 外排序-归并的代价分析476
15.5 连接运算476
15.5.1 嵌套-循环连接477
15.5.2 块嵌套-循环连接477
15.5.3 索引嵌套-循环连接478
15.5.4 归并-连接479
15.5.5 散列-连接482
15.5.6 复杂连接485
15.5.7 空间数据上的连接486
15.6 其他运算486
15.6.1 去重486
15.6.2 投影487
15.6.3 集合运算487
15.6.4 外连接488
15.6.5 聚集489
15.7 表达式执行489
15.7.1 物化490
15.7.2 流水线490
15.7.3 对于连续流数据的流水线494
15.8 内存中的查询处理495
15.8.1 高速缓存感知算法495
15.8.2 查询编译496
15.8.3 面向列的存储496
15.9 总结496
术语回顾497
实践习题498
习题499
延伸阅读500
参考文献500
第16章 查询优化501
16.1 概述501
16.2 关系表达式的转换503
16.2.1 等价规则504
16.2.2 转换示例507
16.2.3 连接次序509
16.2.4 等价表达式的枚举509
16.3 表达式结果的统计信息估计510
16.3.1 目录信息511
16.3.2 选择规模估计512
16.3.3 连接规模估计514
16.3.4 其他运算的规模估计516
16.3.5 不同取值个数的估计516
16.4 执行计划的选择517
16.4.1 基于代价的连接次序选择517
16.4.2 采用等价规则的基于代价的优化520
16.4.3 优化中的启发式方法521
16.4.4 嵌套子查询的优化523
16.5 物化视图525
16.5.1 视图维护526
16.5.2 增量的视图维护526
16.5.3 查询优化和物化视图528
16.5.4 物化视图和索引选择529
16.6 查询优化中的高级主题529
16.6.1 top-K优化529
16.6.2 连接最小化530
16.6.3 更新的优化530
16.6.4 多查询优化和共享式扫描530
16.6.5 参数化查询优化531
16.6.6 自适应查询处理531
16.7 总结532
术语回顾532
实践习题533
习题535
延伸阅读536
参考文献536
第七部分 事务管理
第17章 事务538
17.1 事务的概念538
17.2 一个简单的事务模型539
17.3 存储器结构541
17.4 事务的原子性和持久性542
17.5 事务的隔离性543
17.6 可串行化547
17.7 事务的隔离性和原子性550
17.7.1 可恢复调度550
17.7.2 无级联调度550
17.8 事务的隔离性级别551
17.9 隔离性级别的实现553
17.9.1 锁553
17.9.2 时间戳554
17.9.3 多版本和快照隔离554
17.10 事务的SQL语句表示555
17.11 总结556
术语回顾557
实践习题558
习题558
延伸阅读559
参考文献559
第18章 并发控制560
18.1 基于锁的协议560
18.1.1 锁560
18.1.2 锁的授予563
18.1.3 两阶段封锁协议563
18.1.4 封锁的实现565
18.1.5 基于图的协议566
18.2 死锁处理568
18.2.1 死锁预防568
18.2.2 死锁检测与恢复569
18.3 多粒度571
18.4 插入操作、删除操作与谓词读573
18.4.1 删除573
18.4.2 插入574
18.4.3 谓词读和幻象现象574
18.5 基于时间戳的协议576
18.5.1 时间戳576
18.5.2 时间戳排序协议577
18.5.3 Thomas写规则578
18.6 基于有效性检查的协议580
18.7 多版本机制581
18.7.1 多版本时间戳排序582
18.7.2 多版本两阶段封锁583
18.8 快照隔离584
18.8.1 快照隔离中的多版本584
18.8.2 更新事务的有效性检查步骤585
18.8.3 串行化问题和解决方案586
18.9 实践中的弱一致性级别589
18.9.1 二级一致性589
18.9.2 游标稳定性589
18.9.3 跨用户交互的并发控制590
18.10 并发控制的高级主题591
18.10.1 在线索引创建591
18.10.2 索引结构中的并发592
18.10.3 主存数据库中的并发控制594
18.10.4 长事务596
18.10.5 利用操作的并发控制596
18.10.6 实时事务系统598
18.11 总结599
术语回顾600
实践习题601
习题603
延伸阅读604
参考文献604
第19章 恢复系统606
19.1 故障分类606
19.2 存储器607
19.2.1 稳定存储器的实现607
19.2.2 数据访问608
19.3 恢复与原子性609
19.3.1 日志记录610
19.3.2 数据库修改611
19.3.3 并发控制与恢复611
19.3.4 事务提交612
19.3.5 使用日志来重做和撤销事务612
19.3.6 检查点615
19.4 恢复算法616
19.4.1 事务回滚616
19.4.2 系统崩溃后的恢复616
19.4.3 提交处理的优化618
19.5 缓冲区管理618
19.5.1 日志记录缓冲618
19.5.2 数据库缓冲619
19.5.3 操作系统在缓冲区管理中的作用620
19.5.4 模糊检查点621
19.6 非易失性存储器上数据丢失的故障621
19.7 使用远程备份系统的高可用性622
19.8 锁的提前释放与逻辑撤销操作625
19.8.1 逻辑操作625
19.8.2 逻辑撤销日志记录626
19.8.3 有逻辑撤销的事务回滚626
19.8.4 逻辑撤销中的并发问题628
19.9 ARIES629
19.9.1 数据结构629
19.9.2 恢复算法631
19.9.3 其他特性633
19.10 主存数据库的恢复634
19.11 总结634
术语回顾636
实践习题637
习题638
延伸阅读639
参考文献639
第八部分 并行和分布式数据库
第20章 数据库系统体系结构642
20.1 概述642
20.2 集中式数据库系统642
20.3 服务器系统体系结构643
20.3.1 事务服务器体系结构644
20.3.2 数据服务器与数据存储系统646
20.3.3 客户端高速缓存647
20.4 并行系统648
20.4.1 并行数据库的动机648
20.4.2 并行系统的性能度量649
20.4.3 互连网络651
20.4.4 并行数据库体系结构654
20.4.5 共享内存655
20.4.6 共享磁盘658
20.4.7 无共享659
20.4.8 层次659
20.5 分布式系统659
20.6 并行和分布式系统中的事务处理661
20.7 基于云的服务662
20.7.1 云服务模型662
20.7.2 云服务的优缺点665
20.8 总结665
术语回顾666
实践习题667
习题667
延伸阅读668
参考文献668
第21章 并行和分布式存储669
21.1 概述669
21.2 数据分区669
21.2.1 分区策略670
21.2.2 分区技术的对比671
21.3 分区中的偏斜处理672
21.3.1 平衡的范围分区向量673
21.3.2 虚拟节点分区673
21.3.3 动态再分区674
21.4 复制676
21.4.1 副本的位置677
21.4.2 更新与副本的一致性677
21.5 并行索引678
21.6 分布式文件系统681
21.7 并行的键值存储683
21.7.1 数据表示684
21.7.2 存储与检索数据685
21.7.3 对事务的支持687
21.7.4 不使用声明式查询的管理688
21.7.5 性能优化689
21.8 总结689
术语回顾690
实践习题690
习题691
工具691
延伸阅读692
参考文献692
第22章 并行和分布式查询处理694
22.1 概述694
22.2 并行排序695
22.2.1 范围分区排序695
22.2.2 并行的外排序-归并696
22.3 并行连接697
22.3.1 分区连接697
22.3.2 分片-复制连接698
22.3.3 处理并行连接中的偏斜700
22.4 其他运算700
22.4.1 其他关系运算700
22.4.2 map和reduce操作701
22.5 查询计划的并行执行703
22.5.1 操作间并行703
22.5.2 交换算子模型705
22.5.3 情况汇总706
22.5.4 查询计划中的容错708
22.6 共享内存体系结构上的查询处理710
22.7 并行执行的查询优化711
22.7.1 并行查询计划空间712
22.7.2 并行查询计算的代价712
22.7.3 选择并行查询计划713
22.7.4 数据托管714
22.7.5 物化视图的并行维护715
22.8 流数据的并行处理716
22.8.1 元组的路由716
22.8.2 流运算的并行处理718
22.8.3 流数据的容错719
22.9 分布式查询处理720
22.9.1 来自多个数据源的数据集成720
22.9.2 模式和数据集成721
22.9.3 跨多个数据源的查询处理723
22.9.4 分布式目录系统726
22.10 总结727
术语回顾728
实践习题729
习题730
工具731
延伸阅读731
参考文献732
第23章 并行和分布式事务处理734
23.1 分布式事务734
23.1.1 系统结构735
23.1.2 系统故障模式736
23.2 提交协议736
23.2.1 两阶段提交736
23.2.2 提交期间的阻塞避免740
23.2.3 事务处理的可选模型741
23.3 分布式数据库中的并发控制743
23.3.1 封锁协议744
23.3.2 死锁处理744
23.3.3 租赁746
23.3.4 基于时间戳的分布式协议747
23.3.5 时间戳的产生747
23.3.6 分布式时间戳排序748
23.3.7 分布式有效性检查749
23.4 复制750
23.4.1 副本一致性750
23.4.2 使用副本的并发控制751
23.4.3 故障处理753
23.4.4 重构和重组755
23.5 扩展的并发控制协议756
23.5.1 多版本2PL和全局一致性时间戳756
23.5.2 分布式快照隔离757
23.5.3 联邦数据库系统中的并发控制758
23.6 具有弱一致性级别的复制759
23.6.1 用一致性换取可用性759
23.6.2 异步复制760
23.6.3 异步视图维护762
23.6.4 检测不一致性更新764
23.6.5 解决冲突的更新765
23.6.6 使用默克尔树来检测集合之间的差异766
23.7 协调器的选择768
23.7.1 备份协调器768
23.7.2 选举协调器769
23.8 分布式系统中的共识771
23.8.1 问题概述771
23.8.2 Paxos共识协议772
23.8.3 Raft共识协议774
23.8.4 使用复制状态机的容错服务777
23.8.5 使用共识的两阶段提交779
23.9 总结779
术语回顾781
实践习题781
习题783
延伸阅读783
参考文献784
第九部分 附录
附录A 详细的大学模式788
第十部分 中文在线章节一
第24章 高级索引技术
第25章 高级应用开发
第26章 区块链数据库
索引
第十一部分 英文在线章节二
第27章 形式关系查询语言
第28章 高级关系数据库设计
第29章 基于对象的数据库
第30章 XML
第31章 信息检索
第32章 PostgreSQL
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
出版者的话
赞誉
译者序
前言
作者简介
第一部分 数据库与数据库设计
第1章 数据库管理的基本概念 2
1.1 数据库技术的应用 2
1.2 关键定义 3
1.3 基于文件与数据库的数据管理方法 3
1.3.1 基于文件的方法 3
1.3.2 基于数据库的方法 4
1.4 数据库系统的元素 6
1.4.1 数据库模型与实例 6
1.4.2 数据模型 7
1.4.3 三层架构 7
1.4.4 目录 8
1.4.5 数据库用户 9
1.4.6 数据库语言 9
1.5 数据库系统和数据库管理的优点 9
1.5.1 数据独立性 9
1.5.2 数据库建模 10
1.5.3 管理结构化、半结构化、非结构化数据 10
1.5.4 管理数据冗余 10
1.5.5 指定完整性约束 11
1.5.6 并发控制 11
1.5.7 备份和恢复设备 12
1.5.8 数据安全性 12
1.5.9 性能分析工具 12
总结 12
关键术语表 13
思考题 13
问题和练习 14
第2章 数据库管理系统的架构与分类 15
2.1 DBMS的架构 15
2.1.1 连接管理器和安全管理器 16
2.1.2 DDL编译器 16
2.1.3 查询处理器 16
2.1.4 存储管理器 19
2.1.5 DBMS工具 20
2.1.6 DBMS接口 20
2.2 DBMS分类 21
2.2.1 基于数据模型的分类 21
2.2.2 基于同步访问的分类 23
2.2.3 基于架构的分类 23
2.2.4 基于使用方法的分类 24
总结 25
关键术语表 26
思考题 26
问题和练习 28
第3章 使用(E)ER模型和UML类图进行概念数据建模 29
3.1 数据库设计阶段 29
3.2 实体关系模型 30
3.2.1 实体类型 31
3.2.2 属性类型 31
3.2.3 关系类型 32
3.2.4 弱实体类型 36
3.2.5 三元关系类型 36
3.2.6 ER模型示例 38
3.2.7 ER模型的局限性 40
3.3 扩展的实体关系模型 40
3.3.1 特化/泛化 41
3.3.2 分类 42
3.3.3 聚集 43
3.3.4 EER模型的示例 43
3.3.5 设计EER模型 44
3.4 UML类图 45
3.4.1 面向对象概述 45
3.4.2 类 45
3.4.3 变量 46
3.4.4 访问修饰符 46
3.4.5 关联 47
3.4.6 特化/泛化 49
3.4.7 聚集 49
3.4.8 UML示例 49
3.4.9 高级UML建模概念 50
3.4.10 UML与EER的对比 52
总结 53
关键术语表 56
思考题 56
问题和练习 59
第4章 数据管理的组织方面 62
4.1 数据管理 62
4.1.1 目录和元数据的作用 62
4.1.2 元数据建模 63
4.1.3 数据质量 63
4.1.4 数据治理 67
4.2 数据管理中的角色 68
4.2.1 信息架构师 68
4.2.2 数据库设计师 68
4.2.3 数据所有者 68
4.2.4 数据管理员 68
4.2.5 数据库管理员 69
4.2.6 数据科学家 69
总结 69
关键术语表 70
思考题 70
问题和练习 70
第二部分 数据库系统类型
第5章 传统数据库 72
5.1 分层模型 72
5.2 CODASYL模型 75
总结 79
关键术语表 79
思考题 80
问题和练习 80
第6章 关系数据库:关系模型 81
6.1 关系模型 81
6.1.1 基本概念 82
6.1.2 正式定义 83
6.1.3 键的类型 84
6.1.4 关系约束 86
6.1.5 关系数据模型的示例 87
6.2 规范化 88
6.2.1 非规范化关系模型中的插入、删除和更新异常 88
6.2.2 非正式的规范化准则 89
6.2.3 函数依赖和主属性类型 90
6.2.4 规范化形式 90
6.3 将概念ER模型映射到关系模型 96
6.3.1 实体类型映射 96
6.3.2 关系类型映射 97
6.3.3 多值属性类型映射 103
6.3.4 弱实体类型映射 103
6.3.5 小结 104
6.4 将概念EER模型映射到关系模型 105
6.4.1 EER特化映射 106
6.4.2 EER类别映射 107
6.4.3 EER聚集映射 108
总结 109
关键术语表 110
思考题 110
问题和练习 114
第7章 关系数据库:结构化查询语言 116
7.1 关系数据库管理系统和SQL 116
7.1.1 SQL的关键特征 116
7.1.2 三层数据库架构 118
7.2 SQL数据定义语言 119
7.2.1 DDL的关键概念 119
7.2.2 DDL的示例 120
7.2.3 参照完整性约束 123
7.2.4 DROP和ALTER命令 123
7.3 SQL数据操作语言 125
7.3.1 SQL SELECT语句 125
7.3.2 SQL INSERT语句 149
7.3.3 SQL DELETE语句 149
7.3.4 SQL UPDATE语句 150
7.4 SQL视图 152
7.5 SQL索引 154
7.6 SQL权限 155
7.7 用于元数据管理的SQL 156
总结 157
关键术语表 159
思考题 160
问题和练习 167
第8章 面向对象的数据库以及对象持久性 169
8.1 概述:OO的基本概念 169
8.2 OO的高级概念 171
8.2.1 方法重载 171
8.2.2 继承 171
8.2.3 方法重写 173
8.2.4 多态和动态绑定 173
8.3 对象持久性的基本原则 175
8.4 面向对象数据库管理系统 176
8.4.1 对象标识符 177
8.4.2 ODMG标准 177
8.4.3 对象模型 178
8.4.4 对象定义语言 178
8.4.5 对象查询语言 181
8.4.6 语言绑定 183
8.5 评估OODBMS 185
总结 186
关键术语表 186
思考题 187
问题和练习 188
第9章 扩展关系数据库 189
9.1 关系模型的局限性 189
9.2 RDBMS主动拓展 190
9.2.1 触发器 190
9.2.2 存储过程 192
9.3 对象-关系型RDBMS扩展 193
9.3.1 用户定义类型 194
9.3.2 用户定义函数 197
9.3.3 继承 198
9.3.4 行为 200
9.3.5 多态性 201
9.3.6 集合类型 201
9.3.7 大对象 203
9.4 递归的SQL查询 203
总结 205
关键术语表 206
思考题 207
问题和练习 208
第10章 XML数据库 209
10.1 可扩展标记语言 209
10.1.1 基本概念 210
10.1.2 文档类型定义和XMLSchema定义 213
10.1.3 可扩展样式表语言 216
10.1.4 命名空间 219
10.1.5 XPath 219
10.2 处理XML文档 220
10.3 存储XML文档 221
10.3.1 面向文档的XML文档存储方法 222
10.3.2 面向数据的XML文档存储方法 222
10.3.3 存储XML文档的组合方法 222
10.4 XML数据和关系数据之间的差异 223
10.5 XML文档和(对象-)关系数据之间的映射 223
10.5.1 基于表的映射 223
10.5.2 模式无关的映射 224
10.5.3 模式感知的映射 226
10.5.4 SQL/XML 227
10.6 搜索XML数据 230
10.6.1 全文搜索 231
10.6.2 基于关键字的搜索 231
10.6.3 XQuery的结构化搜索 231
10.6.4 使用RDF和SPARQL进行语义搜索 232
10.7 用于信息交换的XML 234
10.7.1 面向消息的中间件 235
10.7.2 基于SOAP的Web服务 235
10.7.3 基于REST的Web服务 238
10.7.4 Web服务和数据库 239
10.8 其他数据表示格式 239
总结 243
关键术语表 245
思考题 246
问题和练习 247
第11章 NoSQL数据库 249
11.1 NoSQL运动 249
11.1.1 “一体适用”时代的终结? 249
11.1.2 NoSQL运动的出现 250
11.2 键-值存储 252
11.2.1 从键到哈希 252
11.2.2 水平扩展 253
11.2.3 实例:Memcached 254
11.2.4 请求协调器 256
11.2.5 一致性哈希 256
11.2.6 复制和冗余 258
11.2.7 最终一致性 259
11.2.8 稳定化 260
11.2.9 完整性约束和查询 261
11.3 元组和文档存储 261
11.3.1 带键的项 262
11.3.2 过滤和查询 263
11.3.3 使用MapReduce进行复杂查询和聚合 266
11.3.4 SQL毕竟…… 275
11.4 面向列的数据库 276
11.5 基于图的数据库 277
11.5.1 Cypher概述 279
11.5.2 探索社交图谱 280
11.6 其他NoSQL类别 285
总结 286
关键术语表 287
思考题 288
问题和练习 289
第三部分 物理数据存储、
事务管理和数据库访问
第12章 物理文件组织和索引 292
12.1 存储硬件和物理数据库设计 292
12.1.1 存储层次结构 292
12.1.2 硬盘驱动器的内部结构 293
12.1.3 从逻辑概念到物理结构 296
12.2 记录组织 298
12.3 文件组织 300
12.3.1 基本概念:搜索键、主文件和辅助文件组织 300
12.3.2 堆文件组织 301
12.3.3 顺序文件组织 301
12.3.4 随机文件组织(哈希) 302
12.3.5 索引顺序文件组织 306
12.3.6 列表数据组织(线性与非线性表) 310
12.3.7 辅助索引和倒排文件 313
12.3.8 B-树和B+-树 318
总结 322
关键术语表 323
思考题 324
问题和练习 325
第13章 物理数据库组织 326
13.1 物理数据库组织和数据库访问方法 326
13.1.1 从数据库到表空间 327
13.1.2 索引设计 328
13.1.3 数据库访问方法 330
13.1.4 连接操作 337
13.2 企业存储子系统和业务连续性 338
13.2.1 磁盘阵列和RAID 339
13.2.2 企业存储子系统 341
13.2.3 业务连续性 347
总结 350
关键术语表 351
思考题 351
问题和练习 353
第14章 事务管理基础 354
14.1 事务、恢复和并发控制 354
14.2 事务和事务管理 355
14.2.1 描述事务和事务生命周期 355
14.2.2 涉及事务管理的DBMS组件 356
14.2.3 日志文件 357
14.3 恢复 358
14.3.1 故障类型 358
14.3.2 系统恢复 359
14.3.3 介质恢复 360
14.4 并发控制 361
14.4.1 典型的并发性问题 361
14.4.2 调度和串行调度 363
14.4.3 可串行化调度 363
14.4.4 乐观和悲观调度器 365
14.4.5 锁和锁协议 365
14.5 事务的ACID属性 371
总结 372
关键术语表 372
思考题 373
问题和练习 375
第15章 数据库访问和数据库API 376
15.1 数据库系统的架构 376
15.1.1 集中式系统架构 376
15.1.2 分层架构 377
15.2 数据库API的分类 379
15.2.1 专有与通用API 380
15.2.2 嵌入式与调用级API 380
15.2.3 早期绑定与晚期绑定 381
15.3 通用数据库API 382
15.3.1 ODBC 382
15.3.2 OLE DB和ADO 383
15.3.3 ADO.NET 384
15.3.4 Java数据库连接 387
15.3.5 插曲:SQL注入与访问安全 392
15.3.6 SQLJ 393
15.3.7 插曲:嵌入式API与嵌入式DBMS 395
15.3.8 语言集成查询 396
15.4 对象持久性和对象关系映射API 398
15.4.1 使用Enterprise JavaBeans的对象持久性 398
15.4.2 使用Java持久性 API实现对象持久性 402
15.4.3 使用Java数据对象的对象持久性 407
15.4.4 其他宿主语言中的对象持久性 410
15.5 数据库API总结 414
15.6 万维网中的数据库访问 416
15.6.1 最初的Web服务器 416
15.6.2 通用网关接口:面向动态网页 416
15.6.3 客户端脚本:对更丰富Web的渴望 418
15.6.4 作为平台的JavaScript 419
15.6.5 DBMS自适应:REST、其他Web服务和展望 421
总结 423
关键术语表 424
思考题 424
问题和练习 426
第16章 数据分布和分布式事务管理 427
16.1 分布式系统和分布式数据库 427
16.2 分布式数据库的架构规则 428
16.3 分割、分配和复制 430
16.3.1 垂直分割 430
16.3.2 水平分割(分片) 431
16.3.3 混合分割 431
16.3.4 复制 433
16.3.5 元数据的分布和复制 433
16.4 透明性 434
16.5 分布式查询处理 435
16.6 分布式事务管理和并发控制 437
16.6.1 主站点和主副本2PL 437
16.6.2 分布式2PL 438
16.6.3 两阶段提交协议 439
16.6.4 乐观并发和松耦合系统 441
16.6.5 基于补偿的事务模型 442
16.7 最终一致性和BASE事务 445
16.7.1 水平分割和一致性哈希 445
16.7.2 CAP定理 445
16.7.3 BASE事务 446
16.7.4 多版本并发控制和向量时钟 447
16.7.5 基于Quorum的一致性 448
总结 450
关键术语表 451
思考题 451
问题和练习 452
第四部分 数据仓库、数据治理
和大数据分析
第17章 数据仓库与商务智能 454
17.1 操作与战术/战略决策 454
17.2 数据仓库定义 455
17.3 数据仓库模式 457
17.3.1 星形模式 457
17.3.2 雪花模式 458
17.3.3 事实星座模式 458
17.3.4 特定的模式问题 459
17.4 抽取、转换和加载过程 465
17.5 数据集市 467
17.6 虚拟数据仓库和虚拟数据集市 468
17.7 操作数据存储 469
17.8 数据仓库与数据湖 469
17.9 商务智能 470
17.9.1 查询和报告 471
17.9.2 数据透视表 471
17.9.3 联机分析处理 471
总结 479
关键术语表 480
思考题 481
问题和练习 483
第18章 数据集成、数据质量和数据治理 485
18.1 数据与流程集成 485
18.1.1 分析型和操作型数据需求的融合 486
18.1.2 数据集成和数据集成模式 487
18.1.3 数据和流程集成中的数据服务和数据流 494
18.2 搜索非结构化数据和企业搜索 500
18.2.1 全文搜索原理 500
18.2.2 索引全文文档 501
18.2.3 网络搜索引擎 502
18.2.4 企业搜索 504
18.3 数据质量和主数据管理 505
18.4 数据治理 506
18.4.1 全面数据质量管理 507
18.4.2 能力成熟度模型集成 507
18.4.3 数据管理知识体系 508
18.4.4 信息和相关技术的控制目标 508
18.4.5 信息技术基础架构库 508
18.5 展望 508
总结 509
关键术语表 509
思考题 510
问题和练习 511
第19章 大数据 513
19.1 大数据的5个V 513
19.2 Hadoop 516
19.2.1 Hadoop的历史 516
19.2.2 Hadoop堆栈 517
19.3 Hadoop中的SQL 528
19.3.1 HBase:Hadoop上的第一个数据库 528
19.3.2 Pig 533
19.3.3 Hive 533
19.4 Apache Spark 536
19.4.1 Spark Core 536
19.4.2 Spark SQL 538
19.4.3 MLlib、Spark Streaming和GraphX 540
总结 541
关键术语表 542
思考题 543
问题和练习 544
第20章 分析学 546
20.1 分析过程模型 546
20.2 分析应用程序实例 548
20.3 数据科学家职务简介 549
20.4 数据预处理 550
20.4.1 用于分析的去规范化数据 550
20.4.2 抽样 551
20.4.3 探索性分析 551
20.4.4 缺失值 552
20.4.5 异常值检测和处理 553
20.5 分析的类型 553
20.5.1 预测性分析 553
20.5.2 评估预测模型 560
20.5.3 描述性分析 566
20.5.4 社交网络分析 570
20.6 分析模型的后处理 574
20.7 分析模型成功的关键因素 575
20.8 分析中的经济学视角 576
20.8.1 总所有权成本 576
20.8.2 投资回报 576
20.8.3 内包与外包 577
20.8.4 本地解决方案与云解决方案 578
20.8.5 开源软件与商业软件 579
20.9 提高分析的投资回报率 580
20.9.1 新的数据来源 580
20.9.2 数据质量 582
20.9.3 管理支持 583
20.9.4 组织因素 584
20.9.5 交叉应用 584
20.10 隐私和安全 585
20.10.1 关于隐私和安全的总体考虑 585
20.10.2 RACI矩阵 586
20.10.3 访问内部数据 587
20.10.4 隐私条例 591
总结 592
关键术语表 593
思考题 594
问题和练习 597
附录 使用在线环境
前言
---------------------------8081317 - 数据库系统概念(原书第7版)---------------------------
数据库管理已经从一种专门的计算机应用发展为几乎所有企业中的一个核心成分,因此,有关数据库系统的知识已成为计算机科学教育中必不可少的部分。在本书中,我们讲述数据库管理的基本概念,这些概念包括数据库设计、数据库语言、数据库系统实现等多个方面。
本书可作为三年级或四年级本科生数据库入门课程的教科书,也可作为一年级研究生的教科书。除了涵盖入门课程的基本内容外,本书还包括可作为课程补充材料或作为高级课程介绍性材料的高级内容。
我们仅要求读者熟悉基本的数据结构、计算机组成和一种高级程序设计语言,例如Java、C、C++或Python。概念都以直观的方式加以描述,其中的许多概念基于我们大学运行的例子加以阐释。本书中包括重要的理论结果,但省略了形式化证明,取而代之的是用图表和例子来说明为什么结论是正确的。对于形式化描述和研究结果的证明,读者可以参见参考文献中列出的研究论文和高级教材。
本书中包括的基本概念和算法通常基于当今商用或试验性的数据库系统中采用的概念和算法。我们的目标是在通用环境下描述这些概念和算法,没有与某个特定的数据库系统绑定,虽然在恰当的时候我们确实提供了对某些特定系统的引用。
在第7版中,我们保持了前面版本的总体风格,同时对内容和结构进行了更新来反映数据库设计、管理和使用的方式所发生的变化。其中一个重要的变化是“大数据”系统的广泛应用。我们还考虑了数据库概念在教学方面的发展趋势,并在适当的地方做出了推动这些趋势的修改。
本版本中最值得注意的变化如下:
广泛涵盖了大数据系统的内容,既从用户的角度介绍(第10章),也从系统内部的角度介绍(第20~23章),与第6版相比有大量的内容扩充和改进。
增加了新的一章“区块链数据库”(第26章),介绍区块链技术及其在企业应用中日益增长的作用。这一章的一个重要焦点是区块链系统与数据库系统之间的交互。
对涉及数据库内部的所有各章(第12~19章)进行了修改,以融入固态硬盘、主存数据库、多核系统和列存储等当代技术。
对于使用JSON、RDF和SPARQL进行半结构化数据管理做了更多的描述(8.1节)。
更新了对于时态数据(7.10节)、数据分析(第11章)和诸如写优化的索引等高级索引技术(14.8节和24.2节)的描述。
为更好地支持含有实操部分的课程(对于任何数据库课程,这都是我们强烈推荐的方式),对一些章节进行了重新组织和更新,包括使用当代的应用开发工具和大数据系统,如Apache Hadoop和Spark。
所有更新源于我们收到的许多意见和建议,这些意见和建议来自第6版的读者以及我们在耶鲁大学、理海大学、印度理工学院孟买校区的学生,也源于我们自己对数据库技术发展的观察和分析。
本书的内容
. 除第1章外,本书共十一部分,具体如下:
引言(第1章)。第1章对数据库系统的性质和目标进行一般性综述。我们解释了数据库系统的概念是如何发展的,各数据库系统的共同特性是什么,数据库系统能为用户做什么,以及数据库系统如何与操作系统交互。我们还引入了一个数据库应用的例子:一个包括多个系、教师、学生和课程的大学。这个应用作为贯穿全书的运行实例。这一章本质上是激励性、历史性和解释性的。
第一部分:关系语言(第2~5章)。第2章介绍数据的关系模型,包括关系数据库的结构、数据库模式、码、模式图、关系查询语言、关系运算和关系代数等基本概念。第3~5章主要介绍最具影响力的面向用户的关系语言:SQL。对于一个设计完成的模式,这部分描述了查询、修改、插入和删除等数据操作。虽然这里详细讲述了数据定义的语法,但关于模式设计的问题将推迟到第二部分讲述。
第二部分:数据库设计(第6~7章)。第6章概要介绍数据库设计过程并详细描述实体-联系数据模型。实体-联系模型为数据库设计问题以及在数据模型的约束下捕获现实应用的语义时所遇到的问题提供了一个高层视图。UML类图表示也在这一章中讲述。第7章介绍关系数据库设计。这一章讲述了函数依赖和规范化的理论,重点强调了提出各种范式的动机,以及它们的直观含义。这一章以关系设计的概览开始,依赖于对函数依赖的逻辑蕴涵的直观理解。这使得规范化的概念可以在全面讨论函数依赖理论之前先做介绍,而函数依赖理论将在本章稍后部分讨论。授课教师可以只选用这些直观描述的内容,而不会丢失连贯性。不过,完整地讲授这一章将有利于学生对规范化概念形成较好的理解,从而引导他们去学习函数依赖理论中一些较艰深的概念。这一章的最后一节讲述时态数据建模。
第三部分:应用程序设计和开发(第8~9章)。第8章讨论几种对于应用程序设计和开发非常重要的复杂数据类型,包括半结构化数据、基于对象的数据、文本数据和空间数据。虽然XML在数据库环境中的流行度正在消减,但我们还是保留了对XML的介绍,同时增加了对JSON、RDF和SPARQL的介绍。第9章讨论用于构建交互式的基于Web的数据库应用和移动数据库应用的工具与技术。这一章对服务器端和客户端都进行了详细介绍,所包括的主题有: Java服务器端程序(servlet)、JSP、Django、Java描述语言(JavaScript)和Web服务。同时,还对以下主题进行了讨论:应用体系结构、对象-关系映射系统(包括Hibernate和Django)、性能(包括使用memcached和Redis的缓存)和确保Web应用安全的独特挑战。
第四部分:大数据分析(第10~11章)。第10章概述大规模数据分析应用,重点讲述与传统的数据库应用相比,这些应用如何对数据管理提出不寻常的要求,然后讨论了这些要求是如何得到满足的。所阐述的主题有:包括分布式文件系统在内的大数据存储系统、键值存储和NoSQL系统、MapReduce、Apache Spark、流数据和图数据库。这里对这些系统和概念与前面介绍的数据库概念之间的关联做了重点讲解。第11章讨论为大规模数据分析而设计的系统的结构和使用。这一章首先解释了数据分析、商业智能和决策支持的概念,并在此基础上讨论了数据仓库的结构和将数据收集到仓库中的过程。然后,讲述了仓库中的数据在OLAP应用中的使用,并对数据挖掘算法和技术进行了概述。
第五部分:存储管理和索引(第12~14章)。第12章讨论存储设备以及这些设备的特性如何影响数据库的物理组织和性能。第13章讨论数据存储结构,包括文件组织和缓冲区管理。第14章讲述多种数据存取技术。首先对基于多级索引的数据存取进行描述,进而对B+树进行详细介绍。然后介绍B+树不太适用的那些应用的索引结构,包括诸如LSM树和缓冲树等写优化的索引,位图索引,使用k-d树、四分树和R树的空间数据索引等。
第六部分:查询处理和优化(第15~16章)。第15~16章阐述查询处理和查询优化。第15章重点讲述数据库操作的实现算法,特别是为无法完全放入主存中的非常大的数据而设计的各种各样的连接算法。这一章还讲述了用于主存数据库的查询处理技术。第16章讲述查询优化,首先展示了如何使用转换规则将查询计划转换为与之等价的其他计划,然后描述了如何估计查询执行代价,以及如何高效地找出代价最小的查询执行计划。
第七部分:事务管理(第17~19章)。第17章着重介绍事务处理系统的基本概念:原子性、一致性、隔离性和持久性。这一章概述了用于保证这些特性的方法,包括基于日志的恢复和使用锁的并发控制、基于时间戳的技术以及快照隔离。仅需要对事务概念进行综述的课程可以只使用第17章,而不必使用这部分的其他章节,那些章节的内容要深入得多。第18章重点讲述并发控制,并介绍几种保证可串行化的技术,包括封锁、时间戳和乐观(有效性检查)技术。这一章讲述了多版本并发控制技术,包括广泛使用的快照隔离技术,以及一个保证可串行化的扩展技术。这一章还讨论了弱一致性级别、索引结构中的并发、主存数据库系统中的并发、长持续时间的事务、操作级别的并发和实时事务处理。第19章讨论在系统崩溃和存储器故障的情况下保证事务正确执行的主要技术,包括日志、检查点和数据库转储,以及使用远程备份系统的高可用性。这一章还介绍了提前释放锁的恢复和广泛使用的ARIES算法,讨论了主存数据库系统中的恢复以及NVRAM的使用。
第八部分:并行和分布式数据库(第20~23章)。第20章介绍计算机系统体系结构,并描述基本的计算机系统对于数据库系统的影响。这一章讨论了集中式系统、客户-服务器系统、并行和分布式体系结构以及基于云的系统。本部分的其余三章分别讲述并行和分布式数据库的不同方面,第21章讲述存储和索引,第22章讲述查询处理,第23章讲述事务处理。第21章讨论分区和数据偏斜、复制、并行索引、分布式文件系统(包括Hadoop文件系统)和并行的键值存储。第22章讨论多个查询间的并行和单个查询内的并行,包括并行和分布式排序与连接、MapReduce、流水线、Volcano交换算子模型、线程级并行、流数据以及地理上分散的查询的优化。第23章讨论传统的分布式处理方法(如两阶段提交),以及更复杂的解决方案(如Paxos和Raft)。这一章讲述了分布式并发控制的各种算法,包括副本管理和弱一致性级别,还讨论了CAP定理所包含的权衡和协调,以及使用版本向量和默克尔树(Merkle tree)来检测不一致性的方法。
第九部分:附录。附录A给出我们的大学模式的细节,包括完整的模式、DDL和所有的表。
第十部分:中文在线章节(第24~26章)。第24章对第14章的索引结构进行了扩展,详细讲述LSM树及其变种、位图索引、空间索引和动态散列技术。第25章扩展了第9章所涵盖的内容,讨论性能调整、基准测试,以及从遗产系统中移植、标准化和分布式目录系统。第26章从数据库的角度审视区块链技术,描述了区块链数据结构,以及使用加密散列函数和公钥加密来保证匿名性、无可辩驳性、防篡改性等区块链性质。这一章描述和比较了用于保证去中心化的分布式共识算法,包括工作量证明、权益证明和拜占庭(Byzantine)共识。这一章的大部分内容讨论使得区块链成为重要的数据库概念的那些特性,包括许可区块链的作用、智能合约中业务逻辑和协议的编码,以及跨区块链的互操作性。这一章还讨论了为达到数据库级别的事务处理性能所采用的技术。最后对当前和未来的企业区块链应用进行了综述。
第十一部分:英文在线章节(第27~32章)。可以在db-book.com上在线获取这些章节。我们提供了6章,涵盖了具有历史意义或者具有先进性的材料。第27章讲述“纯”查询语言:元组和域关系演算,以及Datalog(它的语法是仿照Prolog语言的)。第28章讲述关系数据库设计中的高级主题,包括多值依赖理论和第四范式,以及更高的范式。第29章讲述基于对象的数据库、诸如数组和多重集合类型等更复杂的数据类型,以及非1NF的表。第30章对第8章关于XML的讨论进行扩展。第31章讲述信息检索,讨论非结构化的文本数据的查询。第32章提供对PostgreSQL数据库系统的综述,面向的是专注于数据库内部层面的课程。这一章对于学生在PostgreSQL数据库的开放源码库上做课题特别有用。
在每一章的末尾我们都提供了一节—延伸阅读,其中的参考资料有助于学生对各章所包含的内容或者所涉及的相关领域的新进展继续深入学习。有时,延伸阅读一节会包括已成为尽人皆知的经典之作的原始渊源论文。另外,在线提供每一章的详细参考文献,并且为那些有意对各章所包含内容的某些部分进行深入学习的读者提供了参考资料。
第7版
第7版是由以下因素驱动产生的:我们收到的关于前面几版的意见和建议,我们在耶鲁大学、理海大学、印度理工学院孟买校区讲授本课程的体会,以及我们对于数据库技术发展方向的分析。
前面我们列举了这一版的主要新特性,包括:对大数据内容的广泛涵盖,为反映当代的硬件技术对所有各章所做的更新,半结构化数据管理,高级索引技术,以及关于区块链数据库的新的一章。除了这些主要的改动之外,我们对每一章都进行了修改,对较旧的内容进行了更新,增加了对数据库技术当前进展的讨论,改进了对学生认为难以理解的主题的描述。我们还增加了新的习题,并对参考文献进行了更新。
下面我们为原先使用第6版的教师列出这一版的较为重要的改变。
将关系代数移到了第2章,以帮助学生更好地理解作为SQL等查询语言的基础的关系运算。更深入地讲述关系代数还有利于学生更好地理解后面讨论查询处理和优化所需的代数运算。关系演算的两种变体现在都在在线章节中讲述,因为我们认为它们现在仅对更加面向理论化的课程有价值,而对于大多数的数据库课程来说是可以略掉的。
现在关于SQL的三章包含了数据库系统特定的SQL变体的更多细节,以帮助学生更好地完成实践作业。对于SQL与多重集合关系代数之间的关联也做了更详细的讲解。现在第4章包含了关于连接的所有材料,而以前自然连接是放在前面的章节中的。这一章还增加了用于生成唯一码值的序列和行级安全性的相关内容。特别有用的对JDBC API的当前扩展现在放到了第5章中,而对OLAP的讲述从这一章移到了第11章中。
对第6章进行了修改,将E-R图和E-R概念都放到了这一章中,而不是像以前的版本那样先讲述概念然后再介绍E-R图。我们认为这会帮助学生更好地理解E-R模型。
第7章改进了对时态数据建模的介绍,融入了SQL:2011时态数据库的特性。
第8章是新的一章,讲述复杂数据类型,包括诸如XML、JSON、RDF、SPARQL等半结构化数据,以及基于对象的数据、文本数据和空间数据。在第6版中详细介绍了基于对象的数据库、XML和文本数据上的信息检索,这些主题现在被简化后包含在第8章中,而第6版中原来的那些章节现在可以在线阅读。
第9章被大大地改写了,以反映当前的应用开发工具和技术,包括扩展了对JavaScript和用于构建动态Web界面的JavaScript库的介绍、对Python中采用Django架构的应用开发的介绍、对Web服务的介绍和对使用HTML5的断连操作的介绍,增加了使用Django的对象-关系映射内容,还对能够处理大事务负载的高性能应用的开发技术进行了讨论。
第10章是关于大数据的新的一章,从用户的角度讨论了大数据的概念和工具。这一章的内容包括大数据存储系统、MapReduce范式、Apache Hadoop和Apache Spark、流数据库和图数据库,目的是使读者对表象背后的事情有个大致的了解,以便能够使用大数据系统。后续的几章详细介绍了大数据的内部构件。
存储和文件结构被分成了两章。讲述存储的第12章经过更新后,更充分地描述了闪存,并包含了若干新技术—面向列的存储和主存数据库中的存储组织。讲述数据存储结构的第13章经过扩展后,现在包含了许多细节,例如自由空间图、划分,最重要的是面向列的存储。
讲述索引的第14章增加了写优化的索引结构,包括LSM树及其变种和缓冲树,它们有很好的应用前景。这一章对空间索引的介绍比较简短。在讲述高级索引技术的第24章中有对LSM树和空间索引的更详细介绍。现在第14章仅对位图索引进行了简单介绍,更详细的介绍则移到了第24章中。动态索引技术也被移到了第24章中,目前这一技术对实践不太重要。
讲述查询处理的第15章大大扩展了对查询处理中的流水线技术的介绍,增加了主存中关于查询处理的新素材,包括查询编译以及对空间连接的简单介绍。讲述查询优化的第16章包含了外连接和聚集等算子的等价规则的更多示例,更新了用于代价估计的统计信息的内容,改进了关于连接顺序优化算法的介绍。这一章中还增加了使用半连接和反连接运算对嵌套子查询去除相关的技术的介绍。
讲述并发控制的第18章包含了主存中并发控制的新素材。讲述恢复系统的第19章对于使用远程备份系统的高可用性给予了更多的重视。
关于并行数据库和分布式数据库的介绍进行了全面的修改。由于这两个领域从低层次的并行到地理上分散的系统都演进到了连续体(continuum)状态,因此我们现在一起展示这些主题。
第20章讲述数据库系统体系结构,在以前版本的基础上有很大的改变,包含了关于实际的互联网络(诸如树形或胖树结构)的新素材,大大扩展和更新了关于共享内存体系结构和缓存一致性的素材。这一章中有一个关于基于云的服务的新节,它涵盖了虚拟机和容器、平台即服务、软件即服务以及弹性。
第21章讲述并行和分布式存储,只有少部分内容在第6版中讲过,例如分区技术,本章中的其他内容都是新的。
第22章讲述并行和分布式查询处理,还是只有少数节已经包含在第6版中,例如排序、连接和少数几个关系运算的并行算法,本章中的其他内容几乎都是新的。
第23章讲述并行和分布式事务处理。这一章中有一些内容已经包含在第6版中,例如关于分布式数据库中的2PC、持久消息和并发控制的那几节,本章中的其他内容几乎都是新的。
与第6版一样,我们在附录A和用到大学数据库例子的各章中列出了该数据库的模式和样例关系实例,以便于理解。另外,我们在网站db-book.com上提供了整个例子的SQL数据定义语句,以及创建样例关系实例的SQL语句。这能激励学生直接在数据库系统上运行样例查询,并修改这些查询去进行更多的试验。上面没有列出的所有主题都在第6版的基础上有所更新,但总体结构相对来说没有改动。
章末材料
在每一章的末尾除了总结之外,还有一个术语回顾列表,用来帮助读者回顾这一章中讨论的关键主题。
与第6版一样,习题被划分成两部分:实践习题和习题。实践习题的解决方案在本书英文版的网站上公开发布。我们鼓励学生独立解决实践习题,然后用网站上的解决方案来检查自己的答案。习题的解答只有授课教师能得到(参看下面的“授课教师注意事项”,以获取如何得到题解的信息)。
许多章的末尾都有一个“工具”节,它提供了与该章的主题相关的软件工具的信息,其中一些工具可以用于实验室练习。大学数据库和习题中用到的其他关系的SQL DDL和样例数据在本书英文版的网站上可以得到,也可以用于实验室练习。
授课教师注意事项
可以用本书各章的不同子集来设计课程,某些章也可以用不同于本书中的顺序来讲授。下面列出了一些可能的安排。
第5章(高级SQL)。这一章可以跳过或推迟到后面讲授,而不会影响连续性。建议大多数课程至少较早地讲授5.1.1节,因为JDBC很可能会是学生实习的一个有用工具。
第6章(使用E-R模型的数据库设计)。如果教师愿意,这一章可以在第3~5章之前讲,因为第6章完全不依赖于SQL。但是,那些强调编程实习的课程可能会在学习SQL之后有各种各样的实验室练习,对这样的课程我们推荐在讲数据库设计之前先讲SQL。
第15章(查询处理)和第16章(查询优化)。入门性的课程可以去掉这两章,这对于任何其他章的讲授都没有影响。
第七部分(事务管理)。我们的讲述包括一章综述(第17章)和后续各章的详细讨论。如果计划把后面的章推迟到高级课程中去讲授,可以选择仅讲述第17章,而省略第18和19章。
第八部分(并行和分布式数据库)。我们的讲述包括一章综述(第20章)与后续各章关于存储、查询处理和事务等主题的讨论。如果计划把后面的章推迟到高级课程中去讲授,可以选择仅讲述第20章,而省略第21~23章。
第十一部分(英文在线章节)。第27章(形式关系查询语言)可以在第2章之后讲SQL之前讲授,入门性课程也可以省略这一章。另外5个英文在线章节(高级关系数据库设计、基于对象的数据库、XML、信息检索和PostgreSQL)可以用作自学材料,入门性课程可以去掉它们。
基于本书的教学大纲可以在本书英文版的网站上找到。
本书英文版网站和英文补充材料
本书英文版网站的网址是db-book.com,其中包括:
本书所有各章的幻灯片。
实践习题的答案。
6个在线章节。
实验素材,包括大学模式和习题中用到的SQL DDL和样例数据,大量实验练习和相关项目示例,以及关于建立和使用各种数据库系统和工具的说明。
最新勘误表。
下列附加材料仅有教师可以获得:
包括书中所有习题的答案的教师手册。
包括额外习题的问题库。
扫描二维码可获得的中文材料
本书采用一书一码的方式,即一本书对应一个专有的二维码(见本书前面的衬纸)。扫描二维码获取阅读权限后,可浏览以下电子数据资源。
第十部分(包括高级索引技术、高级应用开发、区块链数据库等高级主题)。
索引。
未来我们还可能通过该二维码提供更多的增值服务,例如习题答案、老师的授课视频等。
联系我们
我们已尽了最大的努力来避免在本书中出现排版错误、内容疏忽等。然而,与新发布的软件类似,错误在所难免,在本书英文版的网站中提供了一个最新勘误表。如果你能指出尚未包含在最新勘误表中的本书的疏漏之处,我们将十分感激。
我们很高兴能收到你对改进本书的建议,也很欢迎你对本书英文版网站做出对其他读者有用的贡献,例如程序设计习题、课程实习建议、在线实验室和指南以及授课要点等。
电子邮件请发到db-book-authors@cs.yale.edu,来信请寄至Avi Silberschatz,Department of Computer Science,Yale University, 51 Prospect Street, P.O. Box 208285, New Haven, CT 06520-8285 USA。
致谢
许多人对第7版以及之前的6版提供了帮助,我们对他们致以诚挚的谢意。
第7版
Ioannis Alagiannis和Renata Borovica-Gajic撰写了可以在线获取的描述PostgreSQL数据库的第32章。这一章是对第6版中PostgreSQL章的完全重写,第6版中的那一章是由Anastasia Ailamaki、Sailesh Krishnamurthy、Spiros Papadimitriou、Bianca Schroeder、Karl Schnaitter和Gavin Sherry撰写的。
Judi Paige帮助制作了插图和演示幻灯片,并处理了文字编辑等事宜。
Mark Wogahn保证了生成本书文本的软件正常工作,包括LaTex宏和字体等。
Sriram Srinivasan对于并行和分布式数据库部分的反馈使我们受益匪浅。
N. L. Sarda对第6版和第7版的一些节给出了具有洞察力的反馈。
Bikash Chandra 和 Venkatesh Emani协助对“应用程序开发”一章进行了更新,并创建了样例代码。
印度理工学院孟买校区的学生(特别是Ashish Mithole)对预印本中有关并行和分布式数据库的章节提出了意见。
耶鲁大学、理海大学和印度理工学院孟买校区的学生对第6提给出了意见。
Jeffrey Anthony(Synaptic公司的合伙人兼CTO)以及理海大学的学生Corey Caplan(现在是 Leavitt Innovations的联合创始人之一)、Gregory Cheng、Timothy LaRowe和Aaron Rotem对新的区块链章节提出了有益的意见和建议。
前面各版
Hakan Jakobsson(Oracle)撰写了第6版中关于Oracle数据库系统的一章;Sriram Padmanabhan(IBM)撰写了第6版中关于IBM DB2 数据库系统的一章;Sameet Agarwal、José A. Blakeley、Thierry D’Hers、Gerald Hinson、Dirk Myers、Vaqar Pirzada、Bill Ramos、Balaji Rathakrishnan、Michael Rys、Florian Waas和Michael Zwilling撰写了第6版中关于Microsoft SQL Server数据库系统的一章,特别是José Blakeley组织和编辑了这一章,遗憾的是他现在已经不和我们在一起了;César Galindo-Legaria、Goetz Graefe、Kalen Delaney和Thomas Casey对Microsoft SQL Server这一章以前的版本做出了贡献,现在,这些章没有包含在第7版中。
Anastasia Ailamaki、Sailesh Krishnamurthy、Spiros Papadimitriou、Bianca Schroeder、Karl Schnaitter和Gavin Sherry撰写了第6版中关于Postgre SQL的一章。
Daniel Abadi审阅了第5版的目录,并协助进行了调整。
作为本书的审阅人,Steve Dolins(佛罗里达大学)、Rolando Fernanez(乔治·华盛顿大学)、Frantisek Franek(麦克马斯特大学)、Latifur Khan(得克萨斯大学达拉斯分校)、Sanjay Madria(密苏里科技大学)、Aris Ouksel(伊利诺伊大学)和Richard Snodgrass(滑铁卢大学)的意见对于第6版的最终定稿帮助很大。
Judi Paige帮助制作了插图和演示幻灯片。
Mark Wogahn保证了生成本书文本的软件正常工作,包括LaTex宏和字体。
N. L. Sarda的反馈帮助我们改进了好几章,Vikram Pudi促使我们替换掉早先的银行模式,Shetal Shah对几章内容给出了反馈。
耶鲁大学、理海大学和印度理工学院孟买校区的学生对第5版以及第6版的预印本给出了意见。
Chen Li 和 Sharad Mehrotra为第5版提供了关于JDBC和安全性的素材。
Marilyn Turnamian 和 Nandprasad Joshi为第5版提供了秘书服务,Marilyn还为第5版准备了一个封面设计的早期版本。
Lyn Dupré对第3版进行了审查,Sara Strandtman对第3版进行了文字编辑。
Nilesh Dalvi、Sumit Sanghai、Gaurav Bhalotia、Arvind Hulgeri、K. V. Raghavan、Prateek Kapadia、Sara Strandtman、Greg Speegle和Dawn Bezviner协助准备了前面各版的教师手册。
用船作为封面概念的部分想法最初是Bruce Stephan建议的。
以下人士对本书的第5版和前面各版提出了建议和意见:R. B. Abhyankar, Hani Abu-Salem, Jamel R. Alsabbagh, Raj Ashar, Don Batory, Phil Bernhard, Christian Breimann, Gavin M. Bierman, JanekBogucki, Haran Boral, Paul Bourgeois, PhilBohannon, Robert Brazile, Yuri Breitbart, Ramzi Bualuan, Michael Carey, Soumen Chakrabarti, Tom Chappell, Zhengxin Chen, Y. C. Chin, Jan Chomicki, Laurens Damen, Prasanna Dhan- dapani, Qin Ding, Valentin Dinu, J. Edwards, Christos Faloutsos, Homma Farian, Alan Fekete, Frantisek Franek, Shashi Gadia, Hector Garcia-Molina, Goetz Graefe, Jim Gray, Le Gruenwald, Eitan M. Gurari, William Hankley, Bruce Hillyer, Ron Hitchens, Chad Hogg, Arvind Hulgeri, Yannis Ioannidis, Zheng Jiaping, Randy M. Kaplan, Graham J. L. Kemp, Rami Khouri, Hyoung-Joo Kim, Won Kim, Henry Korth (father of Henry F.), Carol Kroll, Hae Choon Lee, SangWon Lee, Irwin Levinstein, Mark Llewellyn, Gary Lindstrom, Ling Liu, Dave Maier, Keith Marzullo, Marty Maskarinec, Fletcher Mattox, Sharad Mehrotra, Jim Melton, Alberto Mendelzon, Ami Motro, Bhagirath Narahari, Yiu-Kai Dennis Ng, Thanh-Duy Nguyen, Anil Nigam, Cyril Orji, Meral Ozsoyoglu, D. B. Phatak, Juan Altmayer Pizzorno, Bruce Porter, Sunil Prabhakar, Jim Peterson, K. V. Raghavan, Nahid Rahman, Rajarshi Rakshit, Krithi Ramamritham, Mike Reiter, Greg Riccardi, Odinaldo Rodriguez, Mark Roth, Marek Rusinkiewicz, Michael Rys, Sunita Sarawagi, N. L. Sarda, Patrick Schmid, Nikhil Sethi, S. Seshadri, Stewart Shen, Shashi Shekhar, Amit Sheth, Max Smolens, Nandit Soparkar, Greg Speegle, Jeff Storey, Dilys Thomas, Prem Thomas, Tim Wahls, Anita Whitehall, Christopher Wilson, Marianne Winslett, Weining Zhang, Liu Zhenming。
个人注记
Sudarshan感谢他的妻子Sita的爱、耐心和支持,感谢他的孩子Madhur、Advaith的爱和乐观精神。Hank感谢他的妻子Joan、孩子Abby和Joe的爱和理解。Avi感谢Valerie在本书修订期间的爱、耐心和支持。
A. S.
H. F. K.
S. S.
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
恭喜!当你拿起这本书的时候,你已经向数据库的奇妙世界迈出了第一步。正如你将在本书中看到的,数据库有许多不同的形式—不仅有简单的电子表格和其他基于文件的形式以及层次结构,还有关系的、面向对象的甚至面向图形的形式。世界上的各行各业都使用数据库来管理、存储和分析数据。
十多年来,我们一直在教授本科生的数据库管理课程,以及研究生的高级数据库管理课程,这本书就是教学成果的结晶。多年来,我们发现没有一本教科书能在既不涉及过多理论细节又不失去重点的情况下全面涵盖这些内容。因此,我们决定合著一本书。写这本书的目的是提供一份完整和实用的指南,涵盖数据库管理方面的所有指导原则,包括:
端到端覆盖知识点,从传统技术到大数据、NoSQL数据库、分析学、数据治理等新兴趋势。
关于如何从过去的数据管理中吸取可能与今天的技术环境相关的教训的独特看法(如定位访问及其在CODASYL和XML/OO数据库中的风险)。
根据我们自己的经验,在实施所考虑的技术时,对数据和分析相关的项目进行批判性的反思并考虑相应的风险管理。我们的合作伙伴来自各行各业,包括银行、零售、政府以及文化部门。
理论和实践相结合,包括来源于多种多样的商业实践、科学研究和学术教学经验的练习、行业实例和案例研究。
这本书还包括一个附录,阐述了我们的“online playground”环境,你可以用它尝试书中讨论过的许多概念。本书网站附加的资源中还包括一个在线考试题库,包含一些跨章节的问题和YouTube课程的参考资料。
我们希望你会喜欢这本书,并希望你在工作、学习或研究中存储、管理和分析小数据或者大数据时,会发现它是一份有用并且值得信赖的参考资料。
目标读者
我们试图让这本书对新手、有经验的数据库从业人员和学生都一样全面和有用。无论你是一个刚刚开始使用数据库管理系统的新手,一个有经验的旨在温习基础知识概念或理论的SQL用户,或者是希望学习更新、更现代的数据库方法的人,本书都将帮助你熟悉所有必要的概念。因此,这本书非常适合以下人群:
在信息管理或计算机科学的理学学士和理学硕士课程中学习数据库管理的本科生或研究生;
希望与时俱进学习数据库管理知识的专业人员;
信息架构师、数据库设计人员、数据所有者、数据管理员、数据库管理员或对该领域的新发展感兴趣的数据科学家。
由于本书包含贯穿各章节的练习和行业实例,因此也可以用于数据库管理原理、数据库建模、数据库设计、数据库系统、数据管理、数据建模和数据科学课程。此外,本书也对大学制定学位有帮助,例如大数据和分析学等课程或专业。
主要内容
本书由四部分组成。第1~4章是对数据库和数据库设计的初步介绍,首先在第1章介绍了基本概念,紧接着在第2章介绍了常用的数据库管理系统的类型及其架构。第3章讨论了概念数据建模,第4章是对数据管理中涉及的不同角色及其职责的概述。
第二部分将深入介绍各种类型的数据库,从以前的遗留数据库和关系数据库管理系统(第5~7章)到新的技术,如面向对象的、对象关系的和基于XML的数据库(第8~10章),最后在第11章中对NoSQL技术的可靠性和新进展进行概述。这部分还包括在第7章中对结构化查询语言(SQL)的全面概述。
在第三部分中,将深入讨论物理数据存储、事务管理和数据库访问的相关内容。第12章讨论了物理文件组织和索引,第13章讲述了关于物理数据库组织以及业务连续性的内容。接下来在第14章中概述了事务管理的基础知识。第15章介绍了数据库访问机制和各种数据库应用程序编程接口(API)。第16章通过着重介绍数据分布和分布式事务管理对这一部分进行了总结。
第17~20章是本书的最后一部分。在这一部分,我们缩小范围,详细介绍了数据仓库和人们感兴趣的新兴领域,如数据治理、大数据和分析学。第17章深入讨论了数据仓库和商务智能。第18章介绍了数据集成、数据质量和数据治理等管理概念。第19章对大数据进行了深入讨论,并展示了可靠的数据库设置如何成为现代分析环境的基石。第20章通过讨论不同类型的分析方法来总结这一部分和这本书。
看完这本书后,你将获得足以构建一个数据库管理系统的全面且深入的知识体系。你将能够辨别不同的数据库系统,并且对比它们的优缺点。你将能够通过概念、逻辑和物理数据建模,对大数据和分析应用程序做出最佳(投资)决策。你将对SQL有深刻的理解,并将了解数据库管理系统在物理层面上是如何工作的—包括事务管理和索引。你将了解如何从外部访问数据库系统,以及如何将它们与其他系统或应用程序集成。最后,你还将了解在使用数据库时所涉及的各种有关管理的内容,包括所涉及的角色、数据集成、质量和治理方面,你还会对如何将数据库管理系统的概念应用于大数据和数据分析有清晰的想法。
如何阅读本书
这本书既可以作为有针对性的参考手册,提供给希望温习某些方面知识和技能的较有经验的读者,也可以作为对整个数据库管理系统领域的概述,提供给入门阶段的读者。读者可以自由地从头到尾阅读,或者跳过某些章节直接从感兴趣的部分开始。我们把这本书清楚地分成了不同的部分和章节,所以读者应该不难理解这本书的整体架构并找到正确的阅读方向。当某个概念将在后面的章节中被扩展,或者重复使用前面章节介绍的概念时,我们会提供清晰的“知识关联”模块,这样读者可以在继续阅读之前快速复习一下前面的章节,或者到书中的其他地方继续学习。
下面的概述根据你可能感兴趣的领域提供了一些常见的“阅读路径”:
希望快速掌握关系数据库系统和SQL的新手:从第一部分开始看,然后阅读第6~9章。
有一定经验希望紧跟技术趋势学习新知识的读者:先阅读第11章,然后阅读第15~20章。
希望对数据库系统有更深入了解的数据库日常用户:阅读第一部分。
希望粗略了解一些基本概念以及管理相关内容的管理人员:从第一部分开始,然后继续阅读第17~20章。
数据库管理本科课程的教授:阅读第一和第二部分。
高级数据库管理研究生课程的教授:阅读第三和第四部分。
下表总结了每种对应身份的读者适合阅读的章节以及其他一些章节(将在第4章讨论)。
章节 新手 有一定经验的用户 数据库
用户 管理
人员 教授
(本科课程) 教授
(研究生课程) 信息
架构师 数据库设计师 数据库管理员 数据
科学家
1 X X X X X X X
2 X X X X X X X
3 X X X X X X X
4 X X X X X X X
5 X X X
6 X X X X
7 X X X X
8 X X X X
9 X X X X
10 X X X
11 X X X X X X
12 X X X
13 X X X
14 X X
15 X X
16 X X X
17 X X X X X
18 X X X X X
19 X X X X X
20 X X X X
每一章内容都坚持理论与实践相结合的原则,因此书中的理论概念经常与来自行业的例子交替出现,在“知识延伸”模块中通过提供更多的背景知识或有趣的故事来说明概念。书中还包括对特定技术优缺点的理论讨论。每一章都有一些练习题来测试你的掌握程度,包括多项选择题和开放性问题。
跨章节的案例研究:Sober
在整本书中,我们使用了一个贯穿始终的案例(一个虚构的名为“Sober”的自动驾驶汽车出租公司),在每一章中都会重新回顾并对案例进行延伸扩展。因此,当你从头到尾阅读这本书的时候,你将仿佛在和Sober的数据库工程师一起学习,体验他们的数据库管理系统是如何从简单的小规模系统发展成更加现代化并且更加健壮的系统的。从实践的角度来看,不同的章节也形成了一个紧密联系的整体,你将看到如何把所有的技术和概念结合在一起。
补充材料
我们很乐意向你推荐本书网站www.pdbmbook.com。该网页包括一些补充信息,如更新信息、幻灯片、视频讲座、附加资料和问答。它还提供了一个可以动手操作的在线环境,读者可以使用SQL操作MySQL关系数据库管理系统、运行NoSQL数据库系统以及其他的小示例,而不需要安装任何工具。你可以在附录中了解相关信息,它会帮助你学会如何使用。
致谢
感谢各位同事、朋友和数据库管理爱好者在本书写作过程中的贡献和帮助。这本书是多年数据库管理研究和教学的成果。
首先要感谢我们的出版商—剑桥大学出版社在两年前接受了我们的出版计划。我们还要感谢Lauren Cowles对整个过程的监督。我们第一次见到Lauren是2016年8月在旧金山,我们一边吃着饭(蟹饼搭配纳帕白葡萄酒),讨论这本书的细节,一边俯瞰着一群正在晒太阳的海豹。事实证明,这是一个可以促成成功伙伴关系的完美环境。我们也要感谢剑桥大学出版社在编辑、生产和营销此书的过程中所给予的帮助。
Gary J. O’Brien也特别值得一提,他的仔细校对对书稿贡献巨大。尽管打开一份含有Gary评论的Word文档有时会让人感到担忧,但其中夹杂的一些切中要点的评论以及幽默的注释给文档修改增添了不少乐趣。
我们还要感谢Jacques Vandenbulcke教授,他是第一个向我们介绍数据库管理这个神奇世界的人。能超越Jacques精湛教学才能的只有他的旅游规划技能。他的影响贯穿全书,不仅涉及数据库专业知识(例如,数据库的概念和实例),还涉及旅行经历(例如,英文版封面上的地下水宫和Meneghetti葡萄酒)。
我们也要感谢在过去几年中与我们合作的许多同事、教授、学生、研究人员、业务联系人和朋友所提供的直接和间接的帮助。非常感谢为我们提供了各种用户论坛、博客、在线讲座和教程的活跃的数据库管理社区,这给我们带来了很大的帮助。
最后,感谢伴侣、孩子、父母和家人给我们的爱、支持和鼓励!我们相信他们会从头到尾阅读这本书,这会给一日三餐带来很多生动有趣的话题。
我们尽可能使这本书完整、准确和有趣。当然,真正重要的是作为读者的你对它的看法。所以,请与我们分享你的观点。我们欢迎所有对本书的反馈和评论,所以不要犹豫,让我们知道你的想法吧。
封面:英文版封面图片描绘的是地下水宫,这是位于伊斯坦布尔的一个巨大的地下蓄水设施,由罗马人建于公元6世纪。为什么放这张图片?简单来说,它是那座宏伟城市的重要地标,在整个历史中一直是文化、文明甚至大陆的交汇点。然而,更重要的是,它是一个按行和列组织的存储结构,甚至包括复制和镜像结构,更不用说可以存储历史数据了。此外,它还包含了有史以来最著名的主键之一—007,因为它在詹姆斯·邦德的电影From Russia With Love中有着重要意义。
Sober1000‰技术驱动Sober是一家新的通过部署自动驾驶汽车来提供出租车服务的公司。虽然该公司拥有自己的自动驾驶出租车车队,但人们也可以将自己的汽车登记为Sober的出租车,并在不用车时让它们提供出租车服务。对于后者,Sober还会与车主保持联系。
Sober提供两种出租车服务:叫车和拼车。叫车服务是指顾客可以呼叫一辆出租车,然后乘车前往目的地,这项服务基于时间和距离进行计费。叫车是一种即时的、按需的服务,可以通过Sober的应用程序进行呼叫。用户只需在屏幕上轻轻一点,就可以在任何地方呼叫出租车,并且会看到估计等待时间,以及车辆到达通知。除了通过Sober应用程序来呼叫出租车,用户在看到Sober的出租车经过时还可以挥手叫车。此时,Sober基于深度学习的图像识别系统将挥手动作识别为“出租车请求”。对于每次叫车业务,Sober想要存储接上与送达乘客的时间、接上与送达乘客的地点、乘车时间、距离、乘客数量、乘车费用、乘车请求类型(通过Sober的应用程序或者挥手示意)以及主要客户(支付费用的人)的号码和姓名。叫车服务最多允许6位乘客。
拼车是另一项由Sober公司提供的服务,它需要更详细的设计。它也可以被称为顺风车,旨在降低成本,减少交通拥堵和碳排放。拼车服务支持灵活分配费用,即每辆出租车的顾客越多,每名顾客的费用就越低(定价灵活)。为了提供环保的激励政策,Sober承诺为每位请求了20次拼车服务的顾客种一棵树。对于每次拼车业务,Sober想要存储接上与送达乘客的时间、接上与送达乘客的地点、乘车时间、距离、所有客户的号码和姓名以及预付的费用。拼车服务最多允许10位乘客。
由于自动驾驶技术的不成熟,事故不能100%排除。Sober也想要存储事故发生的日期、地点和每辆车的损失金额信息。
引言(第1章)。第1章对数据库系统的性质和目标进行一般性综述。我们解释了数据库系统的概念是如何发展的,各数据库系统的共同特性是什么,数据库系统能为用户做什么,以及数据库系统如何与操作系统交互。我们还引入了一个数据库应用的例子:一个包括多个系、教师、学生和课程的大学。这个应用作为贯穿全书的运行实例。这一章本质上是激励性、历史性和解释性的。
第一部分:关系语言(第2~5章)。第2章介绍数据的关系模型,包括关系数据库的结构、数据库模式、码、模式图、关系查询语言、关系运算和关系代数等基本概念。第3~5章主要介绍最具影响力的面向用户的关系语言:SQL。对于一个设计完成的模式,这部分描述了查询、修改、插入和删除等数据操作。虽然这里详细讲述了数据定义的语法,但关于模式设计的问题将推迟到第二部分讲述。
第二部分:数据库设计(第6~7章)。第6章概要介绍数据库设计过程并详细描述实体-联系数据模型。实体-联系模型为数据库设计问题以及在数据模型的约束下捕获现实应用的语义时所遇到的问题提供了一个高层视图。UML类图表示也在这一章中讲述。第7章介绍关系数据库设计。这一章讲述了函数依赖和规范化的理论,重点强调了提出各种范式的动机,以及它们的直观含义。这一章以关系设计的概览开始,依赖于对函数依赖的逻辑蕴涵的直观理解。这使得规范化的概念可以在全面讨论函数依赖理论之前先做介绍,而函数依赖理论将在本章稍后部分讨论。授课教师可以只选用这些直观描述的内容,而不会丢失连贯性。不过,完整地讲授这一章将有利于学生对规范化概念形成较好的理解,从而引导他们去学习函数依赖理论中一些较艰深的概念。这一章的最后一节讲述时态数据建模。
第三部分:应用程序设计和开发(第8~9章)。第8章讨论几种对于应用程序设计和开发非常重要的复杂数据类型,包括半结构化数据、基于对象的数据、文本数据和空间数据。虽然XML在数据库环境中的流行度正在消减,但我们还是保留了对XML的介绍,同时增加了对JSON、RDF和SPARQL的介绍。第9章讨论用于构建交互式的基于Web的数据库应用和移动数据库应用的工具与技术。这一章对服务器端和客户端都进行了详细介绍,所包括的主题有: Java服务器端程序(servlet)、JSP、Django、Java描述语言(JavaScript)和Web服务。同时,还对以下主题进行了讨论:应用体系结构、对象-关系映射系统(包括Hibernate和Django)、性能(包括使用memcached和Redis的缓存)和确保Web应用安全的独特挑战。
第四部分:大数据分析(第10~11章)。第10章概述大规模数据分析应用,重点讲述与传统的数据库应用相比,这些应用如何对数据管理提出不寻常的要求,然后讨论了这些要求是如何得到满足的。所阐述的主题有:包括分布式文件系统在内的大数据存储系统、键值存储和NoSQL系统、MapReduce、Apache Spark、流数据和图数据库。这里对这些系统和概念与前面介绍的数据库概念之间的关联做了重点讲解。第11章讨论为大规模数据分析而设计的系统的结构和使用。这一章首先解释了数据分析、商业智能和决策支持的概念,并在此基础上讨论了数据仓库的结构和将数据收集到仓库中的过程。然后,讲述了仓库中的数据在OLAP应用中的使用,并对数据挖掘算法和技术进行了概述。
第五部分:存储管理和索引(第12~14章)。第12章讨论存储设备以及这些设备的特性如何影响数据库的物理组织和性能。第13章讨论数据存储结构,包括文件组织和缓冲区管理。第14章讲述多种数据存取技术。首先对基于多级索引的数据存取进行描述,进而对B+树进行详细介绍。然后介绍B+树不太适用的那些应用的索引结构,包括诸如LSM树和缓冲树等写优化的索引,位图索引,使用k-d树、四分树和R树的空间数据索引等。
第六部分:查询处理和优化(第15~16章)。第15~16章阐述查询处理和查询优化。第15章重点讲述数据库操作的实现算法,特别是为无法完全放入主存中的非常大的数据而设计的各种各样的连接算法。这一章还讲述了用于主存数据库的查询处理技术。第16章讲述查询优化,首先展示了如何使用转换规则将查询计划转换为与之等价的其他计划,然后描述了如何估计查询执行代价,以及如何高效地找出代价最小的查询执行计划。
第七部分:事务管理(第17~19章)。第17章着重介绍事务处理系统的基本概念:原子性、一致性、隔离性和持久性。这一章概述了用于保证这些特性的方法,包括基于日志的恢复和使用锁的并发控制、基于时间戳的技术以及快照隔离。仅需要对事务概念进行综述的课程可以只使用第17章,而不必使用这部分的其他章节,那些章节的内容要深入得多。第18章重点讲述并发控制,并介绍几种保证可串行化的技术,包括封锁、时间戳和乐观(有效性检查)技术。这一章讲述了多版本并发控制技术,包括广泛使用的快照隔离技术,以及一个保证可串行化的扩展技术。这一章还讨论了弱一致性级别、索引结构中的并发、主存数据库系统中的并发、长持续时间的事务、操作级别的并发和实时事务处理。第19章讨论在系统崩溃和存储器故障的情况下保证事务正确执行的主要技术,包括日志、检查点和数据库转储,以及使用远程备份系统的高可用性。这一章还介绍了提前释放锁的恢复和广泛使用的ARIES算法,讨论了主存数据库系统中的恢复以及NVRAM的使用。
第八部分:并行和分布式数据库(第20~23章)。第20章介绍计算机系统体系结构,并描述基本的计算机系统对于数据库系统的影响。这一章讨论了集中式系统、客户-服务器系统、并行和分布式体系结构以及基于云的系统。本部分的其余三章分别讲述并行和分布式数据库的不同方面,第21章讲述存储和索引,第22章讲述查询处理,第23章讲述事务处理。第21章讨论分区和数据偏斜、复制、并行索引、分布式文件系统(包括Hadoop文件系统)和并行的键值存储。第22章讨论多个查询间的并行和单个查询内的并行,包括并行和分布式排序与连接、MapReduce、流水线、Volcano交换算子模型、线程级并行、流数据以及地理上分散的查询的优化。第23章讨论传统的分布式处理方法(如两阶段提交),以及更复杂的解决方案(如Paxos和Raft)。这一章讲述了分布式并发控制的各种算法,包括副本管理和弱一致性级别,还讨论了CAP定理所包含的权衡和协调,以及使用版本向量和默克尔树(Merkle tree)来检测不一致性的方法。
第九部分:附录。附录A给出我们的大学模式的细节,包括完整的模式、DDL和所有的表。
第十部分:中文在线章节(第24~26章)。第24章对第14章的索引结构进行了扩展,详细讲述LSM树及其变种、位图索引、空间索引和动态散列技术。第25章扩展了第9章所涵盖的内容,讨论性能调整、基准测试,以及从遗产系统中移植、标准化和分布式目录系统。第26章从数据库的角度审视区块链技术,描述了区块链数据结构,以及使用加密散列函数和公钥加密来保证匿名性、无可辩驳性、防篡改性等区块链性质。这一章描述和比较了用于保证去中心化的分布式共识算法,包括工作量证明、权益证明和拜占庭(Byzantine)共识。这一章的大部分内容讨论使得区块链成为重要的数据库概念的那些特性,包括许可区块链的作用、智能合约中业务逻辑和协议的编码,以及跨区块链的互操作性。这一章还讨论了为达到数据库级别的事务处理性能所采用的技术。最后对当前和未来的企业区块链应用进行了综述。
第十一部分:英文在线章节(第27~32章)。可以在db-book.com上在线获取这些章节。我们提供了6章,涵盖了具有历史意义或者具有先进性的材料。第27章讲述“纯”查询语言:元组和域关系演算,以及Datalog(它的语法是仿照Prolog语言的)。第28章讲述关系数据库设计中的高级主题,包括多值依赖理论和第四范式,以及更高的范式。第29章讲述基于对象的数据库、诸如数组和多重集合类型等更复杂的数据类型,以及非1NF的表。第30章对第8章关于XML的讨论进行扩展。第31章讲述信息检索,讨论非结构化的文本数据的查询。第32章提供对PostgreSQL数据库系统的综述,面向的是专注于数据库内部层面的课程。这一章对于学生在PostgreSQL数据库的开放源码库上做课题特别有用。
在每一章的末尾我们都提供了一节—延伸阅读,其中的参考资料有助于学生对各章所包含的内容或者所涉及的相关领域的新进展继续深入学习。有时,延伸阅读一节会包括已成为尽人皆知的经典之作的原始渊源论文。另外,在线提供每一章的详细参考文献,并且为那些有意对各章所包含内容的某些部分进行深入学习的读者提供了参考资料。
第7版
第7版是由以下因素驱动产生的:我们收到的关于前面几版的意见和建议,我们在耶鲁大学、理海大学、印度理工学院孟买校区讲授本课程的体会,以及我们对于数据库技术发展方向的分析。
前面我们列举了这一版的主要新特性,包括:对大数据内容的广泛涵盖,为反映当代的硬件技术对所有各章所做的更新,半结构化数据管理,高级索引技术,以及关于区块链数据库的新的一章。除了这些主要的改动之外,我们对每一章都进行了修改,对较旧的内容进行了更新,增加了对数据库技术当前进展的讨论,改进了对学生认为难以理解的主题的描述。我们还增加了新的习题,并对参考文献进行了更新。
下面我们为原先使用第6版的教师列出这一版的较为重要的改变。
将关系代数移到了第2章,以帮助学生更好地理解作为SQL等查询语言的基础的关系运算。更深入地讲述关系代数还有利于学生更好地理解后面讨论查询处理和优化所需的代数运算。关系演算的两种变体现在都在在线章节中讲述,因为我们认为它们现在仅对更加面向理论化的课程有价值,而对于大多数的数据库课程来说是可以略掉的。
现在关于SQL的三章包含了数据库系统特定的SQL变体的更多细节,以帮助学生更好地完成实践作业。对于SQL与多重集合关系代数之间的关联也做了更详细的讲解。现在第4章包含了关于连接的所有材料,而以前自然连接是放在前面的章节中的。这一章还增加了用于生成唯一码值的序列和行级安全性的相关内容。特别有用的对JDBC API的当前扩展现在放到了第5章中,而对OLAP的讲述从这一章移到了第11章中。
对第6章进行了修改,将E-R图和E-R概念都放到了这一章中,而不是像以前的版本那样先讲述概念然后再介绍E-R图。我们认为这会帮助学生更好地理解E-R模型。
第7章改进了对时态数据建模的介绍,融入了SQL:2011时态数据库的特性。
第8章是新的一章,讲述复杂数据类型,包括诸如XML、JSON、RDF、SPARQL等半结构化数据,以及基于对象的数据、文本数据和空间数据。在第6版中详细介绍了基于对象的数据库、XML和文本数据上的信息检索,这些主题现在被简化后包含在第8章中,而第6版中原来的那些章节现在可以在线阅读。
第9章被大大地改写了,以反映当前的应用开发工具和技术,包括扩展了对JavaScript和用于构建动态Web界面的JavaScript库的介绍、对Python中采用Django架构的应用开发的介绍、对Web服务的介绍和对使用HTML5的断连操作的介绍,增加了使用Django的对象-关系映射内容,还对能够处理大事务负载的高性能应用的开发技术进行了讨论。
第10章是关于大数据的新的一章,从用户的角度讨论了大数据的概念和工具。这一章的内容包括大数据存储系统、MapReduce范式、Apache Hadoop和Apache Spark、流数据库和图数据库,目的是使读者对表象背后的事情有个大致的了解,以便能够使用大数据系统。后续的几章详细介绍了大数据的内部构件。
存储和文件结构被分成了两章。讲述存储的第12章经过更新后,更充分地描述了闪存,并包含了若干新技术—面向列的存储和主存数据库中的存储组织。讲述数据存储结构的第13章经过扩展后,现在包含了许多细节,例如自由空间图、划分,最重要的是面向列的存储。
讲述索引的第14章增加了写优化的索引结构,包括LSM树及其变种和缓冲树,它们有很好的应用前景。这一章对空间索引的介绍比较简短。在讲述高级索引技术的第24章中有对LSM树和空间索引的更详细介绍。现在第14章仅对位图索引进行了简单介绍,更详细的介绍则移到了第24章中。动态索引技术也被移到了第24章中,目前这一技术对实践不太重要。
讲述查询处理的第15章大大扩展了对查询处理中的流水线技术的介绍,增加了主存中关于查询处理的新素材,包括查询编译以及对空间连接的简单介绍。讲述查询优化的第16章包含了外连接和聚集等算子的等价规则的更多示例,更新了用于代价估计的统计信息的内容,改进了关于连接顺序优化算法的介绍。这一章中还增加了使用半连接和反连接运算对嵌套子查询去除相关的技术的介绍。
讲述并发控制的第18章包含了主存中并发控制的新素材。讲述恢复系统的第19章对于使用远程备份系统的高可用性给予了更多的重视。
关于并行数据库和分布式数据库的介绍进行了全面的修改。由于这两个领域从低层次的并行到地理上分散的系统都演进到了连续体(continuum)状态,因此我们现在一起展示这些主题。
第20章讲述数据库系统体系结构,在以前版本的基础上有很大的改变,包含了关于实际的互联网络(诸如树形或胖树结构)的新素材,大大扩展和更新了关于共享内存体系结构和缓存一致性的素材。这一章中有一个关于基于云的服务的新节,它涵盖了虚拟机和容器、平台即服务、软件即服务以及弹性。
第21章讲述并行和分布式存储,只有少部分内容在第6版中讲过,例如分区技术,本章中的其他内容都是新的。
第22章讲述并行和分布式查询处理,还是只有少数节已经包含在第6版中,例如排序、连接和少数几个关系运算的并行算法,本章中的其他内容几乎都是新的。
第23章讲述并行和分布式事务处理。这一章中有一些内容已经包含在第6版中,例如关于分布式数据库中的2PC、持久消息和并发控制的那几节,本章中的其他内容几乎都是新的。
与第6版一样,我们在附录A和用到大学数据库例子的各章中列出了该数据库的模式和样例关系实例,以便于理解。另外,我们在网站db-book.com上提供了整个例子的SQL数据定义语句,以及创建样例关系实例的SQL语句。这能激励学生直接在数据库系统上运行样例查询,并修改这些查询去进行更多的试验。上面没有列出的所有主题都在第6版的基础上有所更新,但总体结构相对来说没有改动。
章末材料
在每一章的末尾除了总结之外,还有一个术语回顾列表,用来帮助读者回顾这一章中讨论的关键主题。
与第6版一样,习题被划分成两部分:实践习题和习题。实践习题的解决方案在本书英文版的网站上公开发布。我们鼓励学生独立解决实践习题,然后用网站上的解决方案来检查自己的答案。习题的解答只有授课教师能得到(参看下面的“授课教师注意事项”,以获取如何得到题解的信息)。
许多章的末尾都有一个“工具”节,它提供了与该章的主题相关的软件工具的信息,其中一些工具可以用于实验室练习。大学数据库和习题中用到的其他关系的SQL DDL和样例数据在本书英文版的网站上可以得到,也可以用于实验室练习。
授课教师注意事项
可以用本书各章的不同子集来设计课程,某些章也可以用不同于本书中的顺序来讲授。下面列出了一些可能的安排。
第5章(高级SQL)。这一章可以跳过或推迟到后面讲授,而不会影响连续性。建议大多数课程至少较早地讲授5.1.1节,因为JDBC很可能会是学生实习的一个有用工具。
第6章(使用E-R模型的数据库设计)。如果教师愿意,这一章可以在第3~5章之前讲,因为第6章完全不依赖于SQL。但是,那些强调编程实习的课程可能会在学习SQL之后有各种各样的实验室练习,对这样的课程我们推荐在讲数据库设计之前先讲SQL。
第15章(查询处理)和第16章(查询优化)。入门性的课程可以去掉这两章,这对于任何其他章的讲授都没有影响。
第七部分(事务管理)。我们的讲述包括一章综述(第17章)和后续各章的详细讨论。如果计划把后面的章推迟到高级课程中去讲授,可以选择仅讲述第17章,而省略第18和19章。
第八部分(并行和分布式数据库)。我们的讲述包括一章综述(第20章)与后续各章关于存储、查询处理和事务等主题的讨论。如果计划把后面的章推迟到高级课程中去讲授,可以选择仅讲述第20章,而省略第21~23章。
第十一部分(英文在线章节)。第27章(形式关系查询语言)可以在第2章之后讲SQL之前讲授,入门性课程也可以省略这一章。另外5个英文在线章节(高级关系数据库设计、基于对象的数据库、XML、信息检索和PostgreSQL)可以用作自学材料,入门性课程可以去掉它们。
基于本书的教学大纲可以在本书英文版的网站上找到。
本书英文版网站和英文补充材料
本书英文版网站的网址是db-book.com,其中包括:
本书所有各章的幻灯片。
实践习题的答案。
6个在线章节。
实验素材,包括大学模式和习题中用到的SQL DDL和样例数据,大量实验练习和相关项目示例,以及关于建立和使用各种数据库系统和工具的说明。
最新勘误表。
下列附加材料仅有教师可以获得:
包括书中所有习题的答案的教师手册。
包括额外习题的问题库。
扫描二维码可获得的中文材料
本书采用一书一码的方式,即一本书对应一个专有的二维码(见本书前面的衬纸)。扫描二维码获取阅读权限后,可浏览以下电子数据资源。
第十部分(包括高级索引技术、高级应用开发、区块链数据库等高级主题)。
索引。
未来我们还可能通过该二维码提供更多的增值服务,例如习题答案、老师的授课视频等。
联系我们
我们已尽了最大的努力来避免在本书中出现排版错误、内容疏忽等。然而,与新发布的软件类似,错误在所难免,在本书英文版的网站中提供了一个最新勘误表。如果你能指出尚未包含在最新勘误表中的本书的疏漏之处,我们将十分感激。
我们很高兴能收到你对改进本书的建议,也很欢迎你对本书英文版网站做出对其他读者有用的贡献,例如程序设计习题、课程实习建议、在线实验室和指南以及授课要点等。
电子邮件请发到db-book-authors@cs.yale.edu,来信请寄至Avi Silberschatz,Department of Computer Science,Yale University, 51 Prospect Street, P.O. Box 208285, New Haven, CT 06520-8285 USA。
致谢
许多人对第7版以及之前的6版提供了帮助,我们对他们致以诚挚的谢意。
第7版
Ioannis Alagiannis和Renata Borovica-Gajic撰写了可以在线获取的描述PostgreSQL数据库的第32章。这一章是对第6版中PostgreSQL章的完全重写,第6版中的那一章是由Anastasia Ailamaki、Sailesh Krishnamurthy、Spiros Papadimitriou、Bianca Schroeder、Karl Schnaitter和Gavin Sherry撰写的。
Judi Paige帮助制作了插图和演示幻灯片,并处理了文字编辑等事宜。
Mark Wogahn保证了生成本书文本的软件正常工作,包括LaTex宏和字体等。
Sriram Srinivasan对于并行和分布式数据库部分的反馈使我们受益匪浅。
N. L. Sarda对第6版和第7版的一些节给出了具有洞察力的反馈。
Bikash Chandra 和 Venkatesh Emani协助对“应用程序开发”一章进行了更新,并创建了样例代码。
印度理工学院孟买校区的学生(特别是Ashish Mithole)对预印本中有关并行和分布式数据库的章节提出了意见。
耶鲁大学、理海大学和印度理工学院孟买校区的学生对第6提给出了意见。
Jeffrey Anthony(Synaptic公司的合伙人兼CTO)以及理海大学的学生Corey Caplan(现在是 Leavitt Innovations的联合创始人之一)、Gregory Cheng、Timothy LaRowe和Aaron Rotem对新的区块链章节提出了有益的意见和建议。
前面各版
Hakan Jakobsson(Oracle)撰写了第6版中关于Oracle数据库系统的一章;Sriram Padmanabhan(IBM)撰写了第6版中关于IBM DB2 数据库系统的一章;Sameet Agarwal、José A. Blakeley、Thierry D’Hers、Gerald Hinson、Dirk Myers、Vaqar Pirzada、Bill Ramos、Balaji Rathakrishnan、Michael Rys、Florian Waas和Michael Zwilling撰写了第6版中关于Microsoft SQL Server数据库系统的一章,特别是José Blakeley组织和编辑了这一章,遗憾的是他现在已经不和我们在一起了;César Galindo-Legaria、Goetz Graefe、Kalen Delaney和Thomas Casey对Microsoft SQL Server这一章以前的版本做出了贡献,现在,这些章没有包含在第7版中。
Anastasia Ailamaki、Sailesh Krishnamurthy、Spiros Papadimitriou、Bianca Schroeder、Karl Schnaitter和Gavin Sherry撰写了第6版中关于Postgre SQL的一章。
Daniel Abadi审阅了第5版的目录,并协助进行了调整。
作为本书的审阅人,Steve Dolins(佛罗里达大学)、Rolando Fernanez(乔治·华盛顿大学)、Frantisek Franek(麦克马斯特大学)、Latifur Khan(得克萨斯大学达拉斯分校)、Sanjay Madria(密苏里科技大学)、Aris Ouksel(伊利诺伊大学)和Richard Snodgrass(滑铁卢大学)的意见对于第6版的最终定稿帮助很大。
Judi Paige帮助制作了插图和演示幻灯片。
Mark Wogahn保证了生成本书文本的软件正常工作,包括LaTex宏和字体。
N. L. Sarda的反馈帮助我们改进了好几章,Vikram Pudi促使我们替换掉早先的银行模式,Shetal Shah对几章内容给出了反馈。
耶鲁大学、理海大学和印度理工学院孟买校区的学生对第5版以及第6版的预印本给出了意见。
Chen Li 和 Sharad Mehrotra为第5版提供了关于JDBC和安全性的素材。
Marilyn Turnamian 和 Nandprasad Joshi为第5版提供了秘书服务,Marilyn还为第5版准备了一个封面设计的早期版本。
Lyn Dupré对第3版进行了审查,Sara Strandtman对第3版进行了文字编辑。
Nilesh Dalvi、Sumit Sanghai、Gaurav Bhalotia、Arvind Hulgeri、K. V. Raghavan、Prateek Kapadia、Sara Strandtman、Greg Speegle和Dawn Bezviner协助准备了前面各版的教师手册。
用船作为封面概念的部分想法最初是Bruce Stephan建议的。
以下人士对本书的第5版和前面各版提出了建议和意见:R. B. Abhyankar, Hani Abu-Salem, Jamel R. Alsabbagh, Raj Ashar, Don Batory, Phil Bernhard, Christian Breimann, Gavin M. Bierman, JanekBogucki, Haran Boral, Paul Bourgeois, PhilBohannon, Robert Brazile, Yuri Breitbart, Ramzi Bualuan, Michael Carey, Soumen Chakrabarti, Tom Chappell, Zhengxin Chen, Y. C. Chin, Jan Chomicki, Laurens Damen, Prasanna Dhan- dapani, Qin Ding, Valentin Dinu, J. Edwards, Christos Faloutsos, Homma Farian, Alan Fekete, Frantisek Franek, Shashi Gadia, Hector Garcia-Molina, Goetz Graefe, Jim Gray, Le Gruenwald, Eitan M. Gurari, William Hankley, Bruce Hillyer, Ron Hitchens, Chad Hogg, Arvind Hulgeri, Yannis Ioannidis, Zheng Jiaping, Randy M. Kaplan, Graham J. L. Kemp, Rami Khouri, Hyoung-Joo Kim, Won Kim, Henry Korth (father of Henry F.), Carol Kroll, Hae Choon Lee, SangWon Lee, Irwin Levinstein, Mark Llewellyn, Gary Lindstrom, Ling Liu, Dave Maier, Keith Marzullo, Marty Maskarinec, Fletcher Mattox, Sharad Mehrotra, Jim Melton, Alberto Mendelzon, Ami Motro, Bhagirath Narahari, Yiu-Kai Dennis Ng, Thanh-Duy Nguyen, Anil Nigam, Cyril Orji, Meral Ozsoyoglu, D. B. Phatak, Juan Altmayer Pizzorno, Bruce Porter, Sunil Prabhakar, Jim Peterson, K. V. Raghavan, Nahid Rahman, Rajarshi Rakshit, Krithi Ramamritham, Mike Reiter, Greg Riccardi, Odinaldo Rodriguez, Mark Roth, Marek Rusinkiewicz, Michael Rys, Sunita Sarawagi, N. L. Sarda, Patrick Schmid, Nikhil Sethi, S. Seshadri, Stewart Shen, Shashi Shekhar, Amit Sheth, Max Smolens, Nandit Soparkar, Greg Speegle, Jeff Storey, Dilys Thomas, Prem Thomas, Tim Wahls, Anita Whitehall, Christopher Wilson, Marianne Winslett, Weining Zhang, Liu Zhenming。
个人注记
Sudarshan感谢他的妻子Sita的爱、耐心和支持,感谢他的孩子Madhur、Advaith的爱和乐观精神。Hank感谢他的妻子Joan、孩子Abby和Joe的爱和理解。Avi感谢Valerie在本书修订期间的爱、耐心和支持。
A. S.
H. F. K.
S. S.
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
恭喜!当你拿起这本书的时候,你已经向数据库的奇妙世界迈出了第一步。正如你将在本书中看到的,数据库有许多不同的形式—不仅有简单的电子表格和其他基于文件的形式以及层次结构,还有关系的、面向对象的甚至面向图形的形式。世界上的各行各业都使用数据库来管理、存储和分析数据。
十多年来,我们一直在教授本科生的数据库管理课程,以及研究生的高级数据库管理课程,这本书就是教学成果的结晶。多年来,我们发现没有一本教科书能在既不涉及过多理论细节又不失去重点的情况下全面涵盖这些内容。因此,我们决定合著一本书。写这本书的目的是提供一份完整和实用的指南,涵盖数据库管理方面的所有指导原则,包括:
端到端覆盖知识点,从传统技术到大数据、NoSQL数据库、分析学、数据治理等新兴趋势。
关于如何从过去的数据管理中吸取可能与今天的技术环境相关的教训的独特看法(如定位访问及其在CODASYL和XML/OO数据库中的风险)。
根据我们自己的经验,在实施所考虑的技术时,对数据和分析相关的项目进行批判性的反思并考虑相应的风险管理。我们的合作伙伴来自各行各业,包括银行、零售、政府以及文化部门。
理论和实践相结合,包括来源于多种多样的商业实践、科学研究和学术教学经验的练习、行业实例和案例研究。
这本书还包括一个附录,阐述了我们的“online playground”环境,你可以用它尝试书中讨论过的许多概念。本书网站附加的资源中还包括一个在线考试题库,包含一些跨章节的问题和YouTube课程的参考资料。
我们希望你会喜欢这本书,并希望你在工作、学习或研究中存储、管理和分析小数据或者大数据时,会发现它是一份有用并且值得信赖的参考资料。
目标读者
我们试图让这本书对新手、有经验的数据库从业人员和学生都一样全面和有用。无论你是一个刚刚开始使用数据库管理系统的新手,一个有经验的旨在温习基础知识概念或理论的SQL用户,或者是希望学习更新、更现代的数据库方法的人,本书都将帮助你熟悉所有必要的概念。因此,这本书非常适合以下人群:
在信息管理或计算机科学的理学学士和理学硕士课程中学习数据库管理的本科生或研究生;
希望与时俱进学习数据库管理知识的专业人员;
信息架构师、数据库设计人员、数据所有者、数据管理员、数据库管理员或对该领域的新发展感兴趣的数据科学家。
由于本书包含贯穿各章节的练习和行业实例,因此也可以用于数据库管理原理、数据库建模、数据库设计、数据库系统、数据管理、数据建模和数据科学课程。此外,本书也对大学制定学位有帮助,例如大数据和分析学等课程或专业。
主要内容
本书由四部分组成。第1~4章是对数据库和数据库设计的初步介绍,首先在第1章介绍了基本概念,紧接着在第2章介绍了常用的数据库管理系统的类型及其架构。第3章讨论了概念数据建模,第4章是对数据管理中涉及的不同角色及其职责的概述。
第二部分将深入介绍各种类型的数据库,从以前的遗留数据库和关系数据库管理系统(第5~7章)到新的技术,如面向对象的、对象关系的和基于XML的数据库(第8~10章),最后在第11章中对NoSQL技术的可靠性和新进展进行概述。这部分还包括在第7章中对结构化查询语言(SQL)的全面概述。
在第三部分中,将深入讨论物理数据存储、事务管理和数据库访问的相关内容。第12章讨论了物理文件组织和索引,第13章讲述了关于物理数据库组织以及业务连续性的内容。接下来在第14章中概述了事务管理的基础知识。第15章介绍了数据库访问机制和各种数据库应用程序编程接口(API)。第16章通过着重介绍数据分布和分布式事务管理对这一部分进行了总结。
第17~20章是本书的最后一部分。在这一部分,我们缩小范围,详细介绍了数据仓库和人们感兴趣的新兴领域,如数据治理、大数据和分析学。第17章深入讨论了数据仓库和商务智能。第18章介绍了数据集成、数据质量和数据治理等管理概念。第19章对大数据进行了深入讨论,并展示了可靠的数据库设置如何成为现代分析环境的基石。第20章通过讨论不同类型的分析方法来总结这一部分和这本书。
看完这本书后,你将获得足以构建一个数据库管理系统的全面且深入的知识体系。你将能够辨别不同的数据库系统,并且对比它们的优缺点。你将能够通过概念、逻辑和物理数据建模,对大数据和分析应用程序做出最佳(投资)决策。你将对SQL有深刻的理解,并将了解数据库管理系统在物理层面上是如何工作的—包括事务管理和索引。你将了解如何从外部访问数据库系统,以及如何将它们与其他系统或应用程序集成。最后,你还将了解在使用数据库时所涉及的各种有关管理的内容,包括所涉及的角色、数据集成、质量和治理方面,你还会对如何将数据库管理系统的概念应用于大数据和数据分析有清晰的想法。
如何阅读本书
这本书既可以作为有针对性的参考手册,提供给希望温习某些方面知识和技能的较有经验的读者,也可以作为对整个数据库管理系统领域的概述,提供给入门阶段的读者。读者可以自由地从头到尾阅读,或者跳过某些章节直接从感兴趣的部分开始。我们把这本书清楚地分成了不同的部分和章节,所以读者应该不难理解这本书的整体架构并找到正确的阅读方向。当某个概念将在后面的章节中被扩展,或者重复使用前面章节介绍的概念时,我们会提供清晰的“知识关联”模块,这样读者可以在继续阅读之前快速复习一下前面的章节,或者到书中的其他地方继续学习。
下面的概述根据你可能感兴趣的领域提供了一些常见的“阅读路径”:
希望快速掌握关系数据库系统和SQL的新手:从第一部分开始看,然后阅读第6~9章。
有一定经验希望紧跟技术趋势学习新知识的读者:先阅读第11章,然后阅读第15~20章。
希望对数据库系统有更深入了解的数据库日常用户:阅读第一部分。
希望粗略了解一些基本概念以及管理相关内容的管理人员:从第一部分开始,然后继续阅读第17~20章。
数据库管理本科课程的教授:阅读第一和第二部分。
高级数据库管理研究生课程的教授:阅读第三和第四部分。
下表总结了每种对应身份的读者适合阅读的章节以及其他一些章节(将在第4章讨论)。
章节 新手 有一定经验的用户 数据库
用户 管理
人员 教授
(本科课程) 教授
(研究生课程) 信息
架构师 数据库设计师 数据库管理员 数据
科学家
1 X X X X X X X
2 X X X X X X X
3 X X X X X X X
4 X X X X X X X
5 X X X
6 X X X X
7 X X X X
8 X X X X
9 X X X X
10 X X X
11 X X X X X X
12 X X X
13 X X X
14 X X
15 X X
16 X X X
17 X X X X X
18 X X X X X
19 X X X X X
20 X X X X
每一章内容都坚持理论与实践相结合的原则,因此书中的理论概念经常与来自行业的例子交替出现,在“知识延伸”模块中通过提供更多的背景知识或有趣的故事来说明概念。书中还包括对特定技术优缺点的理论讨论。每一章都有一些练习题来测试你的掌握程度,包括多项选择题和开放性问题。
跨章节的案例研究:Sober
在整本书中,我们使用了一个贯穿始终的案例(一个虚构的名为“Sober”的自动驾驶汽车出租公司),在每一章中都会重新回顾并对案例进行延伸扩展。因此,当你从头到尾阅读这本书的时候,你将仿佛在和Sober的数据库工程师一起学习,体验他们的数据库管理系统是如何从简单的小规模系统发展成更加现代化并且更加健壮的系统的。从实践的角度来看,不同的章节也形成了一个紧密联系的整体,你将看到如何把所有的技术和概念结合在一起。
补充材料
我们很乐意向你推荐本书网站www.pdbmbook.com。该网页包括一些补充信息,如更新信息、幻灯片、视频讲座、附加资料和问答。它还提供了一个可以动手操作的在线环境,读者可以使用SQL操作MySQL关系数据库管理系统、运行NoSQL数据库系统以及其他的小示例,而不需要安装任何工具。你可以在附录中了解相关信息,它会帮助你学会如何使用。
致谢
感谢各位同事、朋友和数据库管理爱好者在本书写作过程中的贡献和帮助。这本书是多年数据库管理研究和教学的成果。
首先要感谢我们的出版商—剑桥大学出版社在两年前接受了我们的出版计划。我们还要感谢Lauren Cowles对整个过程的监督。我们第一次见到Lauren是2016年8月在旧金山,我们一边吃着饭(蟹饼搭配纳帕白葡萄酒),讨论这本书的细节,一边俯瞰着一群正在晒太阳的海豹。事实证明,这是一个可以促成成功伙伴关系的完美环境。我们也要感谢剑桥大学出版社在编辑、生产和营销此书的过程中所给予的帮助。
Gary J. O’Brien也特别值得一提,他的仔细校对对书稿贡献巨大。尽管打开一份含有Gary评论的Word文档有时会让人感到担忧,但其中夹杂的一些切中要点的评论以及幽默的注释给文档修改增添了不少乐趣。
我们还要感谢Jacques Vandenbulcke教授,他是第一个向我们介绍数据库管理这个神奇世界的人。能超越Jacques精湛教学才能的只有他的旅游规划技能。他的影响贯穿全书,不仅涉及数据库专业知识(例如,数据库的概念和实例),还涉及旅行经历(例如,英文版封面上的地下水宫和Meneghetti葡萄酒)。
我们也要感谢在过去几年中与我们合作的许多同事、教授、学生、研究人员、业务联系人和朋友所提供的直接和间接的帮助。非常感谢为我们提供了各种用户论坛、博客、在线讲座和教程的活跃的数据库管理社区,这给我们带来了很大的帮助。
最后,感谢伴侣、孩子、父母和家人给我们的爱、支持和鼓励!我们相信他们会从头到尾阅读这本书,这会给一日三餐带来很多生动有趣的话题。
我们尽可能使这本书完整、准确和有趣。当然,真正重要的是作为读者的你对它的看法。所以,请与我们分享你的观点。我们欢迎所有对本书的反馈和评论,所以不要犹豫,让我们知道你的想法吧。
封面:英文版封面图片描绘的是地下水宫,这是位于伊斯坦布尔的一个巨大的地下蓄水设施,由罗马人建于公元6世纪。为什么放这张图片?简单来说,它是那座宏伟城市的重要地标,在整个历史中一直是文化、文明甚至大陆的交汇点。然而,更重要的是,它是一个按行和列组织的存储结构,甚至包括复制和镜像结构,更不用说可以存储历史数据了。此外,它还包含了有史以来最著名的主键之一—007,因为它在詹姆斯·邦德的电影From Russia With Love中有着重要意义。
Sober1000‰技术驱动Sober是一家新的通过部署自动驾驶汽车来提供出租车服务的公司。虽然该公司拥有自己的自动驾驶出租车车队,但人们也可以将自己的汽车登记为Sober的出租车,并在不用车时让它们提供出租车服务。对于后者,Sober还会与车主保持联系。
Sober提供两种出租车服务:叫车和拼车。叫车服务是指顾客可以呼叫一辆出租车,然后乘车前往目的地,这项服务基于时间和距离进行计费。叫车是一种即时的、按需的服务,可以通过Sober的应用程序进行呼叫。用户只需在屏幕上轻轻一点,就可以在任何地方呼叫出租车,并且会看到估计等待时间,以及车辆到达通知。除了通过Sober应用程序来呼叫出租车,用户在看到Sober的出租车经过时还可以挥手叫车。此时,Sober基于深度学习的图像识别系统将挥手动作识别为“出租车请求”。对于每次叫车业务,Sober想要存储接上与送达乘客的时间、接上与送达乘客的地点、乘车时间、距离、乘客数量、乘车费用、乘车请求类型(通过Sober的应用程序或者挥手示意)以及主要客户(支付费用的人)的号码和姓名。叫车服务最多允许6位乘客。
拼车是另一项由Sober公司提供的服务,它需要更详细的设计。它也可以被称为顺风车,旨在降低成本,减少交通拥堵和碳排放。拼车服务支持灵活分配费用,即每辆出租车的顾客越多,每名顾客的费用就越低(定价灵活)。为了提供环保的激励政策,Sober承诺为每位请求了20次拼车服务的顾客种一棵树。对于每次拼车业务,Sober想要存储接上与送达乘客的时间、接上与送达乘客的地点、乘车时间、距离、所有客户的号码和姓名以及预付的费用。拼车服务最多允许10位乘客。
由于自动驾驶技术的不成熟,事故不能100%排除。Sober也想要存储事故发生的日期、地点和每辆车的损失金额信息。
媒体评论
---------------------------8081317 - 数据库系统概念(原书第7版)---------------------------
数据库领域的殿堂级作品
夯实数据库理论基础,修炼数据库技术内功的必备之选
对深入理解数据库,深入研究数据库,深入操作数据库都具有极强的指导作用!
本书是数据库系统方面的经典教材之一,其内容由浅入深,既包含了数据库系统基本概念,又反映了数据库技术的新进展。它被国际上许多著名大学所采用,包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学等。我国也有多所大学采用本书作为本科生和研究生数据库课程的教材和主要教学参考书,收到了良好的效果。
第7版保持了前6版的总体风格,同时对内容进行了扩充,对结构进行了调整,以更好地符合数据库教学的需求,反映数据库设计、管理与使用方式的发展和变化。具体更新内容如下:
广泛涵盖了大数据系统的内容,与第6版相比有大量的内容扩充和改进。
增加了区块链数据库的内容,重点介绍了区块链系统与数据库系统之间的交互。
对涉及数据库内部的所有各章进行了修改,以融入固态硬盘、主存数据库、多核系统和列存储等当代技术。
对于使用JSON、RDF和SPARQL进行半结构化数据管理做了更多描述。
更新了对于时态数据、数据分析和诸如写优化的索引等高级索引技术的描述。
为了更好地支持动手实践,重新组织和更新了一些章节,包括使用当代的应用开发工具和大数据系统,如Apache Hadoop和Spark。
本书英文版配套网站(http://www.db-book.com)提供的教辅资源包括:
各章的教学课件。
实践习题的答案。
. 6章英文在线内容(形式关系查询语言、高级关系数据库设计、基于对象的数据库、XML、信息检索和PostgreSQL)。
实验素材(包括大学模式和习题中用到的SQL DDL和样例数据,大量实验练习和相关项目示例,以及关于建立与使用各种数据库系统和工具的说明)。
最新勘误表。
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
尽管已经有很多数据库经典教材,但由于技术发展突飞猛进,我们还是需要一本紧跟技术趋势的新教材。本书满足了这一需求,是培养下一代数据管理人才的必选书目。
—— 裴健,西蒙弗雷泽大学教授
本书通过对基本原理和实际部署的讲解,指导读者学会管理大数据和小数据。大量的案例研究、开源软件链接以及一个非常有用的数据分析抽象,将帮助读者更有效地选择解决方案,因此本书对于实践者颇具实用价值。同时,数据库原理是成功和可持续的数据科学的关键,本书对原理的清晰阐述有助于推动这些知识的传播,因此本书对于学术界也非常重要。
—— Sihem Amer-Yahia,法国格勒诺布尔信息实验室主任,VLDB Journal主编
我们正在进入智能机器的技术新时代,数据驱动的算法为这个时代注入了强劲动力,理解数据管理的基本概念及其最新应用变得比以往任何时候都更加重要。如果你有兴趣了解数据库系统、大数据技术和数据科学的新进展,那么本书绝对不容错过。书中包含大量示例和案例研究,不仅展现了作者的深刻见解,还与产业实践关系密切。
—— Nesime Tatbul,英特尔实验室、麻省理工学院高级研究员
这本与时俱进的教材令我眼前一亮,书中既包含常规的基础知识,也涵盖新的技术热点,如数据建模、关系型数据库、面向对象数据库、XML、分布式数据管理、NoSQL和大数据等。三位作者将这些知识点完美地融合起来,篇章结构合理且可读性强,对于导论课程和高级课程都非常有益。
—— Martin Theobald,卢森堡大学教授
实验素材(包括大学模式和习题中用到的SQL DDL和样例数据,大量实验练习和相关项目示例,以及关于建立与使用各种数据库系统和工具的说明)。
最新勘误表。
---------------------------8075051 - 数据库管理:大数据与小数据的存储、管理及分析实战---------------------------
尽管已经有很多数据库经典教材,但由于技术发展突飞猛进,我们还是需要一本紧跟技术趋势的新教材。本书满足了这一需求,是培养下一代数据管理人才的必选书目。
—— 裴健,西蒙弗雷泽大学教授
本书通过对基本原理和实际部署的讲解,指导读者学会管理大数据和小数据。大量的案例研究、开源软件链接以及一个非常有用的数据分析抽象,将帮助读者更有效地选择解决方案,因此本书对于实践者颇具实用价值。同时,数据库原理是成功和可持续的数据科学的关键,本书对原理的清晰阐述有助于推动这些知识的传播,因此本书对于学术界也非常重要。
—— Sihem Amer-Yahia,法国格勒诺布尔信息实验室主任,VLDB Journal主编
我们正在进入智能机器的技术新时代,数据驱动的算法为这个时代注入了强劲动力,理解数据管理的基本概念及其最新应用变得比以往任何时候都更加重要。如果你有兴趣了解数据库系统、大数据技术和数据科学的新进展,那么本书绝对不容错过。书中包含大量示例和案例研究,不仅展现了作者的深刻见解,还与产业实践关系密切。
—— Nesime Tatbul,英特尔实验室、麻省理工学院高级研究员
这本与时俱进的教材令我眼前一亮,书中既包含常规的基础知识,也涵盖新的技术热点,如数据建模、关系型数据库、面向对象数据库、XML、分布式数据管理、NoSQL和大数据等。三位作者将这些知识点完美地融合起来,篇章结构合理且可读性强,对于导论课程和高级课程都非常有益。
—— Martin Theobald,卢森堡大学教授
系列图书推荐
Python大学教程:面向计算机科学和数据科学
- ¥149.00
- ¥104.30
- Python大学教程:面向计算..
Python编程与数值方法
- ¥109.00
- ¥92.65
- Python编程与数值方法
[套装书]计算机网络:自顶向下方法:原书第8版+现代操作系统(原书第4版)(2册)
- ¥218.00
- ¥148.24
- [套装书]计算机网络:自顶..
[套装书]计算机网络:自顶向下方法:原书第8版+计算机网络:系统方法(原书第6版)(2册)
- ¥298.00
- ¥202.64
- [套装书]计算机网络:自顶..
计算机网络:自顶向下方法 原书第8版
- ¥129.00
- ¥83.00
- 计算机网络:自顶向下方法..
同类热销商品
奇点临近
- ¥69.00
- ¥59.00
- 奇点临近
深入浅出DPDK[图书]
- ¥69.00
- ¥69.00
- 深入浅出DPDK[图书]
数据结构与算法分析——C语言描述(原书第2版)典藏版
- ¥79.00
- ¥55.30
- 数据结构与算法分析——C语..
机器人学基础(第3版)
- ¥59.00
- ¥41.30
- 机器人学基础(第3版)
程序设计实践入门:大学程序设计课程与竞赛训练教材
- ¥69.00
- ¥48.30
- 程序设计实践入门:大学程..