目录出版者的话专家指导委员会译者序前言第一部分 绪论第1章 数据库和事务概述 2
1.1 什么是数据库和事务 2
1.2 现代数据库和事务处理系统的特点 4
1.3 实现和支持数据库与事务处理系统的主要成员 6
1.4 决策支持系统——OLAP和OLTP 7
1.5 练习 8
第2章 进阶 10
2.1 案例研究:学生注册系统 10
2.2 关系数据库概述 10
2.3 怎样使程序成为事务 14
2.5 练习 18
2.4 参考书目 18
第3章 案例研究:开发学生注册系统 20
3.1 软件工程方法学 20
3.2 需求文档 21
3.3 需求分析——新问题 26
3.4 应用程序生成器 27
3.5 图形用户界面和对象 27
3.6 事件和过程 30
3.7 访问数据库和执行事务 32
3.8 详细说明学生注册系统 33
3.9 规格说明文档 34
3.10 参考书目 35
3.11 练习 35
4.1 什么是数据模型 38
第二部分 数据库管理第4章 关系数据模型 38
4.2 关系模型 40
4.2.1 基本概念 41
4.2.2 完整性约束 43
4.3 SQL——数据定义子语言 48
4.3.1 指定关系类型 49
4.3.2 系统目录 49
4.3.3 键约束 50
4.3.4 处理空缺信息 50
4.3.5 语义约束 51
4.3.6 用户自定义域 53
4.3.7 外键约束 54
4.3.8 反应性约束 56
4.3.9 数据库视图 58
4.3.10 修改已有的定义 59
4.3.11 SQL-模式 60
4.3.12 访问控制 60
4.4 参考书目 62
4.5 练习 62
第5章 数据库设计Ⅰ:实体-联系模型 64
5.1 E-R方法的概念建模 64
5.2 实体和实体类型 65
5.3 联系和联系类型 67
5.4 E-R方法的高级特性 71
5.4.1 实体类型层次结构 71
5.4.2 参与约束 74
5.5 一个经纪公司的例子 76
5.6 E-R方法的局限性 79
5.7 案例研究:学生注册系统的设计 82
5.8 参考书目 86
5.9 练习 86
第6章 查询语言Ⅰ:关系代数和SQL 88
6.1 关系代数:在SQL的覆盖之下 88
6.1.1 基本运算符 89
6.1.2 导出运算符 96
6.2 SQL的查询子语言 101
6.2.1 简单的SQL查询 101
6.2.2 集合运算 106
6.2.3 嵌套查询 108
6.2.4 数据的聚合 112
6.2.5 简单查询计算算法 117
6.2.6 再论SQL中的视图 118
6.2.7 空值的窘境 122
6.3 在SQL中修改关系实例 123
6.4 参考书目 127
6.5 练习 127
第7章 查询语言Ⅱ:关系演算和可视化查询语言 131
7.1 元组关系演算 131
7.2 通过元组关系演算理解SQL 138
7.3 域关系演算和可视化查询语言 140
7.4 可视化查询语言:QBE和PC数据库 143
7.5 关系代数和关系演算之间的联系 148
7.6 SQL:1999中的递归查询 150
7.8 练习 155
7.7 参考书目 155
第8章 数据库设计Ⅱ:关系规范化理论 157
8.1 冗余所带来的问题 157
8.2 分解 158
8.3 函数依赖 160
8.4 函数依赖的性质 161
8.5 范式 165
8.6 分解的性质 167
8.6.1 无损分解与有损分解 168
8.6.2 依赖保持分解 170
8.7 分解BCNF的一个算法 173
8.8 3NF模式的合成 175
8.8.1 最小覆盖 175
8.8.2 通过模式合成的3NF分解 177
8.8.3 通过3NF合成的BCNF分解 178
8.9 第四范式 180
8.10 高级4NF设计* 183
8.10.1 MVD和它们的性质 183
8.10.2 设计4NF的困难性 184
8.10.3 如何进行4NF分解 187
8.11 范式分解的总结 188
8.12 案例研究:学生注册系统的模式精化 188
8.13 性能调整问题:是否进行分解 190
8.14 参考书目 191
8.15 练习 192
第9章 触发器和动态数据库 195
9.1 触发器处理的语义 195
9.2 SQL:1999中的触发器 197
9.3 避免链式反应 202
9.4 参考书目 203
9.5 练习 203
第10章 真实世界中的SQL 205
10.1 在应用程序中执行SQL语句 205
10.2 嵌入式SQL 206
10.2.1 状态处理 208
10.2.2 会话、连接和事务 209
10.2.3 执行事务 210
10.2.4 游标 212
10.2.5 服务器存储过程 216
10.3 再论完整性约束 218
10.4 动态SQL 219
10.4.1 动态SQL的语句预备 220
10.4.2 预备语句和描述符区 222
10.4.3 游标 224
10.4.4 服务器端的存储过程 224
10.5 JDBC和SQLJ 225
10.5.1 JDBC的基本概念 225
10.5.2 预处理语句 227
10.5.3 结果集和游标 227
10.5.4 获取结果集的信息 229
10.5.5 状态处理 230
10.5.6 执行事务 230
10.5.8 示例 231
10.5.9 SQLJ:Java的语句级接口 231
10.5.7 服务器端的存储过程 231
10.6 ODBC* 234
10.6.1 预处理语句 235
10.6.2 游标 236
10.6.3 状态处理 238
10.6.4 执行事务 238
10.6.5 服务器端的存储过程 238
10.6.6 示例 239
10.7 比较 240
10.8 参考书目 240
10.9 练习 241
第11章 数据的物理组织和索引 243
11.1 磁盘组织 243
11.2 堆文件 247
11.3 排序文件 249
11.4 索引 251
11.4.1 聚簇索引与非聚簇索引 254
11.4.2 稀疏索引和稠密索引 256
11.4.3 包含多个属性的查找键 257
11.5 多级索引 259
11.5.1 索引顺序访问 261
11.5.2 B+树 263
11.6 散列索引 269
11.6.1 静态散列 269
11.6.2 动态散列算法 271
11.7 特殊用途的索引 277
11.7.1 位图索引 277
11.8 调整问题:为一个应用选择索引 278
11.7.2 联结索引 278
11.9 参考书目 279
11.10 练习 279
第12章 案例研究:实现学生注册系统 282
12.1 设计文档 282
12.1.1 文档结构 283
12.1.2 设计评审 284
12.2 测试计划 285
12.3 项目计划 287
12.4 编程 289
12.5 渐进式开发 290
12.6 学生注册系统的设计和编程 291
12.6.1 完成数据库设计:完整性约束 291
12.6.2 设计注册事务 293
12.6.3 部分注册事务程序 295
12.7 参考书目 297
12.8 练习 297
第13章 查询处理基础 298
13.1 外部排序 298
13.2 计算投影、并和差 301
13.3 计算选择 303
13.3.1 具有简单条件的选择 303
13.3.2 存取路径 304
13.3.3 具有复杂条件的选择 306
13.4 计算联结 307
13.4.1 用嵌套循环来计算联结 307
13.4.2 排序-合并联结 309
13.4.3 散列联结 310
13.5 多关系联结 311
13.6 计算聚合函数 313
13.7 调优问题:对物理数据库设计的影响 313
13.8 参考书目 314
13.9 练习 314
第14章 查询优化概述 316
14.1 查询处理概述 316
14.2 基于代数等价的启发式优化 317
14.3 估计查询执行计划的代价 320
14.4 估计输出的大小 326
14.5 选择计划 327
14.6 调整问题:对查询设计的影响 330
14.7 参考书目 332
14.8 练习 333
第15章 事务处理概述 336
15.1 隔离性 336
15.1.1 可串行化 337
15.1.2 两段锁 338
15.1.3 死锁 340
15.1.4 关系数据库中的锁 341
15.1.5 隔离级别 342
15.1.6 锁粒度和意向锁 344
15.1.7 用意向锁的可串行化封锁策略 345
15.1.8 总结 346
15.2 原子性和持久性 346
15.2.1 先写日志 347
15.2.2 从大规模存储器失效中恢复 348
15.3 实现分布式事务 349
15.3.1 原子性和持久性——两阶段提交协议 350
15.3.2 全局可串行性和死锁 351
15.3.3 复制 352
15.3.4 总结 353
15.4 参考书目 353
15.5 练习 354
第三部分 数据库的高级主题第16章 对象数据库 356
16.1 关系数据模型的缺点 356
16.2 发展历史 361
16.3.1 对象和值 363
16.3 概念上的对象数据模型 363
16.3.2 类 364
16.3.3 类型 365
16.3.4 对象-关系数据库 367
16.4 ODMG标准 367
16.4.1 ODL:ODMG对象定义语言 370
16.4.2 OQL:ODMG对象查询语言 374
16.4.3 ODMG中的事务 377
16.4.4 ODMG中的对象操纵 378
16.4.5 语言绑定 378
16.5 SQL:1999中的对象 382
16.5.1 行类型 382
16.5.2 用户定义类型 383
16.5.3 对象 384
16.5.4 查询用户定义类型 385
16.5.5 更新用户定义类型 385
16.5.6 引用类型 387
16.5.7 集合类型 389
16.6 公共对象请求代理体系结构 389
16.6.1 CORBA基础 390
16.6.2 CORBA和数据库 394
16.7 小结 398
16.8 参考书目 398
16.9 练习 399
第17章 XML和Web数据 401
17.1 半结构化数据 401
17.2 XML概述 403
17.2.1 XML元素和数据库对象 406
17.2.2 XML属性 407
17.2.3 命名空间 409
17.2.4 文档类型定义 412
17.2.5 DTD作为数据定义语言的不足 414
17.3 XMLSchema 415
17.3.1 XMLSchema和命名空间 416
17.3.2 简单类型 418
17.3.3 复杂类型 422
17.3.4 一个完整的Schema文档 428
17.3.5 完整性约束 431
17.4 XML查询语言 436
17.4.1 XPath:一种轻量的XML查询语言 436
17.4.2 XSLT:XML的一种转换语言 442
17.4.3 XQuery:XML的一个功能完善的查询语言 450
17.4.4 小结 464
17.5 参考书目 464
17.6 练习 465
第18章 分布式数据库 469
18.1 应用设计者对数据库的观点 470
18.2 在不同数据库中分布数据 472
18.2.1 分段 472
18.2.2 更新和分段 474
18.2.3 复制 475
18.3 查询策略 476
18.3.1 全局查询优化 476
18.3.3 调整问题:分布式环境下的数据库设计和查询计划 481
18.3.2 多数据库系统的策略 481
18.4 参考书目 482
18.5 练习 482
第19章 OLAP和数据挖掘 484
19.1 OLAP和数据仓库 484
19.2 OLAP应用的多维模型 485
19.3 聚合 488
19.3.1 下钻、上卷、切片和切块 488
19.3.2 CUBE操作符 490
19.4 ROLAP和MOLAP 494
19.5 实现中的一些问题 495
19.6 数据挖掘 495
19.7 数据仓库的数据载入 499
19.9 练习 500
19.8 参考书目 500
第四部分 事务处理第20章 事务的ACID性质 504
20.1 一致性 504
20.2 原子性 506
20.3 持久性 507
20.4 隔离性 508
20.5 事务的ACID性质 510
20.6 参考书目 512
20.7 练习 512
第21章 事务模型 513
21.1 平坦事务 513
21.2 提供事务的结构 514
21.2.1 存储点 514
21.2.2 分布式事务 515
21.2.3 嵌套事务 518
21.2.4 多级事务 520
21.3 把应用分解成多个事务 523
21.3.1 链式事务 523
21.3.2 用可恢复队列调度事务 526
21.3.3 扩展事务 529
21.3.4 工作流和工作流管理系统 531
21.4 参考书目 534
21.5 练习 535
第22章 事务处理系统的体系结构 537
22.1 集中式系统中的事务处理 537
22.1.1 单用户系统的组织 537
22.1.2 集中式多用户系统的组织 538
22.2 分布式系统上的事务处理 539
22.2.1 分布式系统的组织 540
22.2.2 会话和上下文信息 544
22.2.3 队列事务处理 545
22.3 异构系统和TP监控器 546
22.3.1 事务管理器 547
22.3.2 TP监控器 548
22.4 TP监控器:通信和全局原子性 550
22.4.1 远程过程调用 551
22.4.2 对等通信 556
22.4.3 事务中异常情况的处理 558
22.5 因特网上的事务处理 560
22.5.1 一般的体系结构 561
22.5.2 因特网上事务系统的组织 563
22.6 参考书目 564
22.7 练习 564
第23章 隔离性的实现 566
23.1 调度和等价调度 567
23.1.1 串行化 570
23.1.2 冲突等价与观察等价 571
23.1.3 串行图 572
23.2 可恢复性、级联异常中止和严格性 574
23.3 并发控制的模型 576
23.4 立即更新的悲观并发控制策略 577
23.4.1 避免冲突 577
23.4.2 死锁 579
23.5.1 锁集和等待集的实现 580
23.5 立即更新的悲观并发控制的设计 580
23.5.2 两段锁 581
23.5.3 锁的粒度 582
23.6 对象和语义交换* 583
23.7 结构化事务模型中的隔离 587
23.7.1 存储点 587
23.7.2 链式事务 588
23.7.3 可恢复队列 588
23.7.4 嵌套事务 589
23.7.5 多级事务* 589
23.8 其他的并发控制 592
23.8.1 时间戳顺序的并发控制 593
23.8.2 乐观的并发控制 594
23.10 练习 597
23.9 参考书目 597
第24章 关系数据库中的隔离性 601
24.1 加锁 601
24.1.1 幻影 602
24.1.2 谓词加锁 603
24.2 加锁与SQL隔离级别 605
24.2.1 更新丢失、游标稳定性和更新锁 609
24.2.2 案例研究:正确性和非可串行级调度——学生注册系统 612
24.2.3 可串行化、SERIALIZABLE和正态的 617
24.3 粒度加锁:概念锁和索引锁 618
24.3.1 索引锁:无幻影的粒度加锁 619
24.3.2 对象数据库里的粒度加锁* 624
24.4 系统性能的改进 625
24.5 多版本并发控制 626
24.5.1 只读型的多版本并发控制 627
24.5.2 读取一致性的多版本并发控制 628
24.5.3 SNAPSHOT隔离级别 628
24.6 参考书目 633
24.7 练习 633
第25章 原子性和持久性 637
25.1 崩溃、异常中止和介质故障 637
25.2 直接型更新系统和先写型日志 638
25.2.1 性能和先写型登录 641
25.2.2 检测点和恢复 644
25.2.3 逻辑型登录和物理逻辑型登录* 648
25.3 延迟更新系统的恢复 649
25.4 介质故障的恢复 650
25.5 参考书目 653
25.6 练习 653
第26章 分布式事务的实现 655
26.1 ACID特性的实现 655
26.2 原子终止 656
26.2.1 两阶段提交协议 657
26.2.2 两阶段提交协议中故障的处理 661
26.2.3 格式和协议:X/Open标准 664
26.2.4 对等原子提交协议 664
26.3 协调的传递 665
26.3.1 线性提交协议 665
26.4 分布式死锁 666
26.3.2 无准备状态的两阶段提交协议 666
26.5 全局可串行化 667
26.6 不能保证全局原子性的场合 668
26.7 复制数据库 670
26.7.1 同步更新复制系统 672
26.7.2 异步更新复制系统 674
26.8 现实世界里的分布式事务 677
26.9 参考书目 677
26.10 练习 678
第27章 安全性与因特网商务 681
27.1 认证、授权与加密 681
27.2 加密 681
27.3 数字签名 684
27.4 密钥发布与认证 686
27.4.1 Kerberos协议:票据 687
27.4.2 临时串 690
27.5 授权 690
27.6 已认证的远程过程调用 692
27.7 因特网商务 693
27.7.1 SSL协议:证书 693
27.7.2 SET协议:对偶签名 695
27.7.3 货物原子性、托管与已认证交付 698
27.7.4 电子现金:盲签名 700
27.8 参考书目 705
27.9 练习 705
附录附录A 关于系统的问题 708
附录B 参考文献 716