第1章 引言 1
1.1 数据库系统的应用 1
1.2 数据库系统的目标 2
1.3 数据视图 3
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 来自应用程序的数据库访问 9
1.6 数据库设计 9
1.6.1 设计过程 9
1.6.2 银行企业的数据库设计 10
1.6.3 实体-联系模型 10
1.6.4 规范化 11
1.7 基于对象数据库和半结构化数据库 12
1.7.1 基于对象数据模型 12
1.7.2 半结构化数据模型 12
1.8 数据存储和查询 12
1.8.1 存储管理器 13
1.8.2 查询处理器 13
1.9 事务管理 13
1.10 数据挖掘与分析 14
1.11 数据库体系结构 15
1.12 数据库用户和管理员 16
1.12.1 数据库用户和用户界面 16
1.12.2 数据库管理员 17
1.13 数据库系统的历史 17
1.14 小结 19
术语回顾 19
实践习题 20
习题 20
文献注解 20
工具 20
第一部分 关系数据库 22
第2章 关系模型 22
2.1 关系数据库的结构 22
2.1.1 基本结构 22
2.1.2 数据库模式 23
2.1.3 码 25
2.1.4 查询语言 26
2.2 关系代数基本运算 27
2.2.1 选择运算 27
2.2.2 投影运算 27
2.2.3 并运算 28
2.2.4 集合差运算 28
2.2.5 笛卡儿积运算 29
2.2.6 更名运算 31
2.2.7 关系代数的形式化定义 32
2.3 附加的关系代数运算 32
2.3.1 集合交运算 33
2.3.2 自然连接运算 33
2.3.3 除运算 34
2.3.4 赋值运算 35
2.4 扩展的关系代数运算 35
2.4.1 广义投影 36
2.4.2 聚集函数 36
2.4.3 外连接 37
2.5 空值 39
2.6 数据库的修改 40
2.6.1 删除 40
2.6.2 插入 40
2.6.3 更新 41
2.7 小结 41
术语回顾 42
实践习题 42
习题 42
文献注解 43
第3章 SQL 45
3.1 背景 45
3.2 数据定义 46
3.2.1 基本域类型 46
3.2.2 SQL中的基本模式定义 46
3.3 SQL查询的基本结构 48
3.3.1 select子句 48
3.3.2 where子句 49
3.3.3 from子句 49
3.3.4 更名运算 50
3.3.5 元组变量 50
3.3.6 字符串运算 51
3.3.7 排列元组的显示次序 52
3.3.8 重复 52
3.4 集合运算 53
3.4.1 union运算 53
3.4.2 intersect运算 53
3.4.3 except运算 54
3.5 聚集函数 54
3.6 空值 56
3.7 嵌套子查询 57
3.7.1 集合成员资格 57
3.7.2 集合的比较 58
3.7.3 测试是否为空关系 58
3.7.4 测试是否存在重复元组 59
3.8 复杂查询 60
3.8.1 派生关系 60
3.8.2 with子句 60
3.9 视图 61
3.9.1 视图定义 62
3.9.2 用其他视图定义视图 63
3.10 数据库的修改 64
3.10.1 删除 64
3.10.2 插入 65
3.10.3 更新 66
3.10.4 视图的更新 67
3.10.5 事务 68
3.11 连接关系 69
3.11.1 举例 69
3.11.2 连接类型和条件 70
3.12 小结 72
术语回顾 72
实践习题 72
习题 74
文献注解 75
第4章 高级SQL 76
4.1 SQL的数据类型与模式 76
4.1.1 SQL中内建的数据类型 76
4.1.2 用户定义类型 77
4.1.3 大对象类型 78
4.1.4 模式、目录与环境 78
4.2 完整性约束 79
4.2.1 单个关系上的约束 79
4.2.2 not null约束 79
4.2.3 unique约束 80
4.2.4 check子句 80
4.2.5 参照完整性 81
4.2.6 断言 83
4.3 授权 83
4.4 嵌入式SQL 84
4.5 动态SQL 87
4.5.1 ODBC 87
4.5.2 JDBC 89
4.6 函数和过程化结构 92
4.6.1 SQL函数和过程 92
4.6.2 过程化结构 93
4.6.3 外部语言例程 95
4.7 递归查询 96
4.7.1 使用迭代的传递闭包 96
4.7.2 SQL中的递归 97
4.8 高级SQL特性 98
4.8.1 create table的扩展 99
4.8.2 关于子查询的更多内容 99
4.8.3 数据库更新的高级结构 100
4.9 小结 100
术语回顾 101
实践习题 101
习题 102
文献注解 103
第5章 其他关系语言 104
5.1 元组关系演算 104
5.1.1 查询的例子 104
5.1.2 形式化定义 106
5.1.3 表达式的安全性 106
5.1.4 语言的表达能力 107
5.2 域关系演算 107
5.2.1 形式化定义 107
5.2.2 查询的例子 108
5.2.3 表达式的安全性 108
5.2.4 语言的表达能力 109
5.3 QBE 109
5.3.1 框架表 110
5.3.2 在单个关系上的查询 110
5.3.3 在多个关系上的查询 111
5.3.4 条件框 112
5.3.5 结果关系 113
5.3.6 在Microsoft Access中的QBE 114
5.4 Datalog 115
5.4.1 基本结构 116
5.4.2 Datalog规则的语法 117
5.4.3 非递归Datalog的语义 118
5.4.4 安全性 119
5.4.5 Datalog中的关系运算 120
5.4.6 Datalog中的递归 121
5.4.7 递归的能力 122
5.5 小结 124
术语回顾 124
实践习题 124
习题 125
文献注解 126
工具 127
第二部分 数据库设计 129
第6章 数据库设计和E-R模型 129
6.1 设计过程概览 129
6.1.1 设计阶段 129
6.1.2 设计选择 130
6.2 实体-联系模型 130
6.2.1 实体集 131
6.2.2 联系集 132
6.2.3 属性 134
6.3 约束 135
6.3.1 映射基数 135
6.3.2 码 136
6.3.3 参与约束 137
6.4 实体-联系图 137
6.5 实体-联系设计问题 141
6.5.1 用实体集还是用属性 141
6.5.2 用实体集还是用联系集 142
6.5.3 二元联系集与n元联系集 143
6.5.4 联系属性的布局 144
6.6 弱实体集 144
6.7 扩展E-R特性 146
6.7.1 特殊化 146
6.7.2 一般化 147
6.7.3 属性继承 148
6.7.4 一般化上的约束 148
6.7.5 聚集 150
6.7.6 可选择的E-R符号 151
6.8 银行企业的数据库设计 152
6.8.1 E-R设计的可选方案 152
6.8.2 银行数据库的数据需求 153
6.8.3 银行数据库中的实体集 153
6.8.4 银行数据库中的联系集 153
6.8.5 银行数据库中的E-R图 154
6.9 转换为关系模式 155
6.9.1 强实体集的表示方式 155
6.9.2 弱实体集的表示方式 155
6.9.3 联系集的表示方式 156
6.9.4 复合属性和多值属性 157
6.9.5 一般化的表示方式 158
6.9.6 聚集的表示方式 158
6.9.7 银行企业的关系模式 159
6.10 数据库设计的其他方面 159
6.10.1 数据约束和关系数据库设计 159
6.10.2 使用需求:查询和性能 160
6.10.3 授权需求 160
6.10.4 数据流、工作流 161
6.10.5 数据库设计的其他问题 161
6.11 小结 161
术语回顾 162
实践习题 162
习题 164
文献注解 165
工具 166
第7章 关系数据库设计 167
7.1 好的关系设计的特点 167
7.1.1 设计选择:更大的模式 167
7.1.2 设计选择:更小的模式 169
7.2 原子域和第一范式 171
7.3 使用函数依赖的分解 171
7.3.1 码和函数依赖 172
7.3.2 Boyce-Codd范式 173
7.3.3 BCNF和保持依赖 173
7.3.4 第三范式 175
7.3.5 更高的范式 177
7.4 函数依赖理论 177
7.4.1 函数依赖集的闭包 177
7.4.2 属性集的闭包 179
7.4.3 正则覆盖 180
7.4.4 无损分解 182
7.4.5 保持依赖 183
7.5 用于分解的算法 184
7.5.1 BCNF分解 184
7.5.2 3NF分解 186
7.5.3 BCNF和3NF的比较 187
7.6 使用多值依赖的分解 188
7.6.1 多值依赖 188
7.6.2 第四范式 189
7.6.3 4NF分解 190
7.7 更多的范式 191
7.8 数据库设计过程 191
7.8.1 E-R模型和规范化 191
7.8.2 属性和联系的命名 192
7.8.3 为了性能解除规范化 193
7.8.4 其他设计问题 193
7.9 时态数据建模 193
7.10 小结 195
术语回顾 196
实践习题 196
习题 198
文献注解 198
第8章 应用设计和开发 200
8.1 用户界面和工具 200
8.1.1 表格和图形用户界面 200
8.1.2 报表生成器 201
8.2 数据库的Web界面 202
8.3 Web基础 203
8.3.1 统一资源定位符 203
8.3.2 超文本标记语言 203
8.3.3 客户端脚本和applet 204
8.3.4 Web服务器和会话 205
8.4 servlet和JSP 207
8.4.1 一个servlet的例子 207
8.4.2 servlet会话 208
8.4.3 servlet的生命周期 208
8.4.4 servlet支持 208
8.4.5 服务器端脚本 209
8.5 建立大型Web应用 210
8.5.1 构建Web界面 210
8.5.2 Microsoft ASP 210
8.5.3 提高应用程序性能 211
8.6 触发器 212
8.6.1 对触发器的需求 212
8.6.2 SQL中的触发器 213
8.6.3 何时不用触发器 215
8.7 SQL中的授权 216
8.7.1 权限的授予 216
8.7.2 在SQL中授权 217
8.7.3 角色 218
8.7.4 收回权限 219
8.7.5 视图、函数和过程的授权 220
8.7.6 SQL授权的局限 220
8.7.7 审计追踪 221
8.8 应用系统安全性 221
8.8.1 加密技术 221
8.8.2 数据库中的加密支持 222
8.8.3 鉴定 223
8.8.4 保护应用程序 225
8.8.5 隐私 225
8.9 小结 226
术语回顾 227
实践习题 227
习题 227
项目建议 228
文献注解 230
工具 231
第三部分 基于对象的数据库和XML 233
第9章 基于对象的数据库 233
9.1 概述 233
9.2 复杂数据类型 233
9.3 SQL中的结构类型和继承 235
9.3.1 结构类型 235
9.3.2 类型继承 237
9.4 表继承 238
9.5 SQL中的数组和多重集合类型 239
9.5.1 创建和访问集合体值 240
9.5.2 查询以集合体为值的属性 240
9.5.3 嵌套和解除嵌套 241
9.6 对象标识和SQL中的引用类型 243
9.7 O-R特性的实现 244
9.8 持久化程序设计语言 245
9.8.1 对象的持久化 246
9.8.2 对象标识和指针 246
9.8.3 持久对象的存储和访问 247
9.8.4 持久化C++系统 247
9.8.5 持久化Java系统 249
9.9 面向对象与对象-关系 250
9.10 小结 251
术语回顾 251
实践习题 252
习题 253
文献注解 254
工具 254
第10章 XML 255
10.1 动机 255
10.2 XML数据的结构 257
10.3 XML文档模式 259
10.3.1 文档类型定义 260
10.3.2 XML Schema 262
10.4 查询和转换 264
10.4.1 XPath 264
10.4.2 XQuery 266
10.4.3 XSLT 270
10.5 XML应用程序接口 272
10.6 XML数据的存储 273
10.6.1 非关系的数据存储 273
10.6.2 关系数据库 273
10.6.3 SQL/XML 275
10.7 XML应用 277
10.7.1 存储复杂结构的数据 277
10.7.2 标准化数据交换格式 277
10.7.3 Web服务 278
10.7.4 数据中介 278
10.8 小结 279
术语回顾 280
实践习题 280
习题 281
文献注解 282
工具 282
第四部分 数据存储、查询和事务管理 285
第11章 数据存储和数据存取 285
11.1 物理存储介质概述 285
11.2 磁盘 287
11.2.1 磁盘的物理特性 287
11.2.2 磁盘性能的度量 288
11.2.3 磁盘块访问的优化 289
11.3 存储访问和缓冲区 289
11.3.1 缓冲区管理器 290
11.3.2 缓冲区替换策略 290
11.4 文件和记录的组织 292
11.4.1 文件组织 292
11.4.2 文件中记录的组织 293
11.5 数据字典存储 294
11.6 索引的基本概念 295
11.7 顺序索引 296
11.7.1 稠密索引和稀疏索引 297
11.7.2 多级索引 298
11.7.3 辅助索引 299
11.8 B+树索引文件 300
11.8.1 B+树的结构 300
11.8.2 B+树的查询 302
11.8.3 B+树的更新 302
11.9 散列文件组织和散列索引 307
11.9.1 散列函数 307
11.9.2 桶溢出处理 308
11.9.3 散列索引 310
11.9.4 动态散列 310
11.9.5 顺序索引和散列的比较 311
11.10 SQL中的索引定义 312
11.11 小结 312
术语回顾 314
实践习题 314
习题 315
文献注解 315
第12章 查询处理和查询优化 317
12.1 概述 317
12.2 查询代价的度量 318
12.3 关系代数运算的执行 319
12.3.1 选择运算 319
12.3.2 连接运算 321
12.4 表达式计算 327
12.4.1 实体化 327
12.4.2 流水线 328
12.5 查询优化 329
12.5.1 查询优化概述 329
12.5.2 关系表达式的转换 330
12.5.3 表达式结果集统计大小的估计 333
12.5.4 选择执行计划 336
12.6 小结 339
术语回顾 340
实践习题 340
习题 341
文献注解 342
第13章 事务管理 345
13.1 事务概念 345
13.2 事务的并发执行和调度 348
13.2.1 并发执行 348
13.2.2 可串行化 350
13.2.3 可恢复性 351
13.3 并发控制 352
13.3.1 基于锁的协议 352
13.3.2 基于时间戳的协议 358
13.3.3 基于有效性检查的协议 359
13.4 恢复系统 360
13.4.1 故障分类 360
13.4.2 数据访问 360
13.4.3 基于日志的恢复 361
13.5 小结 366
术语回顾 367
实践习题 368
习题 368
文献注解 369
第五部分 高级话题 372
第14章 数据分析与挖掘 372
14.1 决策支持系统 372
14.2 数据分析和联机分析处理 373
14.2.1 联机分析处理 373
14.2.2 OLAP实现 376
14.3 数据仓库工程 377
14.3.1 数据仓库的成分 377
14.3.2 数据仓库模式 378
14.4 数据挖掘 379
14.4.1 数据挖掘应用 379
14.4.2 分类 380
14.4.3 关联规则 380
14.4.4 其他类型的关联 382
14.4.5 聚类 383
14.4.6 其他类型的挖掘 384
14.5 小结 384
术语回顾 385
实践习题 385
习题 385
文献注解 386
工具 386
第15章 高级应用开发 387
15.1 性能调整 387
15.1.1 瓶颈的位置 387
15.1.2 可调参数 388
15.1.3 硬件的调整 388
15.1.4 模式的调整 390
15.1.5 索引的调整 390
15.1.6 使用物化视图 390
15.1.7 物理设计的自动调整 391
15.1.8 事务的调整 392
15.1.9 性能模拟 393
15.2 性能基准程序 393
15.2.1 任务集 393
15.2.2 数据库应用类型 394
15.2.3 TPC基准程序 394
15.2.4 OODB基准程序 395
15.3 标准化 396
15.3.1 SQL标准 396
15.3.2 数据库连接标准 397
15.3.3 对象数据库标准 398
15.3.4 基于XML的标准 398
15.4 应用系统移植 399
15.5 小结 400
术语回顾 400
实践习题 400
习题 401
文献注解 401