第一部分 背景 2
第1章 数据库简介 2
1.1 引言 3
1.2 传统的基于文件的系统 4
1.2.1 基于文件的方法 5
1.2.2 基于文件方法的局限性 8
1.3 数据库方法 10
1.3.1 数据库 10
1.3.2 数据库管理系统(DBMS) 11
1.3.3 (数据库)应用程序 12
1.3.4 DBMS环境的组成部分 13
1.3.5 数据库设计:范型改变 15
1.4 数据库环境中的各种角色 16
1.4.1 数据管理员和数据库管理员 16
1.4.2 数据库设计人员 16
1.4.3 应用开发人员 17
1.4.4 终端用户 17
1.5 数据库管理系统的历史 17
1.6 DBMS的优点和缺点 20
本章小结 23
思考题 23
习题 24
扩展阅读 25
第2章 数据库环境 26
2.1 ANSI-SPARC三层体系结构 27
2.1.1 外部层 28
2.1.2 概念层 28
2.1.3 内部层 28
2.1.4 模式、映射和实例 29
2.1.5 数据独立性 30
2.2 数据库语言 30
2.2.1 数据定义语言(DDL) 31
2.2.2 数据操作语言(DML) 31
2.2.3 第四代语言 32
2.3 数据模型和概念建模 33
2.3.1 基于对象的数据模型 34
2.3.2 基于记录的数据模型 34
2.3.3 物理数据模型 36
2.3.4 概念建模 36
2.4 DBMS的功能 36
本章小结 39
思考题 40
习题 40
扩展阅读 41
第3章 数据库的结构与Web 42
3.1 多用户DBMS结构 42
3.1.1 远程处理 43
3.1.2 文件服务器结构 43
3.1.3 传统的两层客户-服务器结构 44
3.1.4 三层客户-服务器结构 45
3.1.5 N层客户-服务器结构 47
3.1.6 中间件 47
3.1.7 事务处理监视器 49
3.2 Web服务与面向服务的结构 50
3.2.1 Web服务 50
3.2.2 面向服务的结构(SOA) 51
3.3 分布式DBMS 53
3.4 数据仓库 54
3.5 云计算 56
3.5.1 云计算的好处与风险 58
3.5.2 基于云的数据库方案 60
3.6 DBMS的组件 63
3.7 Oracle的体系结构 65
3.7.1 Oracle的逻辑数据库结构 65
3.7.2 Oracle的物理数据库结构 67
本章小结 71
思考题 71
习题 72
扩展阅读 72
第二部分 关系模型与语言 74
第4章 关系模型 74
4.1 关系模型简史 74
4.2 基本术语 76
4.2.1 关系数据结构 76
4.2.2 数学中的关系 78
4.2.3 数据库中的关系 79
4.2.4 关系的性质 79
4.2.5 关系关键字 80
4.2.6 关系数据库模式的表示 81
4.3 完整性约束 83
4.3.1 空 83
4.3.2 实体完整性 83
4.3.3 引用完整性 84
4.3.4 一般性约束 84
4.4 视图 84
4.4.1 术语 85
4.4.2 视图的用途 85
4.4.3 视图的更新 86
本章小结 86
思考题 86
习题 87
扩展阅读 87
第5章 关系代数与关系演算 88
5.1 关系代数 88
5.1.1 一元运算 90
5.1.2 集合运算 91
5.1.3 连接运算 93
5.1.4 除法运算 96
5.1.5 聚集运算和分组运算 96
5.1.6 关系代数运算小结 97
5.2 关系演算 98
5.2.1 元组关系演算 99
5.2.2 域关系演算 101
5.3 其他语言 103
本章小结 103
思考题 104
习题 104
扩展阅读 106
第6章 SQL:数据操作 107
6.1 SQL简介 108
6.1.1 SQL的目标 108
6.1.2 SQL的历史 109
6.1.3 SQL的重要性 110
6.1.4 术语 110
6.2 书写SQL命令 110
6.3 数据操作 111
6.3.1 简单查询 112
6.3.2 查询结果排序(ORDER BY子句) 118
6.3.3 使用SQL聚集函数 119
6.3.4 查询结果分组(GROUP BY子句) 121
6.3.5 子查询 123
6.3.6 ANY和ALL 125
6.3.7 多表查询 126
6.3.8 EXISTS和NOT EXISTS 131
6.3.9 合并结果表(UNION、INTERSECT和EXCEPT) 132
6.3.10 数据库更新 133
本章小结 136
思考题 137
习题 137
第7章 SQL:数据定义 140
7.1 ISO SQL数据类型 141
7.1.1 SQL标识符 141
7.1.2 SQL标量数据类型 141
7.2 完整性增强特性 145
7.2.1 必须有值的数据 145
7.2.2 域约束 145
7.2.3 实体完整性 146
7.2.4 引用完整性 147
7.2.5 一般性约束 148
7.3 数据定义 148
7.3.1 创建数据库 149
7.3.2 创建表(CREATE TABLE) 149
7.3.3 修改表定义(ALTER TABLE) 152
7.3.4 删除表(DROP TABLE) 153
7.3.5 创建索引(CREATE INDEX) 153
7.3.6 删除索引(DROP INDEX) 154
7.4 视图 154
7.4.1 创建视图(CREATE VIEW) 154
7.4.2 删除视图(DROP VIEW) 156
7.4.3 视图分解 157
7.4.4 视图的局限性 157
7.4.5 视图的可更新性 158
7.4.6 WITH CHECK OPTION 159
7.4.7 视图的优缺点 160
7.4.8 视图物化 161
7.5 事务 162
7.6 自主访问控制 163
7.6.1 授予其他用户权限(GRANT) 164
7.6.2 撤销用户权限(REVOKE) 166
本章小结 167
思考题 168
习题 168
第8章 高级SQL 171
8.1 SQL编程语言 171
8.1.1 声明 172
8.1.2 赋值 173
8.1.3 控制语句 173
8.1.4 PL/SQL的异常 175
8.1.5 PL/SQL的游标 176
8.2 子程序、存储过程、函数和包 178
8.3 触发器 179
8.4 递归 184
本章小结 185
思考题 185
习题 186
扩展阅读 186
第9章 对象关系DBMS 187
9.1 高级数据库应用 188
9.2 RDBMS的缺点 191
9.3 在关系数据库中存储对象 195
9.3.1 将类映射为关系 196
9.3.2 访问关系数据库中的对象 197
9.4 对象关系数据库系统简介 198
9.5 SQL:2011 200
9.5.1 行类型 201
9.5.2 用户自定义类型 201
9.5.3 子类型和超类型 204
9.5.4 用户自定义例程 206
9.5.5 多态性 207
9.5.6 引用类型和对象标识 208
9.5.7 创建表 208
9.5.8 数据查询 210
9.5.9 集类型 211
9.5.10 类型视图 214
9.5.11 持久化存储模块 215
9.5.12 触发器 215
9.5.13 大对象 217
9.5.14 递归 219
9.6 Oracle中面向对象的扩展 219
9.6.1 用户自定义数据类型 219
9.6.2 操作对象表 223
9.6.3 对象视图 224
9.6.4 权限 225
本章小结 226
思考题 226
习题 226
扩展阅读 227
第三部分 数据库分析与设计 230
第10章 数据库系统开发生命周期 230
10.1 信息系统生命周期 231
10.2 数据库系统开发生命周期 231
10.3 数据库规划 233
10.4 系统定义 233
10.5 需求收集与分析 234
10.5.1 集中式方法 235
10.5.2 视图集成方法 235
10.6 数据库设计 237
10.6.1 数据库设计方法 237
10.6.2 数据建模 238
10.6.3 数据库设计的阶段划分 238
10.7 DBMS选型 240
10.8 应用程序设计 243
10.8.1 事务设计 243
10.8.2 用户界面设计指南 244
10.9 建立原型系统 246
10.10 实现 246
10.11 数据转换与加载 246
10.12 测试 247
10.13 运行维护 247
10.14 CASE工具 248
本章小结 249
思考题 250
习题 250
扩展阅读 251
第11章 数据库分析与DreamHome案例研究 252
11.1 使用实况发现技术的时机 253
11.2 收集实况的类型 253
11.3 实况发现技术 254
11.3.1 分析文档资料 254
11.3.2 面谈 254
11.3.3 观察企业的运作 255
11.3.4 研究 256
11.3.5 问卷调查 256
11.4 使用实况发现技术的实例 256
11.4.1 DreamHome案例研究——概述 257
11.4.2 DreamHome案例研究——数据库规划 260
11.4.3 DreamHome案例研究——系统定义 264
11.4.4 DreamHome案例研究——需求收集与分析 266
11.4.5 DreamHome案例研究——数据库设计 271
本章小结 271
思考题 271
习题 271
扩展阅读 272
第12章 实体-联系建模 273
12.1 实体类型 274
12.2 联系类型 275
12.2.1 联系类型的度 276
12.2.2 递归联系 278
12.3 属性 279
12.3.1 简单属性和组合属性 279
12.3.2 单值属性和多值属性 279
12.3.3 导出属性 280
12.3.4 关键字 280
12.4 强实体类型与弱实体类型 282
12.5 联系的属性 282
12.6 结构化约束 283
12.6.1 一对一(1∶1)联系 283
12.6.2 一对多(1∶*)联系 284
12.6.3 多对多(*∶*)联系 285
12.6.4 复杂联系的多重性 287
12.6.5 基数约束和参与性约束 288
12.7 ER模型的问题 289
12.7.1 扇形陷阱 289
12.7.2 断层陷阱 291
本章小结 292
思考题 293
习题 293
第13章 增强的实体-联系建模 295
13.1 特殊化/泛化 295
13.1.1 超类和子类 296
13.1.2 超类/子类联系 296
13.1.3 属性的继承 297
13.1.4 特殊化过程 297
13.1.5 泛化过程 298
13.1.6 特殊化/泛化的约束 300
13.1.7 基于DreamHome案例研究的Branch视图特殊化/泛化建模示例 301
13.2 聚合 304
13.3 组合 305
本章小结 306
思考题 306
习题 307
扩展阅读 308
第14章 规范化 309
14.1 规范化的目的 310
14.2 规范化对数据库设计的支持 310
14.3 数据冗余与更新异常 311
14.3.1 插入异常 312
14.3.2 删除异常 312
14.3.3 修改异常 312
14.4 函数依赖 313
14.4.1 函数依赖的特征 313
14.4.2 识别函数依赖 316
14.4.3 利用函数依赖确定主关键字 318
14.5 规范化过程 318
14.6 第一范式(1NF) 320
14.7 第二范式(2NF) 323
14.8 第三范式(3NF) 325
14.9 2NF和3NF的一般化定义 326
本章小结 327
思考题 328
习题 328
第15章 进一步规范化 332
15.1 函数依赖的进一步讨论 333
15.1.1 函数依赖的推导规则 333
15.1.2 最小函数依赖集 334
15.2 Boyce-Codd范式(BCNF) 335
15.3 规范化到BCNF的过程小结 337
15.4 第四范式(4NF) 342
15.4.1 多值依赖 342
15.4.2 第四范式的定义 343
15.5 第五范式(5NF) 343
15.5.1 无损连接依赖 343
15.5.2 第五范式的定义 344
本章小结 345
思考题 345
习题 346
扩展阅读 346
第四部分 方法学 348
第16章 方法学——概念数据库设计 348
16.1 数据库设计方法学简介 349
16.1.1 什么是设计方法学 349
16.1.2 概念、逻辑和物理数据库设计 349
16.1.3 成功设计数据库的关键因素 349
16.2 数据库设计方法学概述 350
16.3 概念数据库设计方法学 352
步骤1 建立概念数据模型 352
本章小结 363
思考题 364
习题 364
第17章 方法学——关系模型的逻辑数据库设计 366
17.1 关系模型的逻辑数据库设计方法学 366
步骤2 建立逻辑数据模型 366
本章小结 389
思考题 390
习题 390
扩展阅读 392
第18章 方法学——关系数据库的物理数据库设计 394
18.1 逻辑数据库设计与物理数据库设计的比较 395
18.2 物理数据库设计方法学概述 395
18.3 关系数据库的物理数据库设计方法学 396
步骤3 转换逻辑数据模型以适应目标DBMS 396
步骤4 设计文件组织方法和索引 399
步骤5 设计用户视图 410
步骤6 设计安全机制 410
本章小结 411
思考题 411
习题 412
第19章 方法学——运行时系统的监控与调优 413
19.1 逆规范化与可控冗余的引入 413
步骤7 考虑引入可控冗余 413
19.2 监控系统以提高性能 423
步骤8 监控系统和系统调优 423
本章小结 426
思考题 427
习题 427
扩展阅读 427
第五部分 可选的数据库专题 430
第20章 安全与管理 430
20.1 数据库安全 430
20.2 对策——基于计算机的控制 433
20.2.1 授权 434
20.2.2 访问控制 435
20.2.3 视图 437
20.2.4 备份和恢复 437
20.2.5 完整性 438
20.2.6 加密 438
20.2.7 RAID(独立磁盘冗余阵列) 439
20.3 Microsoft Office Access DBMS的安全机制 441
20.4 Oracle DBMS的安全机制 443
20.5 DBMS与Web安全 445
20.5.1 代理服务器 446
20.5.2 防火墙 446
20.5.3 报文摘要算法和数字签名 447
20.5.4 数字证书 447
20.5.5 Kerberos 448
20.5.6 安全套接字层和安全HTTP 448
20.5.7 安全电子交易和安全交易技术 449
20.5.8 Java安全 449
20.5.9 ActiveX安全 451
20.6 数据管理与数据库管理 451
20.6.1 数据管理 452
20.6.2 数据库管理 452
20.6.3 数据管理与数据库管理的比较 453
本章小结 453
思考题 454
习题 455
扩展阅读 455
第21章 数据管理中的职业、法律与道德问题 457
21.1 定义IT中的法律与道德问题 457
21.1.1 定义IT中的道德规范 458
21.1.2 道德行为与合法行为的差别 458
21.1.3 IT中的道德行为 459
21.2 若干法规及其对IT功能的影响 460
21.2.1 美国证券交易委员会(SEC)推出的规制国家市场体系(NMS) 460
21.2.2 萨班斯-奥克斯利法案、COBIT和COSO 460
21.2.3 健康保险流通和责任法案(HIPAA) 462
21.2.4 欧盟数据保护法令1995 463
21.2.5 英国数据保护法令(DPA)1998 464
21.2.6 信息访问法规 464
21.2.7 国际银行业——巴塞尔Ⅱ协议 465
21.3 建立守法、道德的数据管理文化 466
21.3.1 制定本组织内关于法律和道德行为的政策 467
21.3.2 行业组织和伦理守则 467
21.3.3 制定DreamHome组织内部关于法律和道德行为的政策 469
21.4 知识产权 470
21.4.1 专利 470
21.4.2 版权 471
21.4.3 (注册)商标 471
21.4.4 软件的知识产权问题 471
21.4.5 数据的知识产权问题 472
本章小结 473
思考题 473
习题 474
扩展阅读 474
第22章 事务管理 475
22.1 支持事务处理 476
22.1.1 事务的性质 478
22.1.2 数据库体系结构 478
22.2 并发控制 479
22.2.1 并发控制的必要性 479
22.2.2 可串行性与可恢复性 481
22.2.3 加锁方法 487
22.2.4 死锁 492
22.2.5 时间戳方法 494
22.2.6 多版本时间戳排序 497
22.2.7 乐观技术 498
22.2.8 数据项的粒度 499
22.3 数据库恢复 501
22.3.1 恢复的必要性 501
22.3.2 事务和恢复 502
22.3.3 恢复机制 504
22.3.4 恢复技术 506
22.3.5 分布式DBMS的恢复 508
22.4 高级事务模型 508
22.4.1 嵌套事务模型 509
22.4.2 Saga 510
22.4.3 多级事务模型 511
22.4.4 动态重构 512
22.4.5 工作流模型 513
22.5 Oracle中的并发控制与恢复 513
22.5.1 Oracle的隔离级别 514
22.5.2 多版本读一致性 514
22.5.3 死锁检测 516
22.5.4 备份和恢复 516
本章小结 518
思考题 519
习题 519
扩展阅读 521
第23章 查询处理 522
23.1 查询处理概述 523
23.2 查询解析 525
23.3 查询优化的启发式方法 528
23.3.1 关系代数运算的转换规则 529
23.3.2 启发式处理策略 532
23.4 关系代数运算的代价估算 533
23.4.1 数据库的统计信息 534
23.4.2 选择运算 534
23.4.3 连接运算 540
23.4.4 投影运算 546
23.4.5 关系代数的集合运算 547
23.5 其他可选的执行策略 548
23.5.1 流水线 549
23.5.2 线性树 549
23.5.3 物理算子和执行策略 550
23.5.4 缩小搜索空间 551
23.5.5 枚举左深树 551
23.5.6 语义查询优化 553
23.5.7 其他查询优化方法 553
23.5.8 分布式查询优化 554
23.6 查询处理与优化 554
23.7 Oracle的查询优化 558
23.7.1 基于规则和基于代价的优化 558
23.7.2 柱状图 560
23.7.3 查看执行计划 562
本章小结 563
思考题 564
习题 564
扩展阅读 566
附 录 568
附录A DreamHome案例研究的用户需求说明 568
附录B 其他案例研究 572
附录C 可选的ER建模表示法 581
附录D 关系数据库设计方法学总结 584
附录E 轻量级RDBMS:Pyrrho简介 588