第1章 引言 1
1.1 数据库系统的应用 1
1.2 数据库系统的目标 2
1.3 数据视图 4
1.3.1 数据抽象 4
1.3.2 实例和模式 5
1.3.3 数据模型 5
1.4 数据库语言 6
1.4.1 数据操纵语言 6
1.4.2 数据定义语言 6
1.5 关系数据库 7
1.5.1 表 7
1.5.2 数据操纵语言 8
1.5.3 数据定义语言 8
1.5.4 来自应用程序的数据库访问 8
1.6 数据库设计 9
1.6.1 设计过程 9
1.6.2 大学机构的数据库设计 9
1.6.3 实体-联系模型 10
1.6.4 规范化 11
1.7 数据存储和查询 11
1.7.1 存储管理器 12
1.7.2 查询处理器 12
1.8 事务管理 12
1.9 数据库体系结构 13
1.10 数据挖掘与信息检索 15
1.11 特种数据库 15
1.11.1 基于对象的数据模型 15
1.11.2 半结构化数据模型 16
1.12 数据库用户和管理员 16
1.12.1 数据库用户和用户界面 16
1.12.2 数据库管理员 16
1.13 数据库系统的历史 17
1.14 总结 18
术语回顾 19
实践习题 19
习题 19
工具 20
文献注解 20
第一部分 关系数据库 22
第2章 关系模型介绍 22
2.1 关系数据库的结构 22
2.2 数据库模式 23
2.3 码 24
2.4 模式图 25
2.5 关系查询语言 26
2.6 关系运算 27
2.7 总结 28
术语回顾 29
实践习题 29
习题 30
文献注解 30
第3章 SQL 31
3.1 SQL查询语言概览 31
3.2 SQL数据定义 32
3.2.1 基本类型 32
3.2.2 基本模式定义 32
3.3 SQL查询的基本结构 34
3.3.1 单关系查询 34
3.3.2 多关系查询 35
3.3.3 自然连接 38
3.4 附加的基本运算 40
3.4.1 更名运算 40
3.4.2 字符串运算 41
3.4.3 select子句中的属性说明 42
3.4.4 排列元组的显示次序 42
3.4.5 where子句谓词 42
3.5 集合运算 43
3.5.1 并运算 43
3.5.2 交运算 44
3.5.3 差运算 44
3.6 空值 45
3.7 聚集函数 46
3.7.1 基本聚集 46
3.7.2 分组聚集 46
3.7.3 having子句 47
3.7.4 对空值和布尔值的聚集 48
3.8 嵌套子查询 48
3.8.1 集合成员资格 49
3.8.2 集合的比较 49
3.8.3 空关系测试 50
3.8.4 重复元组存在性测试 51
3.8.5 from子句中的子查询 52
3.8.6 with子句 53
3.8.7 标量子查询 53
3.9 数据库的修改 54
3.9.1 删除 54
3.9.2 插入 55
3.9.3 更新 56
3.10 总结 57
术语回顾 58
实践习题 58
习题 60
工具 61
文献注解 62
第4章 中级SQL 63
4.1 连接表达式 63
4.1.1 连接条件 63
4.1.2 外连接 64
4.1.3 连接类型和条件 67
4.2 视图 67
4.2.1 视图定义 68
4.2.2 SQL查询中使用视图 68
4.2.3 物化视图 69
4.2.4 视图更新 69
4.3 事务 71
4.4 完整性约束 71
4.4.1 单个关系上的约束 72
4.4.2 not null约束 72
4.4.3 unique约束 72
4.4.4 check子句 72
4.4.5 参照完整性 73
4.4.6 事务中对完整性约束的违反 75
4.4.7 复杂check条件与断言 75
4.5 SQL的数据类型与模式 76
4.5.1 SQL中的日期和时间类型 76
4.5.2 默认值 77
4.5.3 创建索引 77
4.5.4 大对象类型 77
4.5.5 用户定义的类型 78
4.5.6 create table的扩展 79
4.5.7 模式、目录与环境 80
4.6 授权 80
4.6.1 权限的授予与收回 81
4.6.2 角色 82
4.6.3 视图的授权 82
4.6.4 模式的授权 83
4.6.5 权限的转移 83
4.6.6 权限的收回 84
4.7 总结 85
术语回顾 85
实践习题 85
习题 87
文献注解 87
第5章 高级SQL 88
5.1 使用程序设计语言访问数据库 88
5.1.1 JDBC 89
5.1.2 ODBC 93
5.1.3 嵌入式SQL 95
5.2 函数和过程 97
5.2.1 声明和调用SQL函数和过程 98
5.2.2 支持过程和函数的语言构造 99
5.2.3 外部语言过程 101
5.3 触发器 102
5.3.1 对触发器的需求 102
5.3.2 SQL中的触发器 102
5.3.3 何时不用触发器 105
5.4 递归查询 106
5.4.1 用迭代来计算传递闭包 106
5.4.2 SQL中的递归 107
5.5 高级聚集特性 109
5.5.1 排名 109
5.5.2 分窗 110
5.6 OLAP 112
5.6.1 联机分析处理 112
5.6.2 交叉表与关系表 114
5.6.3 SQL中的OLAP 116
5.7 总结 118
术语回顾 118
实践习题 119
习题 120
工具 121
文献注解 122
第6章 形式化关系查询语言 123
6.1 关系代数 123
6.1.1 基本运算 123
6.1.2 关系代数的形式化定义 128
6.1.3 附加的关系代数运算 129
6.1.4 扩展的关系代数运算 132
6.2 元组关系演算 135
6.2.1 查询示例 135
6.2.2 形式化定义 137
6.2.3 表达式的安全性 137
6.2.4 语言的表达能力 138
6.3 域关系演算 138
6.3.1 形式化定义 138
6.3.2 查询的例子 138
6.3.3 表达式的安全性 139
6.3.4 语言的表达能力 140
6.4 总结 140
术语回顾 140
实践习题 140
习题 142
文献注解 143
第二部分 数据库设计 146
第7章 数据库设计和E-R模型 146
7.1 设计过程概览 146
7.1.1 设计阶段 146
7.1.2 设计选择 147
7.2 实体-联系模型 148
7.2.1 实体集 148
7.2.2 联系集 148
7.2.3 属性 150
7.3 约束 151
7.3.1 映射基数 152
7.3.2 参与约束 152
7.3.3 码 153
7.4 从实体集中删除冗余属性 153
7.5 实体-联系图 155
7.5.1 基本结构 155
7.5.2 映射基数 156
7.5.3 复杂的属性 156
7.5.4 角色 157
7.5.5 非二元的联系集 157
7.5.6 弱实体集 157
7.5.7 大学的E-R图 159
7.6 转换为关系模式 159
7.6.1 具有简单属性的强实体集的表示 160
7.6.2 具有复杂属性的强实体集的表示 160
7.6.3 弱实体集的表示 161
7.6.4 联系集的表示 161
7.7 实体-联系设计问题 163
7.7.1 用实体集还是用属性 163
7.7.2 用实体集还是用联系集 164
7.7.3 二元还是n元联系集 165
7.7.4 联系属性的布局 165
7.8 扩展的E-R特性 166
7.8.1 特化 166
7.8.2 概化 167
7.8.3 属性继承 168
7.8.4 概化上的约束 168
7.8.5 聚集 169
7.8.6 转换为关系模式 170
7.9 数据建模的其他表示法 171
7.9.1 E-R图的其他表示法 171
7.9.2 统一建模语言UML 173
7.10 数据库设计的其他方面 174
7.10.1 数据约束和关系数据库设计 174
7.10.2 使用需求:查询、性能 175
7.10.3 授权需求 175
7.10.4 数据流、工作流 175
7.10.5 数据库设计的其他问题 176
7.11 总结 176
术语回顾 177
实践习题 177
习题 179
工具 180
文献注解 180
第8章 关系数据库设计 181
8.1 好的关系设计的特点 181
8.1.1 设计选择:更大的模式 181
8.1.2 设计选择:更小的模式 182
8.2 原子域和第一范式 183
8.3 使用函数依赖进行分解 184
8.3.1 码和函数依赖 185
8.3.2 Boyce-Codd范式 186
8.3.3 BCNF和保持依赖 187
8.3.4 第三范式 188
8.3.5 更高的范式 189
8.4 函数依赖理论 189
8.4.1 函数依赖集的闭包 189
8.4.2 属性集的闭包 191
8.4.3 正则覆盖 191
8.4.4 无损分解 193
8.4.5 保持依赖 194
8.5 分解算法 195
8.5.1 BCNF分解 195
8.5.2 3NF分解 197
8.5.3 3NF算法的正确性 198
8.5.4 BCNF和3NF的比较 198
8.6 使用多值依赖的分解 199
8.6.1 多值依赖 199
8.6.2 第四范式 201
8.6.3 4NF分解 201
8.7 更多的范式 202
8.8 数据库设计过程 202
8.8.1 E-R模型和规范化 202
8.8.2 属性和联系的命名 203
8.8.3 为了性能去规范化 203
8.8.4 其他设计问题 204
8.9 时态数据建模 204
8.10 总结 206
术语回顾 206
实践习题 206
习题 208
文献注解 209
第9章 应用设计和开发 210
9.1 应用程序和用户界面 210
9.2 Web基础 211
9.2.1 统一资源定位符 211
9.2.2 超文本标记语言 211
9.2.3 Web服务器和会话 213
9.3 servlet和JSP 214
9.3.1 一个servlet的例子 215
9.3.2 servlet会话 216
9.3.3 servlet的生命周期 216
9.3.4 servlet支持 216
9.3.5 服务器端脚本 217
9.3.6 客户端脚本 218
9.4 应用架构 219
9.4.1 业务逻辑层 220
9.4.2 数据访问层和对象-关系映射 220
9.4.3 Web服务 222
9.4.4 断连操作 222
9.5 快速应用开发 222
9.5.1 构建用户界面的工具 223
9.5.2 Web应用框架 224
9.5.3 报表生成器 224
9.6 应用程序性能 225
9.6.1 利用缓存减少开销 225
9.6.2 并行处理 226
9.7 应用程序安全性 226
9.7.1 SQL注入 226
9.7.2 跨站点脚本和请求伪造 227
9.7.3 密码泄露 227
9.7.4 应用程序认证 228
9.7.5 应用级授权 229
9.7.6 审计追踪 230
9.7.7 隐私 230
9.8 加密及其应用 231
9.8.1 加密技术 231
9.8.2 数据库中的加密支持 233
9.8.3 加密和认证 233
9.9 总结 234
术语回顾 235
实践习题 235
习题 236
项目建议 237
工具 239
文献注解 239
第三部分 数据存储和查询 242
第10章 存储和文件结构 242
10.1 物理存储介质概述 242
10.2 磁盘和快闪存储器 244
10.2.1 磁盘的物理特性 244
10.2.2 磁盘性能的度量 245
10.2.3 磁盘块访问的优化 246
10.2.4 快闪存储 248
10.3 RAID 249
10.3.1 通过冗余提高可靠性 249
10.3.2 通过并行提高性能 250
10.3.3 RAID级别 250
10.3.4 RAID级别的选择 253
10.3.5 硬件问题 253
10.3.6 其他的RAID应用 254
10.4 第三级存储 254
10.4.1 光盘 254
10.4.2 磁带 255
10.5 文件组织 255
10.5.1 定长记录 256
10.5.2 变长记录 257
10.6 文件中记录的组织 259
10.6.1 顺序文件组织 259
10.6.2 多表聚簇文件组织 260
10.7 数据字典存储 261
10.8 数据库缓冲区 262
10.8.1 缓冲区管理器 262
10.8.2 缓冲区替换策略 263
10.9 总结 264
术语回顾 265
实践习题 265
习题 266
文献注解 267
第11章 索引与散列 268
11.1 基本概念 268
11.2 顺序索引 269
11.2.1 稠密索引和稀疏索引 269
11.2.2 多级索引 270
11.2.3 索引的更新 272
11.2.4 辅助索引 272
11.2.5 多码上的索引 273
11.3 B+树索引文件 274
11.3.1 B+树的结构 274
11.3.2 B+树的查询 275
11.3.3 B+树的更新 277
11.3.4 不唯一的搜索码 281
11.3.5 B+树更新的复杂性 282
11.4 B+树扩展 283
11.4.1 B+树文件组织 283
11.4.2 辅助索引和记录重定位 284
11.4.3 字符串上的索引 284
11.4.4 B+树索引的批量加载 285
11.4.5 B树索引文件 285
11.4.6 闪存 287
11.5 多码访问 287
11.5.1 使用多个单码索引 287
11.5.2 多码索引 287
11.5.3 覆盖索引 288
11.6 静态散列 288
11.6.1 散列函数 289
11.6.2 桶溢出处理 290
11.6.3 散列索引 291
11.7 动态散列 292
11.7.1 数据结构 292
11.7.2 查询和更新 293
11.7.3 静态散列与动态散列比较 297
11.8 顺序索引和散列的比较 297
11.9 位图索引 298
11.9.1 位图索引结构 298
11.9.2 位图操作的高效实现 299
11.9.3 位图和B+树 300
11.10 SQL中的索引定义 300
11.11 总结 300
术语回顾 301
实践习题 302
习题 303
文献注解 304
第12章 查询处理 305
12.1 概述 305
12.2 查询代价的度量 306
12.3 选择运算 307
12.3.1 使用文件扫描和索引的选择 307
12.3.2 涉及比较的选择 309
12.3.3 复杂选择的实现 309
12.4 排序 310
12.4.1 外部排序归并算法 310
12.4.2 外部排序归并的代价分析 311
12.5 连接运算 312
12.5.1 嵌套循环连接 312
12.5.2 块嵌套循环连接 313
12.5.3 索引嵌套循环连接 314
12.5.4 归并连接 314
12.5.5 散列连接 317
12.6 其他运算 320
12.6.1 去除重复 320
12.6.2 投影 320
12.6.3 集合运算 320
12.6.4 外连接 321
12.6.5 聚集 322
12.7 表达式计算 322
12.7.1 物化 322
12.7.2 流水线 323
12.8 总结 325
术语回顾 326
实践习题 326
习题 327
文献注解 328
第13章 查询优化 329
13.1 概述 329
13.2 关系表达式的转换 330
13.2.1 等价规则 331
13.2.2 转换的例子 333
13.2.3 连接的次序 334
13.2.4 等价表达式的枚举 335
13.3 表达式结果集统计大小的估计 335
13.3.1 目录信息 335
13.3.2 选择运算结果大小的估计 336
13.3.3 连接运算结果大小的估计 338
13.3.4 其他运算的结果集大小的估计 339
13.3.5 不同取值个数的估计 339
13.4 执行计划选择 340
13.4.1 基于代价的连接顺序选择 340
13.4.2 采用等价规则的基于代价的优化器 342
13.4.3 启发式优化 342
13.4.4 嵌套子查询的优化 344
13.5 物化视图 345
13.5.1 视图维护 346
13.5.2 增量的视图维护 346
13.5.3 查询优化和物化视图 348
13.5.4 物化视图和索引选择 348
13.6 查询优化中的高级话题 348
13.6.1 top-K优化 348
13.6.2 连接极小化 349
13.6.3 更新的优化 349
13.6.4 多查询优化和共享式扫描 349
13.6.5 参数化查询优化 350
13.7 总结 350
术语回顾 351
实践习题 351
习题 353
文献注解 353
第四部分 事务管理 356
第14章 事务 356
14.1 事务概念 356
14.2 一个简单的事务模型 357
14.3 存储结构 358
14.4 事务原子性和持久性 359
14.5 事务隔离性 360
14.6 可串行化 363
14.7 事务隔离性和原子性 366
14.7.1 可恢复调度 366
14.7.2 无级联调度 366
14.8 事务隔离性级别 366
14.9 隔离性级别的实现 368
14.9.1 锁 368
14.9.2 时间戳 368
14.9.3 多版本和快照隔离 368
14.10 事务的SQL语句表示 369
14.11 总结 370
术语回顾 371
实践习题 371
习题 372
文献注解 372
第15章 并发控制 373
15.1 基于锁的协议 373
15.1.1 锁 373
15.1.2 锁的授予 375
15.1.3 两阶段封锁协议 376
15.1.4 封锁的实现 377
15.1.5 基于图的协议 378
15.2 死锁处理 379
15.2.1 死锁预防 379
15.2.2 死锁检测与恢复 380
15.3 多粒度 381
15.4 基于时间戳的协议 383
15.4.1 时间戳 383
15.4.2 时间戳排序协议 384
15.4.3 Thomas写规则 385
15.5 基于有效性检查的协议 386
15.6 多版本机制 387
15.6.1 多版本时间戳排序 387
15.6.2 多版本两阶段封锁 388
15.7 快照隔离 388
15.7.1 更新事务的有效性检验步骤 389
15.7.2 串行化问题 389
15.8 插入操作、删除操作与谓词读 391
15.8.1 删除 391
15.8.2 插入 392
15.8.3 谓词读和幻象现象 392
15.9 实践中的弱一致性级别 394
15.9.1 二级一致性 394
15.9.2 游标稳定性 394
15.9.3 跨越用户交互的并发控制 394
15.10 索引结构中的并发 395
15.11 总结 397
术语回顾 399
实践习题 399
习题 401
文献注解 402
第16章 恢复系统 403
16.1 故障分类 403
16.2 存储器 403
16.2.1 稳定存储器的实现 404
16.2.2 数据访问 404
16.3 恢复与原子性 405
16.3.1 日志记录 406
16.3.2 数据库修改 407
16.3.3 并发控制和恢复 407
16.3.4 事务提交 408
16.3.5 使用日志来重做和撤销事务 408
16.3.6 检查点 410
16.4 恢复算法 411
16.4.1 事务回滚 411
16.4.2 系统崩溃后的恢复 411
16.5 缓冲区管理 412
16.5.1 日志记录缓冲 412
16.5.2 数据库缓冲 413
16.5.3 操作系统在缓冲区管理中的作用 414
16.5.4 模糊检查点 414
16.6 非易失性存储器数据丢失的故障 415
16.7 锁的提前释放和逻辑undo操作 415
16.7.1 逻辑操作 416
16.7.2 逻辑undo日志记录 416
16.7.3 有逻辑undo的事务回滚 417
16.7.4 逻辑undo中的并发问题 419
16.8 ARIES 419
16.8.1 数据结构 419
16.8.2 恢复算法 421
16.8.3 其他特性 422
16.9 远程备份系统 423
16.10 总结 424
术语回顾 425
实践习题 426
习题 427
文献注解 428
第五部分 系统体系结构 430
第17章 数据库系统体系结构 430
17.1 集中式与客户-服务器体系结构 430
17.1.1 集中式系统 430
17.1.2 客户-服务器系统 431
17.2 服务器系统体系结构 432
17.2.1 事务服务器 432
17.2.2 数据服务器 434
17.2.3 基于云的服务器 435
17.3 并行系统 435
17.3.1 加速比和扩展比 435
17.3.2 互连网络 437
17.3.3 并行数据库体系结构 437
17.4 分布式系统 439
17.4.1 分布式数据库示例 440
17.4.2 实现问题 441
17.5 网络类型 442
17.5.1 局域网 442
17.5.2 广域网 443
17.6 总结 443
术语回顾 444
实践习题 444
习题 445
文献注解 445
第18章 并行数据库 447
18.1 引言 447
18.2 I/O并行 447
18.2.1 划分技术 447
18.2.2 划分技术比较 448
18.2.3 偏斜处理 449
18.3 查询间并行 450
18.4 查询内并行 450
18.5 操作内并行 451
18.5.1 并行排序 451
18.5.2 并行连接 452
18.5.3 其他关系运算 455
18.5.4 运算的并行计算代价 455
18.6 操作间并行 456
18.6.1 流水线并行 456
18.6.2 独立并行 456
18.7 查询优化 456
18.8 并行系统设计 457
18.9 多核处理器的并行性 458
18.9.1 并行性与原始速度 458
18.9.2 高速缓冲存储器和多线程 458
18.9.3 适应现代体系架构的数据库系统设计 459
18.10 总结 459
术语回顾 460
实践习题 460
习题 461
文献注解 462
第19章 分布式数据库 463
19.1 同构和异构数据库 463
19.2 分布式数据存储 463
19.2.1 数据复制 464
19.2.2 数据分片 464
19.2.3 透明性 465
19.3 分布式事务 465
19.3.1 系统结构 466
19.3.2 系统故障模式 466
19.4 提交协议 467
19.4.1 两阶段提交 467
19.4.2 三阶段提交 469
19.4.3 事务处理的可选择性模型 469
19.5 分布式数据库中的并发控制 471
19.5.1 封锁协议 471
19.5.2 时间戳 473
19.5.3 弱一致性级别的复制 473
19.5.4 死锁处理 474
19.6 可用性 475
19.6.1 基于多数的方法 476
19.6.2 读一个、写所有可用的方法 477
19.6.3 站点重建 477
19.6.4 与远程备份的比较 477
19.6.5 协调器的选择 477
19.6.6 为可用性而牺牲一致性 478
19.7 分布式查询处理 479
19.7.1 查询转换 479
19.7.2 简单的连接处理 480
19.7.3 半连接策略 480
19.7.4 利用并行性的连接策略 481
19.8 异构分布式数据库 481
19.8.1 数据统一视图 481
19.8.2 查询处理 482
19.8.3 多数据库中的事务管理 482
19.9 基于云的数据库 483
19.9.1 云上的数据存储系统 484
19.9.2 云上的传统数据库 487
19.9.3 基于云的数据库的挑战 488
19.10 目录系统 488
19.10.1 目录访问协议 489
19.10.2 LDAP:轻量级目录访问协议 489
19.11 总结 492
术语回顾 493
实践习题 493
习题 495
文献注解 495
第六部分 数据仓库、数据挖掘与信息检索 498
第20章 数据仓库与数据挖掘 498
20.1 决策支持系统 498
20.2 数据仓库 499
20.2.1 数据仓库成分 499
20.2.2 数据仓库模式 500
20.2.3 面向列的存储 501
20.3 数据挖掘 501
20.4 分类 502
20.4.1 决策树分类器 503
20.4.2 其他类型的分类器 505
20.4.3 回归 507
20.4.4 分类器验证 507
20.5 关联规则 508
20.6 其他类型的关联 509
20.7 聚类 509
20.8 其他类型的数据挖掘 510
20.9 总结 511
术语回顾 511
实践习题 512
习题 512
工具 512
文献注解 513
第21章 信息检索 514
21.1 概述 514
21.2 使用术语的相关性排名 515
21.2.1 使用TF-IDF的排名方法 515
21.2.2 基于相似性的检索 516
21.3 使用超链接的相关性 517
21.3.1 流行度排名 517
21.3.2 PageRank 518
21.3.3 其他的流行度度量 518
21.3.4 搜索引擎作弊 519
21.3.5 将TF-IDF和流行度排名度量方法结合 520
21.4 同义词、多义词和本体 520
21.5 文档的索引 521
21.6 检索的有效性度量 522
21.7 Web的抓取和索引 523
21.8 信息检索:网页排名之外 524
21.8.1 查询结果的多样化 524
21.8.2 信息抽取 524
21.8.3 问答系统 525
21.8.4 查询结构化数据 525
21.9 目录与分类 526
21.10 总结 527
术语回顾 528
实践习题 528
习题 528
工具 529
文献注解 529
第七部分 特种数据库 532
第22章 基于对象的数据库 532
22.1 概述 532
22.2 复杂数据类型 532
22.3 SQL中的结构类型和继承 534
22.3.1 结构类型 534
22.3.2 类型继承 536
22.4 表继承 537
22.5 SQL中的数组和多重集合类型 538
22.5.1 创建和访问集合体值 539
22.5.2 查询以集合体为值的属性 539
22.5.3 嵌套和解除嵌套 540
22.6 SQL中的对象标识和引用类型 541
22.7 O-R特性的实现 542
22.8 持久化程序设计语言 543
22.8.1 对象的持久化 544
22.8.2 对象标识和指针 544
22.8.3 持久对象的存储和访问 545
22.8.4 持久化C++系统 545
22.8.5 持久化Java系统 547
22.9 对象-关系映射 548
22.10 面向对象与对象-关系 548
22.11 总结 549
术语回顾 549
实践习题 550
习题 551
工具 551
文献注解 552
第23章 XML 553
23.1 动机 553
23.2 XML数据结构 555
23.3 XML文档模式 558
23.3.1 文档类型定义 558
23.3.2 XML Schema 560
23.4 查询和转换 563
23.4.1 XML树模型 563
23.4.2 XPath 563
23.4.3 XQuery 565
23.5 XML应用程序接口 568
23.6 XML数据存储 569
23.6.1 非关系的数据存储 569
23.6.2 关系数据库 570
23.6.3 SQL/XML 572
23.7 XML应用 573
23.7.1 存储复杂结构数据 573
23.7.2 标准化数据交换格式 573
23.7.3 Web服务 574
23.7.4 数据中介 574
23.8 总结 575
术语回顾 576
实践习题 576
习题 577
工具 578
文献注解 578
第八部分 高级主题 580
第24章 高级应用开发 580
24.1 性能调整 580
24.1.1 提高面向集合的特性 580
24.1.2 批量加载和更新的调整 581
24.1.3 瓶颈位置 582
24.1.4 可调参数 583
24.1.5 硬件调整 584
24.1.6 模式调整 585
24.1.7 索引调整 585
24.1.8 使用物化视图 586
24.1.9 物理设计的自动调整 586
24.1.10 并发事务调整 587
24.1.11 性能模拟 589
24.2 性能基准程序 589
24.2.1 任务集 589
24.2.2 数据库应用类型 589
24.2.3 TPC基准程序 590
24.3 应用系统开发的其他问题 591
24.3.1 应用系统测试 591
24.3.2 应用系统移植 592
24.4 标准化 592
24.4.1 SQL标准 593
24.4.2 数据库连接标准 593
24.4.3 对象数据库标准 594
24.4.4 基于XML的标准 594
24.5 总结 595
术语回顾 595
实践习题 596
习题 596
文献注解 597
第25章 时空数据和移动性 598
25.1 动机 598
25.2 数据库中的时间 598
25.2.1 SQL中的时间规范 599
25.2.2 时态查询语言 599
25.3 空间与地理数据 600
25.3.1 几何信息表示 600
25.3.2 设计数据库 601
25.3.3 地理数据 602
25.3.4 空间查询 603
25.3.5 空间数据的索引 604
25.4 多媒体数据库 607
25.4.1 多媒体数据格式 607
25.4.2 连续媒体数据 607
25.4.3 基于相似性的检索 608
25.5 移动性和个人数据库 608
25.5.1 移动计算模型 609
25.5.2 路由和查询处理 610
25.5.3 广播数据 610
25.5.4 连接断开与一致性 610
25.6 总结 612
术语回顾 612
实践习题 613
习题 613
文献注解 613
第26章 高级事务处理 615
26.1 事务处理监控器 615
26.1.1 TP监控器体系结构 615
26.1.2 使用TP监控器进行应用协调 617
26.2 事务工作流 618
26.2.1 工作流说明 619
26.2.2 工作流的故障原子性需求 620
26.2.3 工作流执行 620
26.2.4 工作流恢复 621
26.2.5 工作流管理系统 621
26.3 电子商务 622
26.3.1 电子目录 622
26.3.2 市场 622
26.3.3 订单结算 623
26.4 主存数据库 623
26.5 实时事务系统 625
26.6 长事务 625
26.6.1 不可串行化的执行 626
26.6.2 并发控制 627
26.6.3 嵌套事务和多级事务 627
26.6.4 补偿事务 628
26.6.5 实现问题 628
26.7 总结 629
术语回顾 629
实践习题 630
习题 630
文献注解 631
第九部分 实例研究 634
第27章 PostgreSQL 634
27.1 概述 634
27.2 用户界面 634
27.2.1 交互式终端界面 634
27.2.2 图形界面 635
27.2.3 编程语言接口 636
27.3 SQL变化和扩展 636
27.3.1 PostgreSQL类型 637
27.3.2 规则和其他主动数据库特征 638
27.3.3 可扩展性 639
27.4 PostgreSQL中的事务管理 642
27.4.1 PostgreSQL的并发控制 642
27.4.2 恢复 647
27.5 存储和索引 647
27.5.1 表 648
27.5.2 索引 648
27.6 查询处理和优化 650
27.6.1 查询重写 650
27.6.2 查询规划和优化 650
27.6.3 查询执行器 651
27.6.4 触发器和约束 651
27.7 系统结构 652
文献注解 652
第28章 Oracle 654
28.1 数据库设计和查询工具 654
28.1.1 数据库和应用设计工具 654
28.1.2 查询工具 654
28.2 SQL的变化和扩展 655
28.2.1 对象-关系特性 655
28.2.2 Oracle XML DB 655
28.2.3 过程化语言 656
28.2.4 维度 656
28.2.5 联机分析处理 656
28.2.6 触发器 656
28.3 存储和索引 656
28.3.1 表空间 657
28.3.2 段 657
28.3.3 表 657
28.3.4 索引 659
28.3.5 位图索引 659
28.3.6 基于函数的索引 660
28.3.7 连接索引 660
28.3.8 域索引 660
28.3.9 划分 660
28.3.10 物化视图 661
28.4 查询处理和优化 662
28.4.1 执行方法 662
28.4.2 优化 663
28.4.3 并行执行 665
28.4.4 结果高速缓存 666
28.5 并发控制与恢复 666
28.5.1 并发控制 666
28.5.2 恢复的基本结构 667
28.5.3 Oracle数据卫士 668
28.6 系统体系结构 668
28.6.1 专用服务器:内存结构 668
28.6.2 专用服务器:进程结构 669
28.6.3 共享服务器 669
28.6.4 Oracle Real Application Clusters 669
28.6.5 自动存储管理器 670
28.6.6 Oracle Exadata 670
28.7 复制、分布以及外部数据 671
28.7.1 复制 671
28.7.2 分布式数据库 671
28.7.3 外部数据源 671
28.8 数据库管理工具 672
28.8.1 Oracle企业管理器 672
28.8.2 自动工作负载存储 672
28.8.3 数据库资源管理 672
28.9 数据挖掘 672
文献注解 673
第29章 IBM DB2 Universal Database 674
29.1 概述 674
29.2 数据库设计工具 675
29.3 SQL的变化和扩展 675
29.3.1 XML特性 675
29.3.2 数据类型的支持 676
29.3.3 用户自定义函数和方法 676
29.3.4 大对象 677
29.3.5 索引扩展和约束 677
29.3.6 Web服务 677
29.3.7 其他特性 678
29.4 存储和索引 678
29.4.1 存储体系结构 678
29.4.2 缓冲池 679
29.4.3 表、记录和索引 679
29.5 多维聚簇 680
29.5.1 块索引 681
29.5.2 块映射 682
29.5.3 设计考虑 682
29.5.4 对现有技术的影响 682
29.6 查询处理和优化 682
29.6.1 存取方法 684
29.6.2 连接、聚集和集合运算 684
29.6.3 对复杂SQL处理的支持 684
29.6.4 多处理器查询处理特性 684
29.6.5 查询优化 685
29.7 物化的查询表 685
29.7.1 查询路由到MQT 686
29.7.2 MQT的维护 686
29.8 DB2中的自治特性 686
29.8.1 配置 687
29.8.2 优化 687
29.9 工具和实用程序 687
29.10 并发控制和恢复 688
29.10.1 并发与隔离 688
29.10.2 提交与回滚 689
29.10.3 日志与恢复 689
29.11 系统体系结构 690
29.12 复制、分布和外部数据 691
29.13 商务智能特性 691
文献注解 692
第30章 Microsoft SQL Server 693
30.1 管理、设计和查询工具 693
30.1.1 数据库开发和可视化数据库工具 693
30.1.2 数据库查询和调优工具 693
30.1.3 SQL Server Management Studio 695
30.2 SQL变化和扩展 696
30.2.1 数据类型 696
30.2.2 查询语言增强 697
30.2.3 例程 697
30.2.4 带过滤的索引 698
30.3 存储和索引 699
30.3.1 文件组 699
30.3.2 文件组内的空间管理 699
30.3.3 表 699
30.3.4 索引 699
30.3.5 分区 700
30.3.6 在线创建索引 700
30.3.7 扫描和预读 700
30.3.8 压缩 700
30.4 查询处理和优化 700
30.4.1 编译处理概述 700
30.4.2 查询简化 701
30.4.3 重排序和基于代价的优化 701
30.4.4 更新计划 702
30.4.5 优化时的数据分析 702
30.4.6 部分搜索和启发式搜索 702
30.4.7 查询执行 703
30.5 并发与恢复 703
30.5.1 事务 703
30.5.2 封锁 704
30.5.3 恢复和可用性 705
30.6 系统体系结构 706
30.6.1 服务器上的线程池 706
30.6.2 内存管理 706
30.6.3 安全性 707
30.7 数据访问 707
30.8 分布式异构查询处理 708
30.9 复制 709
30.9.1 复制模型 709
30.9.2 复制选项 709
30.10 .NET中的服务器编程 710
30.10.1 .NET基本概念 710
30.10.2 SQL CLR宿主 711
30.10.3 可扩展性协定 711
30.11 XML支持 712
30.11.1 本地存储和组织XML 713
30.11.2 查询和更新XML数据类型 713
30.11.3 XQuery表达式的执行 714
30.12 SQL Server服务代理 714
30.13 商务智能 716
30.13.1 SQL Server集成服务 716
30.13.2 SQL Server分析服务 717
30.13.3 SQL Server报表服务 718
文献注解 718
第十部分 附录 722
附录A 详细的大学模式 722
参考文献 729
索引 754