目录 1
译者序 1
第1章 数据库系统简介 3
第一部分 基本原理 3
前言 3
1.2 历史回顾 4
1.1 概述 4
1.4 数据库管理系统的优点 6
1.3 文件系统和数据库管理系统 6
1.5 数据库管理系统中数据的描述和存储 7
1.5.1 关系模型 8
1.5.2 数据库管理系统的抽象级别 9
1.5.3 数据独立性 10
1.7 事务管理 11
1.6 数据库管理系统中的查询 11
1.7.2 未完成的事务和系统崩溃 12
1.7.1 事务的并发执行 12
1.8 数据库管理系统的结构 13
1.7.3 要点 13
1.9 与数据库打交道的人 14
1.10 复习要点 15
练习 16
文献注解 17
项目练习 17
2.1 数据库设计纵览 18
第2章 实体—联系模型 18
2.1.1 其他步骤 19
2.3 联系和联系集 20
2.2 实体、属性和实体集 20
2.4.1 码约束 22
2.4 ER模型的其他特征 22
2.4.3 弱实体 24
2.4.2 参与约束 24
2.4.4 类层次 26
2.4.5 聚合 27
2.5.1 实体与属性 28
2.5 用ER模型进行概念数据库设计 28
2.5.2 实体与联系 29
2.5.3 二元与三元联系 30
2.5.4 聚合与三元联系 31
2.7 复习要点 32
2.6 大型企业的概念数据库设计 32
练习 33
文献注解 36
第3章 关系模型 37
3.1 关系模型简介 38
3.1.1 使用SQL-92创建和修改关系 40
3.2 关系上的完整性约束 41
3.2.1 码约束 42
3.2.2 外码约束 43
3.2.3 一般约束 44
3.3 完整性约束的强制执行 45
3.4 查询关系数据 47
3.5.1 从实体集合到关系表 49
3.5 逻辑数据库设计:从ER模型到关系模型 49
3.5.2 从联系集(不包括约束)到关系表 50
3.5.3 转换带有码约束的联系集 51
3.5.4 转换带有参与约束的联系集 52
3.5.6 转换类层次 54
3.5.5 转换弱实体集合 54
3.5.7 转换带聚合的ER图 55
3.5.8 ER模型到关系模型:更多的例子 56
3.6 视图简介 57
3.6.2 视图的更新 58
3.6.1 视图、数据独立性和安全 58
3.8 复习要点 61
3.7 删除/修改关系表和视图 61
练习 62
项目练习 63
文献注解 64
4.1 预备知识 67
第4章 关系代数和演算 67
第二部分 关系查询 67
4.2.1 选择和投影 68
4.2 关系代数 68
4.2.2 集合操作 69
4.2.4 连接 71
4.2.3 改名 71
4.2.5 除 73
4.2.6 关系代数查询的其他实例 74
4.3 关系演算 78
4.3.1 元组关系演算 79
4.3.2 域关系演算 82
4.4 代数与演算的表达能力 84
4.5 复习要点 85
练习 86
文献注解 88
第5章 SQL:查询、编程与触发程序 89
5.2 基本SQL查询的形式 91
5.1 用例说明 91
5.2.1 基本SQL查询的实例 94
5.2.2 在SELECT命令中的表达式和字符串 95
5.3 UNION、INTERSECT和EXCEPT 96
5.4.1 嵌套查询简介 99
5.4 嵌套查询 99
5.4.3 集合比较操作 101
5.4.2 相关嵌套查询 101
5.4.4 有关嵌套查询的其他例子 102
5.5 聚合操作符 103
5.5.1 GROUP BY和HAVING子句 105
5.5.2 聚合查询的其他例子 108
5.6.2 逻辑连接运算AND、OR和NOT 111
5.6.1 使用空值的比较 111
5.6 空值 111
5.6.4 外连接 112
5.6.3 SQL构造符的作用 112
5.7 嵌入式SQL 113
5.6.5 禁止使用空值 113
5.7.2 嵌入SQL语句 114
5.7.1 声明变量和异常 114
5.8.1 基本的游标定义和用法 115
5.8 游标 115
5.8.2 游标的性质 116
5.10 ODBC和JDBC 118
5.9 动态SQL 118
5.10.1 体系结构 119
5.10.2 使用JDBC的例子 120
5.11.1 单表上的约束 121
5.11 SQL-92中的复杂完整性约束 121
5.11.3 断言:几个表上的IC 122
5.11.2 域约束 122
5.12 触发程序和主动数据库 123
5.12.1 SQL中触发程序的例子 124
5.13.1 为什么触发程序难以理解 125
5.13 设计主动数据库 125
5.13.3 触发程序的其他用途 126
5.13.2 约束和触发程序 126
5.14 复习要点 127
练习 128
文献注解 133
项目练习 133
6.1 简介 134
第6章 示例查询——QBE 134
6.2 基本QBE查询 135
6.3 多个关系上的查询 136
6.2.1 其他的特点:复制、排序的答案 136
6.4 在“关系名”列上的否定 137
6.5 聚合 138
6.6 条件框 139
6.6.1 And/Or查询 140
6.8 更新 141
6.7 无名列 141
6.8.1 更新命令上的限制 142
6.9 除和关系完整性 143
6.10 复习要点 144
练习 145
文献注解 146
项目练习 146
7.1 存储层次 149
第7章 存储数据:磁盘和文件 149
第三部分 数据存储和索引 149
7.1.1 磁盘 150
7.2 RAID 152
7.1.2 磁盘结构对性能的影响 152
7.2.1 数据划分 153
7.2.3 冗余的层次 154
7.2.2 冗余 154
7.3.1 跟踪空闲块 157
7.3 磁盘空间管理 157
7.2.4 RAID级别的选择 157
7.4 缓冲区管理程序 158
7.3.2 使用操作系统中的文件系统来管理磁盘空间 158
7.4.1 缓冲区替换策略 159
7.4.2 数据库管理系统和操作系统的缓冲区管理 160
7.5.1 堆文件 162
7.5 文件和索引 162
7.5.2 索引简介 163
7.6.1 定长记录 165
7.6 页格式 165
7.6.2 变长记录 166
7.7.1 定长记录 167
7.7 记录格式 167
7.7.2 变长记录 168
7.8 复习要点 169
练习 170
文献注解 172
项目练习 172
8.1 代价模型 173
第8章 文件组织和索引 173
8.2 比较三种文件组织方式 174
8.2.2 排序文件 175
8.2.1 堆文件 175
8.2.3 哈希文件 176
8.2.4 选择文件的组织方式 177
8.3 索引概述 178
8.4.1 聚集索引和非聚集索引 179
8.4 索引的性质 179
8.3.1 索引中数据目录项的不同选择 179
8.4.3 主索引和二级索引 181
8.4.2 稠密索引和稀疏索引 181
8.5 SQL-92中的索引说明 182
8.4.4 使用组合搜索码的索引 182
练习 183
8.6 复习要点 183
文献注解 185
项目练习 185
9.1 索引顺序存取方法 186
第9章 树结构索引 186
9.2 B+树:一种动态索引结构 190
9.3 节点的格式 191
9.4 搜索 192
9.5 插入 193
9.6 删除 195
9.7 重复 199
9.8.1 码压缩 200
9.8 实际的B+树 200
9.8.2 B+树中的块载入 201
9.8.3 秩的概念 203
9.9 复习要点 204
9.8.4 在rid上的插入和删除的影响 204
练习 205
项目练习 208
文献注解 209
10.1 静态哈希 210
第10章 基于哈希的索引 210
10.2 可扩展哈希 211
10.1.1 记号和约定 211
10.3 线性哈希 215
10.4 可扩展哈希和线性哈希 220
练习 221
10.5 复习要点 221
文献注解 225
项目练习 225
第11章 外排序 229
第四部分 查询求解 229
11.1 简单的两路归并排序算法 230
11.2 外归并排序 232
11.2.1 运行次数的最小化 234
11.3.1 块读写 235
11.3 最小化I/O代价和I/O的次数 235
11.3.2 双缓冲 236
11.4.1 聚集索引 237
11.4 使用B+树来排序 237
11.4.2 非聚集索引 238
11.5 复习要点 239
练习 240
文献注解 241
项目练习 241
12.1 查询处理介绍 242
第12章 关系操作求解 242
12.1.2 预备知识:例子和代价计算 243
12.1.1 存取路径 243
12.2.2 没有索引的排序数据 244
12.2.1 没有索引的非排序数据 244
12.2 选择操作 244
12.2.3 B+树索引 245
12.3.1 CNF和索引匹配 246
12.3 一般的选择条件 246
12.2.4 哈希排序,等价选择 246
12.3.2 求解没有析取的选择 247
12.3.3 带有析取的选择 248
12.4 投影操作 249
12.4.2 基于哈希函数的投影 250
12.4.1 基于排序的投影 250
12.4.4 用于投影的索引的使用 252
12.4.3 用于投影的排序和哈希 252
12.5 连接操作 253
12.5.1 嵌套循环连接算法 254
12.5.2 排序归并连接算法 257
12.5.3 哈希连接 260
12.6 集合操作 264
12.5.4 一般的连接条件 264
12.7 聚合操作 265
12.6.2 用于并和差的哈希 265
12.6.1 用于并和差的排序 265
12.8 缓冲的影响 266
12.7.1 使用索引实现聚合 266
12.9 复习要点 267
练习 268
文献注解 271
项目练习 271
第13章 查询优化简介 272
13.1.1 查询求解计划 273
13.1 关系查询优化概述 273
13.1.2 流水线求解 274
13.1.4 System R优化器 275
13.1.3 操作符和访问方法的迭代接口 275
13.2.1 存储在系统目录中的信息 276
13.2 在关系DBMS中的系统目录 276
13.3.1 下推选择 278
13.3 可选计划:研究这一问题动机的实例 278
13.3.2 使用索引 279
练习 282
13.4 复习要点 282
第14章 典型的关系查询优化器 283
14.1 将SQL查询转换成关系代数表达式 284
14.2.1 估计结果的大小 286
14.2 估算执行计划的开销 286
14.3.2 投影 290
14.3.1 选择 290
14.3 关系代数的等价 290
14.3.4 选择、投影和连接 291
14.3.3 叉积和连接 291
14.3.5 其他的等价 292
14.4.1 单关系查询 293
14.4 列举可选的执行计划 293
14.4.2 多关系查询 296
14.5 嵌套子查询 302
14.7 复习要点 304
14.6 查询优化的其他方法 304
练习 305
文献注解 312
项目练习 312
15.1.1 冗余导致的问题 317
15.1 模式求精简介 317
第五部分 数据库设计 317
第15章 模式求精和范式 317
15.1.3 模式分解中的一些问题 319
15.1.2 模式分解 319
15.2 函数依赖 320
15.3.1 实体集上的约束 321
15.3 模式求精的动机 321
15.3.3 实体属性的确定 322
15.3.2 联系集上的约束 322
15.3.4 确定实体集 323
15.4.1 函数依赖集的闭包 324
15.4 函数依赖推理 324
15.5 范式 326
15.4.2 属性闭包 326
15.5.1 Boyce-Codd范式 327
15.5.2 第三范式 328
15.6 分解 329
15.6.1 无损连接分解 330
15.6.2 依赖保持分解 331
15.7.1 分解为BCNF 332
15.7 规范化 332
15.7.2 分解为3NF 333
15.8.1 多值依赖 336
15.8 其他类型的依赖 336
15.8.2 第四范式 338
15.8.5 包含依赖 339
15.8.4 第五范式 339
15.8.3 连接依赖 339
15.9 复习要点 340
练习 341
项目练习 344
文献注解 345
第16章 物理数据库设计和调整 346
16.1.1 数据库负载 347
16.1 物理数据库设计简介 347
16.2 索引选择的指导方针 348
16.1.3 数据库调整的必要性 348
16.1.2 物理设计和调整的决策 348
16.3 索引选择的基本例子 350
16.4 聚集和索引 351
16.4.1 两个关系的协同聚集 354
16.5 在多属性搜索码上的索引 355
16.6 能够实现只读索引计划的索引 356
16.7.1 调整索引 358
16.7 数据库调整简介 358
16.7.2 调整概念模式 359
16.7.3 调整查询和视图 360
16.8.2 分解 361
16.8.1 设置一个弱范式 361
16.8 调整概念模式时的选择 361
16.8.3 分解的选择 362
16.8.5 水平分解 363
16.8.4 垂直分解 363
16.9 调整查询和视图中的选择 364
16.10 并发控制的影响 365
16.11 DBMS基准测试 366
16.11.2 基准测试的使用 367
16.11.1 著名的DBMS基准测试 367
16.12 复习要点 368
练习 369
文献注解 375
项目练习 375
17.1 数据库安全简介 376
第17章 安全 376
17.3 任意存取控制 377
17.2 存取控制 377
17.3.1 授予和回收视图的访问控制和完整性约束 384
17.4 强制性存取控制 385
17.4.1 多级关系和多实例化 386
17.4.2 转换通道,DoD安全级别 387
17.5.2 统计数据库的安全 388
17.5.1 数据库管理员的任务 388
17.5 有关安全的其他问题 388
17.5.3 加密 389
17.6 复习要点 391
练习 392
文献注解 394
项目练习 394
18.1 事务概念 397
第18章 事务管理简介 397
第六部分 事务管理 397
18.1.2 原子性和持久性 398
18.1.1 一致性和隔离性 398
18.2 事务和调度 399
18.3.3 交叉执行带来的异常 400
18.3.2 可串行化 400
18.3 事务的并发执行 400
18.3.1 并发执行的动机 400
18.3.4 包括中止事务的调度 402
18.4.1 严格的两阶段加锁 403
18.4 基于加锁的并发控制 403
18.5 崩溃恢复简介 404
18.5.2 正常执行时与恢复相关的执行步骤 405
18.5.1 偷帧和强制写页 405
18.6 复习要点 406
18.5.3 ARIES简介 406
练习 407
文献注解 408
19.1.1 2PL、可串行性和可恢复性 409
19.1 回顾基于加锁的并发控制方法 409
第19章 并发控制 409
19.1.2 观测可串行化 411
19.2.1 实现加锁和解锁请求 412
19.2 加锁管理 412
19.2.2 死锁 413
19.2.3 基于加锁的并发控制的性能 415
19.3.1 动态数据库和幻影问题 416
19.3 特殊的加锁技术 416
19.3.2 B+树的并发控制 417
19.3.3 多粒度锁 419
19.4.1 事务特性 420
19.4 SQL-92对事务的支持 420
19.4.2 事务和约束 421
19.5.1 乐观的并发控制 422
19.5 不加锁的并发控制 422
19.5.2 基于时间戳的并发控制 423
19.5.3 多版本并发控制 425
19.6 复习要点 426
练习 427
文献注解 430
20.1 ARIES算法简介 431
第20章 崩溃恢复 431
20.1.1 日志 432
20.1.2 其他和恢复相关的数据结构 434
20.1.3 日志写优先的协议 435
20.2.1 分析阶段 436
20.2 从系统崩溃中恢复 436
20.1.4 检查点 436
20.2.2 重做阶段 438
20.2.3 取消阶段 439
20.3 介质恢复 441
20.5 复习要点 442
20.4 其他算法以及与并发控制的交互作用 442
练习 443
文献注解 445
第21章 并行和分布式数据库 449
第七部分 新课题 449
21.1 并行数据库系统的可用结构 450
21.2.1 数据划分 451
21.2 并行查询处理 451
21.3 数据操作的并行化 452
21.2.2 并行化顺序数据操作处理程序 452
21.3.3 连接 453
21.3.2 排序 453
21.3.1 批量载入和扫描 453
21.4 并行查询优化 455
21.5.1 分布式数据库系统的类型 456
21.5 分布式数据库简介 456
21.6.2 协同服务器系统 457
21.6.1 客户/服务器系统 457
21.6 分布式DBMS的体系结构 457
21.7.1 划分 458
21.7 分布式DBMS的数据存储 458
21.6.3 中间件系统 458
21.8.1 命名对象 459
21.8 分布目录管理 459
21.7.2 复制 459
21.8.3 分布数据的独立性 460
21.8.2 目录结构 460
21.9.1 分布式DBMS中无连接的查询 461
21.9 分布式查询处理 461
21.9.2 分布式DBMS中的连接操作 462
21.10 分布数据的更新 465
21.9.3 基于代价的查询优化 465
21.10.2 异步复制 466
21.10.1 同步复制 466
21.11 分布式事务处理简介 468
21.12.1 分布式死锁 469
21.12 分布式并发控制 469
21.13 分布式事务恢复 470
21.13.1 事务正常执行和提交协议 471
21.13.2 发生故障后进行恢复 472
21.13.3 重新讨论两阶段提交 473
21.14 复习要点 474
21.13.4 三阶段提交 474
练习 476
文献注解 481
22.1 万维网 483
第22章 因特网数据库 483
22.1.1 HTML简介 484
22.2 体系结构 485
22.1.2 数据库和万维网 485
22.2.1 应用服务器和服务器端Java 487
22.3.1 XML简介 490
22.3 HTML以外的其他技术 490
22.3.2 XML DTD 492
22.3.3 特定领域的DTD 494
22.3.4 XML-QL:查询XML数据 495
22.3.5 半结构化数据模型 497
22.3.6 半结构化数据的实现问题 498
22.4 用于文本搜索的索引 499
22.4.1 倒排文件 500
22.5 万维网上的分级关键字搜索 501
22.4.2 签名文件 501
22.5.1 万维网页分级算法 502
22.6 复习要点 504
练习 505
文献注解 507
第23章 决策支持 509
23.1 决策支持简介 510
23.2.1 创建和管理数据仓库 511
23.2 数据仓库 511
23.3 OLAP 512
23.3.1 多维数据模型 512
23.3.2 OLAP查询 514
23.3.3 面向OLAP的数据库设计 517
23.4.1 位图索引 518
23.4 OLAP实现技术 518
23.4.2 连接索引 519
23.4.3 文件组织 520
23.5.1 视图、OLAP和数据仓库 521
23.5 视图和决策支持 521
23.4.4 其他OLAP实现问题 521
23.5.3 视图实物化和按需要进行计算 522
23.5.2 查询的修改 522
23.5.4 视图实物化的问题 524
23.6.1 前N项查询 525
23.6 快速得到查询结果 525
23.6.2 联机聚集 526
23.7 复习要点 527
练习 528
文献注解 530
24.1 数据挖掘简介 531
第24章 数据挖掘 531
24.2 关联计数 532
24.2.1 频繁项集 533
24.2.2 冰山式查询 534
24.3 规则挖掘 535
24.3.3 关联规则和ISA层次 536
24.3.2 找出关联规则的算法 536
24.3.1 关联规则 536
24.3.4 通用化关联规则 537
24.3.5 顺序模式 538
24.3.6 使用关联规则进行预测 539
24.3.8 分类和回归规则 540
24.3.7 贝叶斯网络 540
24.4 树结构规则 541
24.4.1 决策树 542
24.4.2 建立决策树的算法 543
24.5.1 聚类算法 545
24.5 聚类 545
24.6 在序列上的相似搜索 546
24.7 其他的数据挖掘任务 547
24.6.1 找出相似序列的算法 547
24.8 复习要点 548
练习 549
文献注解 550
第25章 对象数据库系统 552
25.1.1 新的数据类型 553
25.1 说明研究动因的实例 553
25.1.2 操纵新类型数据 554
25.2 用户定义的抽象数据类型 556
25.2.1 ADT方法的定义 557
25.3 构造类型 558
25.3.1 构造类型的数据操纵 559
25.4.1 相等的概念 561
25.4 对象、对象标识符和引用类型 561
25.5.1 定义带有继承的类型 563
25.5 继承 563
25.4.2 引用类型的解除 563
25.5.3 群体层次、类型区间和查询 564
25.5.2 方法联编 564
25.6.1 构造类型和ADT 565
25.6 ORDBMS的数据库设计 565
25.6.2 对象标识符 567
25.6.3 扩展ER模型 568
25.7.1 存储和存取方法 569
25.7 实现ORDBMS的新挑战 569
25.6.4 使用嵌套群体 569
25.7.2 查询处理 571
25.7.3 查询优化 572
25.8 OODBMS 573
25.8.1 ODMG数据模型和ODL 574
25.8.2 OQL 575
25.9.1 RDBMS和ORDBMS 576
25.9 RDBMS与OODBMS和ORDBMS的比较 576
25.10 复习要点 577
25.9.3 OODBMS和ORDBMS:不同点 577
25.9.2 OODBMS和ORDBMS:相似点 577
练习 579
文献注解 581
26.1 空间数据和查询类型 583
第26章 空间数据管理 583
26.2 涉及空间数据的应用 584
26.3 空间索引简介 586
26.4 基于空间填充曲线的索引 587
26.3.1 已提出的索引结构概述 587
26.4.1 区域四叉树和Z-排序区域数据 588
26.5 网格文件 589
26.4.2 使用Z-排序的空间查询 589
26.6 R树:点和区域数据 592
26.5.1 使用网格文件来处理区域 592
26.6.1 查询 593
26.6.2 插入和删除操作 594
26.6.4 通用化搜索树 595
26.6.3 并发控制 595
26.8 复习要点 596
26.7 高维索引问题 596
练习 597
文献注解 599
第27章 演绎数据库 600
27.1.1 Datalog 601
27.1 递归查询简介 601
27.2 理论基础 603
27.2.1 最小模型语义 604
27.2.3 不动点操作符 605
27.2.2 安全datalog程序 605
27.3 带有否定的递归查询 606
27.2.4 最小模型=最小不动点 606
27.3.1 范围限制和否定 607
27.3.2 分层 608
27.3.3 聚合操作 609
27.4 递归查询的有效求解 610
27.4.1 无重复推理的不动点求解 611
27.4.2 下移选择操作来避免不相关的推理 612
练习 614
27.5 复习要点 614
文献注解 616
28.1.1 事务处理监视程序 617
28.1 高级事务处理 617
第28章 其他专题 617
28.2 对多个数据源的集成访问 618
28.1.3 实时DBMS 618
28.1.2 新的事务模型 618
28.4 主存数据库 619
28.3 移动数据库 619
28.5 多媒体数据库 620
28.7 时态和序列数据库 621
28.6 地理信息系统 621
文献注解 622
28.9 总结 622
28.8 信息可视化 622
附录A 数据库设计实例研究:因特网商店 624
附录B MINIBASE教学辅助软件 633
参考文献 636