第1章 数据库和事务概述 2
1.1 什么是数据库和事务 2
第一部分 简介 2
1.2 现代数据库和事务处理系统的特性 4
1.3 数据库和事务处理系统的实现和支持中的主要角色 5
1.4 决策支持系统——OLAP和OLTP 6
2.1 案例学习:学生选课系统 8
2.2 关系数据库绪论 8
第2章 综述 8
2.3 使程序成为事务——ACID属性 12
参考文献注解 15
习题 15
第二部分 数据库管理 20
第3章 关系数据模型 20
3.1 什么是数据模型 20
3.2 关系模型 22
3.2.1 基本概念 22
3.2.2 完整性约束 26
3.3 SQL的数据定义子语言 29
3.3.1 定义关系类型 30
3.3.2 系统目录 30
3.3.3 码约束 31
3.3.4 处理缺失信息 31
3.3.5 语义约束 32
3.3.6 用户定义的域 34
3.3.7 外码约束 35
3.3.8 反应性约束 36
3.3.9 数据库视图 38
3.3.10 修改已有定义 39
3.3.11 SQL模式 40
3.3.12 访问控制 41
参考文献注解 43
习题 43
第4章 用E-R图和UML构建数据库的概念模型 46
4.1 用E-R方法进行概念建模 46
4.2 实体和实体类型 47
4.3 联系和联系类型 48
4.4 概念数据建模中的高级特性 52
4.4.1 实体类型层次 52
4.4.2 参与约束 54
4.4.3 part-of联系 55
4.5 从E-R图到关系数据库模式 57
4.5.1 实体的表示法 57
4.5.2 联系的表示法 58
4.5.3 在关系模型中表示IsA层次 60
4.5.4 参与约束的表示法 61
4.5.5 part-of联系的表示法 63
4.6 UML:一种新方法 63
4.6.1 在UML中表示实体 64
4.6.2 在UML中表示联系 65
4.6.3 UML中的高级建模概念 68
4.6.4 转换为SQL 70
4.7 一个经纪公司的例子 70
4.7.1 实体-联系设计 70
4.7.2 UML设计 73
4.8 案例学习:学生注册系统的数据库设计 74
4.8.1 需求文档的数据库部分 74
4.8.2 数据库设计 75
4.9 数据建模方法的局限性 79
参考文献注解 81
习题 82
第5章 关系代数和SQL 84
5.1 关系代数:SQL的秘密 84
5.1.1 基本运算符 85
5.1.2 导出运算符 91
5.2 SQL的查询子语言 97
5.2.1 简单SQL查询 97
5.2.2 集合运算 101
5.2.3 嵌套查询 103
5.2.4 量化谓词 107
5.2.5 数据上的聚集 108
5.2.6 FROM子句中的连接表达式 112
5.2.7 一个简单的查询求值算法 113
5.2.8 再谈SQL中的视图 114
5.2.9 物化视图 117
5.2.10 NULL值的两难问题 119
5.3 在SQL中修改关系实例 120
5.3.1 插入数据 120
5.3.2 删除数据 121
5.3.3 更新现有的数据 122
5.3.4 视图上的更新 122
习题 124
参考文献注解 124
第6章 用关系规范化理论设计数据库 127
6.1 冗余问题 127
6.2 分解 128
6.3 函数依赖 130
6.4 函数依赖的特性 132
6.5 范式 136
6.5.1 Boyce-Codd范式 137
6.5.2 第三范式 138
6.6 分解的特性 139
6.6.1 无损分解和有损分解 140
6.6.2 保持依赖分解 142
6.7 BCNF分解的一个算法 144
6.8 3NF模式的合成 146
6.8.1 最小覆盖 146
6.8.2 通过模式合成进行3NF分解 148
6.8.3 通过3NF合成得到BCNF分解 149
6.9 第四范式 151
6.10.1 MVD及它们的特性 155
6.10 高级4NF设计 155
6.10.2 4NF的设计难点 156
6.10.3 如何进行4NF分解 158
6.11 范式分解总结 159
6.12 案例学习:学生注册系统的模式细化 159
6.13 调优问题:分解还是不分解 161
参考文献注解 162
习题 162
7.1 什么是触发器 165
第7章 触发器和主动数据库 165
7.2 触发器处理中的语义问题 166
7.3 SQL:1999中的触发器 168
7.4 避免链式反应 174
参考文献注解 174
习题 175
第8章 在应用中使用SQL 176
8.1 所涉及的主要问题 176
8.2 嵌入式SQL 177
8.2.1 状态处理 179
8.2.2 会话、连接和事务 180
8.2.3 执行事务 180
8.2.4 游标 182
8.2.5 服务器上的存储过程 186
8.3 深入完整性约束 188
8.4 动态SQL 189
8.4.1 动态SQL中的语句准备 190
8.4.2 预备语句和描述符区域 191
8.4.3 游标 192
8.4.4 服务器上的存储过程 193
8.5 JDBC和SQLJ 194
8.5.1 JDBC基础 194
8.5.2 预备语句 196
8.5.3 结果集和游标 196
8.5.4 获得关于结果集的信息 198
8.5.5 状态处理 198
8.5.6 执行事务 199
8.5.7 服务器上的存储过程 199
8.5.9 SQLJ:面向Java的语句级接口 200
8.5.8 一个例子 200
8.6 ODBC 203
8.6.1 预备语句 204
8.6.2 游标 204
8.6.3 状态处理 206
8.6.4 执行事务 206
8.6.5 服务器上的存储过程 206
8.6.6 一个例子 207
参考文献注解 208
8.7 比较 208
习题 209
第三部分 数据库管理系统性能优化和事务处理 212
第9章 物理数据组织与索引 212
9.1 磁盘组织 212
9.2 堆文件 218
9.3 顺序文件 221
9.4 索引 224
9.4.1 聚集索引与非聚集索引 226
9.4.2 稀疏索引与稠密索引 228
9.4.3 搜索码包含多个属性 229
9.5 多级索引 230
9.5.1 索引顺序访问 233
9.5.2 B+树 235
9.6 散列索引 240
9.6.1 静态散列 240
9.6.2 动态散列算法 242
9.7.1 位图索引 246
9.7 特殊用途索引 246
9.7.2 连接索引 248
9.8 调优问题:为应用选择索引 248
参考文献注解 249
习题 249
第10章 查询处理基础 252
10.1 查询处理概述 252
10.2 外部排序 253
10.3 投影、集合并与集合差 256
10.4 选择 257
10.4.1 简单条件的选择 258
10.4.2 访问路径 259
10.4.3 复杂条件的选择 260
10.5 连接 261
10.5.1 简单的嵌套循环连接 262
10.5.2 归并连接 264
10.5.3 散列连接 266
10.6 多关系连接 267
习题 268
10.7 聚集函数 268
参考文献注解 268
第11章 查询优化概述 270
11.1 查询处理的架构 270
11.2 基于关系代数等价性的启发式优化 271
11.3 查询执行计划的开销估计 273
11.4 输出结果大小的估计 279
11.5 选择一个计划 281
习题 284
参考文献注解 284
第12章 数据库调优 288
12.1 磁盘高速缓存 288
12.2 模式调优 290
12.2.1 索引 291
12.2.2 反向规范化 295
12.2.3 重复组 296
12.2.4 分片 297
12.3 数据操纵语言调优 298
12.5 管理物理资源 300
12.4 工具 300
12.6 影响优化器 301
参考文献注解 303
习题 303
第13章 事务处理概述 307
13.1 隔离性 307
13.1.1 可串行性 308
13.1.2 两阶段加锁 309
13.1.3 死锁 312
13.1.4 关系数据库加锁 312
13.1.5 隔离级别 314
13.1.6 加锁粒度与意向锁 317
13.1.7 小结 318
13.2 原子性与持久性 319
13.2.1 先写式日志 319
13.2.2 从大容量存储器故障中恢复 322
13.3 实现分布式事务 322
13.3.1 原子性与持久性——两阶段提交协议 323
13.3.2 全局可串行性与死锁 325
13.3.3 复制 326
13.3.4 小结 328
参考文献注解 328
习题 328
第四部分 软件工程问题和文档 332
第14章 需求与规约 332
14.1 软件工程方法学 332
14.2 学生注册系统的需求文档 334
14.3 需求分析——新的问题 339
14.4 学生注册系统的规约说明 340
14.5 学生注册系统的规约文档:第Ⅲ部分 341
14.6 软件工程过程的下一步 342
参考文献注解 343
习题 343
15.1 设计过程 344
15.1.1 数据库设计 344
第15章 设计、编码与测试 344
15.1.2 用UML状态图描述对象的行为 345
15.1.3 设计文档的结构 346
15.1.4 设计评审 347
15.2 测试计划 348
15.3 项目计划 350
15.4 编码 351
15.6 项目管理计划 353
15.5 增量开发 353
15.7 学生注册系统的设计与编码 354
15.7.1 完成数据库设计:完整性约束 354
15.7.2 注册事务的设计 356
15.7.3 注册事务的部分代码 357
参考文献注解 359
习题 359
第五部分 数据库高级主题 362
第16章 对象数据库介绍 362
16.1 关系数据模型的不足 362
16.2.1 对象与值 366
16.2 概念对象数据模型 366
16.2.2 类 367
16.2.3 类型 367
16.2.4 对象-关系数据库 370
16.3 SQL:1999和SQL:2003中的对象 370
16.3.1 行类型 371
16.3.2 用户定义类型 371
16.3.3 对象 372
16.3.5 更新用户定义类型 373
16.3.4 查询用户定义类型 373
16.3.6 引用类型 375
16.3.7 继承 377
16.3.8 集合类型 377
参考文献注解 379
习题 380
第17章 XML和Web数据介绍 382
17.1 半结构化数据 382
17.2 XML概述 384
17.2.1 XML元素与数据库对象 386
17.2.2 XML属性 387
17.2.3 命名空间 390
17.2.4 DTD 392
17.2.5 DTD作为数据定义语言的不足 393
17.3 XML模式 395
17.3.1 XML模式和命名空间 395
17.3.2 简单类型 398
17.3.3 复杂类型 401
17.3.4 整合 406
17.3.5 捷径:匿名类型与元素引用 407
17.3.6 完整性约束 410
17.4 XML查询语言 414
17.4.1 XPath:一种轻量级的XML查询语言 415
17.4.2 SQL/XML 420
参考文献注解 426
习题 427
参考文献 431
索引 437