第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.9.1客户/服务器系统 13
1.9.2并行数据库系统 15
1.9.3分布式数据库系统 15
1.10数据挖掘与信息检索 16
1.11特种数据库 16
1.11.1基于对象的数据模型 16
1.11.2半结构化数据模型 17
1.12数据库用户和管理员 17
1.12.1数据库用户和用户界面 17
1.12.2数据库管理员 17
1.13数据库系统的历史 18
1.14总结 19
术语回顾 20
实践习题 20
习题 20
工具 21
文献注解 21
第一部分 关系数据库 24
第2章 关系模型介绍 24
2.1关系数据库的结构 24
2.2数据库模式 25
2.3码 26
2.4模式图 27
2.5关系查询语言 28
2.6关系运算 29
2.7总结 30
术语回顾 31
实践习题 31
习题 32
文献注解 32
第3章SQL 33
3.1 SQL查询语言概览 33
3.2 SQL数据定义 34
3.2.1基本类型 34
3.2.2基本模式定义 34
3.3 SQL查询的基本结构 36
3.3.1单关系查询 36
3.3.2多关系查询 37
3.3.3自然连接 40
3.4附加的基本运算 42
3.4.1更名运算 42
3.4.2字符串运算 43
3.4.3 select子句中的属性说明 44
3.4.4排列元组的显示次序 44
3.4.5 where子句谓词 44
3.5集合运算 45
3.5.1并运算 45
3.5.2交运算 46
3.5.3差运算 46
3.6空值 47
3.7聚集函数 48
3.7.1基本聚集 48
3.7.2分组聚集 48
3.7.3 having子句 49
3.7.4对空值和布尔值的聚集 50
3.8嵌套子查询 50
3.8.1集合成员资格 51
3.8.2集合的比较 51
3.8.3空关系测试 52
3.8.4重复元组存在性测试 53
3.8.5 from子句中的子查询 54
3.8.6 with子句 55
3.8.7标量子查询 55
3.9数据库的修改 56
3.9.1删除 56
3.9.2插入 57
3.9.3更新 58
3.10总结 59
术语回顾 60
实践习题 60
习题 62
工具 63
文献注解 63
第4章 中级SQL 65
4.1连接表达式 65
4.1.1连接条件 65
4.1.2外连接 66
4.1.3连接类型和条件 69
4.2视图 69
4.2.1视图定义 70
4.2.2 SQL查询中使用视图 70
4.2.3物化视图 71
4.2.4视图更新 71
4.3事务 73
4.4完整性约束 73
4.4.1单个关系上的约束 74
4.4.2 not null约束 74
4.4.3 unique约束 74
4.4.4 check子句 74
4.4.5参照完整性 75
4.4.6事务中对完整性约束的违反 76
4.4.7复杂check条件与断言 77
4.5 SQL的数据类型与模式 78
4.5.1 SQL中的日期和时间类型 78
4.5.2默认值 79
4.5.3创建索引 79
4.5.4大对象类型 79
4.5.5用户定义的类型 80
4.5.6 create table的扩展 81
4.5.7模式、目录与环境 81
4.6授权 82
4.6.1权限的授予与收回 82
4.6.2角色 83
4.6.3视图的授权 84
4.6.4模式的授权 85
4.6.5权限的转移 85
4.6.6权限的收回 85
4.7总结 86
术语回顾 87
实践习题 87
习题 88
文献注解 89
第5章 高级SQL 90
5.1使用程序设计语言访问数据库 90
5.1.1 JDBC 91
5.1.2 ODBC 95
5.1.3嵌入式SQL 97
5.2函数和过程 99
5.2.1声明和调用SQL函数和过程 100
5.2.2支持过程和函数的语言构造 101
5.2.3外部语言过程 103
5.3触发器 104
5.3.1对触发器的需求 104
5.3.2 SQL中的触发器 104
5.3.3何时不用触发器 107
5.4递归查询 108
5.4.1用迭代来计算传递闭包 108
5.4.2 SQL中的递归 109
5.5高级聚集特性?? 111
5.5.1排名 111
5.5.2分窗 112
5.6 OLAP 114
5.6.1联机分析处理 114
5.6.2交叉表与关系表 116
5.6.3 SQL中的OLAP 118
5.7总结 120
术语回顾 120
实践习题 121
习题 122
工具 123
文献注解 123
第6章 形式化关系查询语言 125
6.1关系代数 125
6.1.1基本运算 125
6.1.2关系代数的形式化定义 130
6.1.3附加的关系代数运算 131
6.1.4扩展的关系代数运算 134
6.2元组关系演算 137
6.2.1查询示例 137
6.2.2形式化定义 139
6.2.3表达式的安全性 139
6.2.4语言的表达能力 140
6.3域关系演算 140
6.3.1形式化定义 140
6.3.2查询的例子 140
6.3.3表达式的安全性 141
6.3.4语言的表达能力 142
6.4总结 142
术语回顾 142
实践习题 142
习题 144
文献注解 145
第二部分 数据库设计 148
第7章 数据库设计和E-R模型 148
7.1设计过程概览 148
7.1.1设计阶段 148
7.1.2设计选择 149
7.2实体-联系模型 150
7.2.1实体集 150
7.2.2联系集 150
7.2.3属性 152
7.3约束 153
7.3.1映射基数 154
7.3.2参与约束 154
7.3.3码 155
7.4从实体集中删除冗余属性 155
7.5实体-联系图 157
7.5.1基本结构 157
7.5.2映射基数 158
7.5.3复杂的属性 158
7.5.4角色 159
7.5.5非二元的联系集 159
7.5.6弱实体集 159
7.5.7大学的E-R图 161
7.6转换为关系模式 161
7.6.1具有简单属性的强实体集的表示 162
7.6.2具有复杂属性的强实体集的表示 162
7.6.3弱实体集的表示 163
7.6.4联系集的表示 163
7.7实体-联系设计问题 165
7.7.1用实体集还是用属性 165
7.7.2用实体集还是用联系集 166
7.7.3二元还是n元联系集 167
7.7.4联系属性的布局 167
7.8扩展的E-R特性 168
7.8.1特化 168
7.8.2概化 169
7.8.3属性继承 170
7.8.4概化上的约束 170
7.8.5聚集 171
7.8.6转换为关系模式 172
7.9数据建模的其他表示法 173
7.9.1 E-R图的其他表示法 173
7.9.2统一建模语言UML 175
7.10数据库设计的其他方面 176
7.10.1数据约束和关系数据库设计 176
7.10.2使用需求:查询、性能 177
7.10.3授权需求 177
7.10.4数据流、工作流 177
7.10.5数据库设计的其他问题 178
7.11总结 178
术语回顾 179
实践习题 179
习题 181
工具 182
文献注解 182
第8章 关系数据库设计 183
8.1好的关系设计的特点 183
8.1.1设计选择:更大的模式 183
8.1.2设计选择:更小的模式 184
8.2原子域和第一范式 185
8.3使用函数依赖进行分解 186
8.3.1码和函数依赖 187
8.3.2 Boyce-Codd范式 188
8.3.3 BCNF和保持依赖 189
8.3.4第三范式 190
8.3.5更高的范式 191
8.4函数依赖理论 191
8.4.1函数依赖集的闭包 191
8.4.2属性集的闭包 193
8.4.3正则覆盖 193
8.4.4无损分解 195
8.4.5保持依赖 196
8.5分解算法 197
8.5.1 BCNF分解 197
8.5.2 3 NF分解 199
8.5.3 3 NF算法的正确性 200
8.5.4 BCNF和3NF的比较 200
8.6使用多值依赖的分解 201
8.6.1多值依赖 201
8.6.2第四范式 203
8.6.3 4NF分解 203
8.7更多的范式 204
8.8数据库设计过程 204
8.8.1 E-R模型和规范化 204
8.8.2属性和联系的命名 205
8.8.3为了性能去规范化 205
8.8.4其他设计问题 206
8.9时态数据建模 206
8.10总结 208
术语回顾 208
实践习题 208
习题 210
文献注解 211
第9章 应用设计和开发 212
9.1应用程序和用户界面 212
9.2 Web基础 213
9.2.1统一资源定位符 213
9.2.2超文本标记语言 213
9.2.3 Web服务器和会话 215
9.3 servlet和JSP 216
9.3.1一个servlet的例子 217
9.3.2 servlet会话 218
9.3.3 servlet的生命周期 218
9.3.4 servlet支持 218
9.3.5服务器端脚本 219
9.3.6客户端脚本 220
9.4应用架构 221
9.4.1业务逻辑层 222
9.4.2数据访问层和对象-关系映射 222
9.4.3 Web服务 224
9.4.4断连操作 224
9.5快速应用开发 224
9.5.1构建用户界面的工具 225
9.5.2 Web应用框架 226
9.5.3报表生成器 226
9.6应用程序性能 227
9.6.1利用缓存减少开销 227
9.6.2并行处理 228
9.7应用程序安全性 228
9.7.1 SQL注入 228
9.7.2跨站点脚本和请求伪造 229
9.7.3密码泄露 229
9.7.4应用程序认证 230
9.7.5应用级授权 231
9.7.6审计追踪 232
9.7.7隐私 232
9.8加密及其应用 233
9.8.1加密技术 233
9.8.2数据库中的加密支持 234
9.8.3加密和认证 235
9.9总结 236
术语回顾 237
实践习题 237
习题 238
项目建议 239
工具 241
文献注解 241
第三部分 数据存储、查询和事务管理 244
第10章 数据存储和数据存取 244
10.1物理存储介质概述 244
10.2磁盘和闪存 246
10.2.1磁盘的物理特性 246
10.2.2磁盘性能的度量 247
10.2.3磁盘块访问的优化 248
10.2.4快闪存储 250
10.3文件和记录的组织 250
10.3.1文件组织 250
10.3.2文件中记录的组织 252
10.4数据字典存储 253
10.5数据库缓冲区 254
10.5.1缓冲区管理器 254
10.5.2缓冲区替换策略 255
10.6索引的基本概念 256
10.7顺序索引 257
10.7.1稠密索引和稀疏索引 257
10.7.2多级索引 259
10.7.3辅助索引 260
10.7.4多码上的索引 261
10.8 B+树索引文件 261
10.8.1 B+树的结构 261
10.8.2 B+树的查询 263
10.8.3 B+树的更新 265
10.8.4不唯一的搜索码 270
10.8.5 B+树更新的复杂性 270
10.9散列文件组织和散列索引 270
10.9.1散列函数 271
10.9.2桶溢出处理 272
10.9.3散列索引 273
10.9.4动态散列 273
10.9.5顺序索引和散列的比较 274
10.10 SQL中的索引定义 275
10.11总结 276
术语回顾 277
实践习题 277
习题 278
文献注解 278
第11章 查询处理和查询优化 280
11.1概述 280
11.2查询代价的度量 281
11.3关系代数运算的执行 282
11.3.1选择运算 282
11.3.2连接运算 284
11.4表达式计算 290
11.4.1物化 290
11.4.2流水线 291
11.5查询优化 292
11.5.1查询优化概述 292
11.5.2关系表达式的转换 294
11.5.3表达式结果集统计大小的估计 297
11.5.4执行计划选择 301
11.6总结 303
术语回顾 304
实践习题 305
习题 306
文献注解 306
第12章 事务管理 308
12.1事务概念 308
12.2事务原子性和持久性 310
12.3事务隔离性 312
12.4可串行化 314
12.5可恢复性 315
12.5.1可恢复调度 316
12.5.2无级联调度 316
12.5.3事务隔离性级别 316
12.6并发控制 317
12.6.1基于锁的协议 317
12.6.2基于时间戳的协议 322
12.6.3基于有效性检查的协议 323
12.7恢复系统 323
12.7.1故障分类 324
12.7.2数据访问 324
12.7.3恢复与原子性 325
12.8总结 330
术语回顾 331
实践习题 332
习题 333
文献注解 334
第四部分 高级话题 336
第13章 数据仓库与数据挖掘 336
13.1决策支持系统 336
13.2数据仓库 337
13.2.1数据仓库成分 337
13.2.2数据仓库模式 338
13.2.3面向列的存储 339
13.3数据挖掘 339
13.3.1分类 340
13.3.2关联规则 341
13.3.3聚类 342
13.3.4其他类型的数据挖掘 343
13.4总结 344
术语回顾 344
实践习题 344
习题 345
工具 345
文献注解 345
第14章 基于对象的数据库 347
14.1概述 347
14.2复杂数据类型 347
14.3 SQL中的结构类型和继承 349
14.3.1结构类型 349
14.3.2类型继承 351
14.4表继承 352
14.5 SQL中的数组和多重集合类型 353
14.5.1创建和访问集合体值 354
14.5.2查询以集合体为值的属性 354
14.5.3嵌套和解除嵌套 355
14.6 SQL中的对象标识和引用类型 356
14.7 O-R特性的实现 357
14.8持久化程序设计语言 358
14.8.1对象的持久化 359
14.8.2对象标识和指针 359
14.8.3持久对象的存储和访问 360
14.8.4持久化C++++系统 360
14.8.5持久化Java系统 361
14.9对象-关系映射 363
14.10面向对象与对象-关系 363
14.11总结 364
术语回顾 364
实践习题 364
习题 365
工具 366
文献注解 366
第15章XML 367
15.1动机 367
15.2 XML数据结构 369
15.3 XML文档模式 372
15.3.1文档类型定义 372
15.3.2 XML Schema 374
15.4查询和转换 377
15.4.1 XML树模型 377
15.4.2 XPath 377
15.4.3 XQuery 379
15.5 XML应用程序接口 382
15.6 XML数据存储 383
15.6.1非关系的数据存储 383
15.6.2关系数据库 384
15.6.3 SQL/XML 386
15.7 XML应用 387
15.7.1存储复杂结构数据 387
15.7.2标准化数据交换格式 387
15.7.3 Web服务 388
15.7.4数据中介 388
15.8总结 389
术语回顾 389
实践习题 390
习题 391
工具 391
文献注解 392
第16章 高级应用开发 393
16.1性能调整 393
16.1.1提高面向集合的特性 393
16.1.2批量加载和更新的调整 394
16.1.3瓶颈位置 395
16.1.4可调参数 396
16.1.5硬件调整 397
16.1.6模式调整 398
16.1.7索引调整 398
16.1.8使用物化视图 399
16.1.9物理设计的自动调整 399
16.1.10并发事务调整 400
16.1.11性能模拟 401
16.2性能基准程序 402
16.2.1任务集 402
16.2.2数据库应用类型 402
16.2.3 TPC基准程序 403
16.3应用系统开发的其他问题 404
16.3.1应用系统测试 404
16.3.2应用系统移植 405
16.4标准化 405
16.4.1 SQL标准 406
16.4.2数据库连接标准 406
16.4.3对象数据库标准 407
16.4.4基于XML的标准 407
16.5总结 408
术语回顾 408
实践习题 409
习题 409
文献注解 410
参考文献 411