数据库与事务处理
作者 : Philip M. Lewis, Arthur Bernstein, Michael Kifer
译者 : 施伯乐 周向东 方锦城 等
丛书名 : 计算机科学丛书
出版日期 : 2005-05-23
ISBN : 7-111-15718-4
定价 : 85.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 729
开本 : 16开
原书名 : Databases and Transaction Processing:An Application-Oriented Approach
原出版社: Addison-Wesley
属性分类: 教材
包含CD :
绝版 :
图书简介

本书对数据库和事务处理应用的设计和实现过程进行了全面、详细的介绍,主要内容涉及数据库和事务处理的基本知识、数据库管理、数据库和事务处理的前沿主题等。本书的重点在于如何设计、实现数据库与事务处理应用,而不是实现数据库系统本身,强调了事务处理在数据库系统中的地位,同时保留了经典关系数据库理论的体系框架。本书篇幅宏大,讲述透彻,适合作为高等院校计算机及相关专业数据库及事务处理课程的教材或参考书,从事数据库管理和开发的技术人员也可以从本书中了解到所需的知识。
  如需获得本书的补充材料请访问www.aw.com/cssupport.

图书特色

图书前言

在当今的信息社会中,数据库和事务处理系统扮演着重要的角色。事实上,我们每天与之交互的任何大型系统,其核心都有一个数据库。这些系统可能是帮助我们处理日常生活中琐碎事务的系统(比如,超级市场付款系统),也可能是与我们的生活息息相关的十分重要的系统(比如,航空交通控制系统)。在今后的几十年中,我们会更加依赖于这些系统,依赖于它们的准确性和高效性。
  我们认为,为了设计、建造、维护和管理这些高复杂性的系统,每一个计算机科学家和信息系统专家都应该熟悉这些系统的基本理论概念和工程概念。

本书可以作为下述课程的教材:
  * 本科生或研究生的数据库入门课程。
  * 本科生或研究生的事务处理课程,该课程为已经学过数据库入门课程的学生开设。
  * 高年级本科生或低年级研究生的数据库课程,该课程为已经学过数据库入门课程的学生开设。
  只要课程同时涵盖数据库和事务处理的内容,教师就可以选择与两个主题均相关的材料。
  本书更关注怎样构建应用程序而不是构建数据库管理系统本身。我们相信大部分学生未来要实现应用程序,只有很少一部分学生会去构建数据库管理系统。因为事务处理提供应用程序访问数据库的机制,所以我们将把数据库的知识放在事务处理中讲解,以此来体现我们的教学重点。此外,本书包含丰富的材料来描述事务用来访问数据库的语言和API,比如嵌入式SQL、ODBC和JDBC。
  本书既包括一些传统的主题(关系数据库、SQL和事务的ACID性质),也讨论比较前沿的主题,比如对象和对象-关系数据库,XML和因特网文档处理以及与因特网商务相关的事务问题等。
  尽管本书包含很多数据库和事务处理应用实例,但我们主要关心这些主题下的概念而不是某些商务系统和应用程序的细节。因而,在本书的数据库知识部分,我们着重介绍与关系和对象数据模型相关的概念,而非商业数据库管理系统的概念。即使SQL被废弃,这些概念仍是数据库处理的基础。(回想学习COBOL的那代程序员,他们若学习其他语言极为困难。)类似地,在本书的事务处理部分,我们着重介绍ACID性质的概念和实现它们的有关技术问题,而不是某些商业数据库管理系统或TP监控器(TP monitor)。
  为加强学生对技术的理解,我们加入一个事务处理应用的案例研究(学生注册系统),该案例将贯穿本书始终。尽管本书中的学生注册系统并不是非常有趣,但它的特点是:所有的学生都作为用户与这样的系统交互过。更重要的是,它是一个内容很丰富的应用,所以我们可以使用它说明很多有关数据库设计、查询处理和事务处理的问题。
  本书的独特之处在于,它介绍了实现事务处理应用所需的软件工程概念(使用学生注册系统作为例子)。由于很多信息系统的失败源于项目管理不善和应用不适当的软件工程过程,所以我们觉得这些主题应该成为教学的重点。我们对软件工程问题的讨论很简短,学生可以选择关于该主题的课程深入学习。我们相信,当学生领会后,他们会更能理解和应用学习材料。因为本课程不是软件工程课程,在课上我们不会对此作全面讲解,而是让学生自己去阅读并且要求他们在课程项目中去实践软件工程。我们将在学生注册系统中探讨相关问题,同时阐明数据库和事务处理的要点。

概述
  本书中的材料可供三个学期使用。本书的前半部分可用于数据库课程。对于完成了数据库课程的学生,本书的后半部分着重讲述事务处理和数据库高级主题。在我所就职的学校,我们提供本科(入门的)和研究生(高级的)两种数据库课程,同时也提供本科和研究生两个版本的事务处理课程。
  本书分成五个部分,这样教师可以更方便地组织教学材料。我们还有一张“各章之间的关系表”可以使定制课程更加容易。

第一部分:绪论
  第1章~第3章包括入门性的材料,适用于初级数据库课程。第1章提供概括性的介绍。第2章简要地说明SQL和事务处理的ACID性质。将这些基础材料放在书的开始部分,就可以免除后面在安排所讨论主题顺序方面的一些束缚。
  第3章讨论学生注册系统和与其实现有关的软件工程概念。我们将详细地讨论需求和规格说明文档,以及用来设计图形用户界面的应用软件生成器的使用。在我所就职的学校所开设的数据库入门课程中,我们不在课堂上讲述这些内容,而是要求学生自己去阅读这些材料。在学完这一章后我们开始课程项目,首先要求学生书写规格说明文档。

第二部分:数据库管理
  第4章~第15章是初级数据库课程的核心部分。所涵盖的主题有:
  * 关系的概念和SQL的DDL特性,包括自动约束检查。
  * E-R(实体-联系)模型和模式设计,包括将E-R图转换到关系模式的方法(以及它们的局限性)。
  * 关系代数、关系演算和SQL的DML特性,特别要关注通过关系代数和关系演算的语义表达复杂SQL查询。
  * 函数依赖和规范化,包括把关系模式分解为3NF、BCNF和4NF的算法。
  * 触发器和动态数据库,包括SQL:1999中的触发器。
  * 在传统编程语言中嵌入SQL语句,包括嵌入式SQL、动态SQL、ODBC、JDBC和SQLJ。还将讨论最近为存储过程而标准化的语言SQL/PSM。
  * 数据和索引的物理组织,包括B+树、ISAM和散列索引。
  * 查询过程和优化,包括选择和联结的算法,以及估算查询计划的代价的方法。
  应用到学生注册系统的软件工程问题将贯穿于这些章中。在5.7节,我们讲述系统的数据库设计,包括E-R图和关系模式。第12章讲述设计文档、测试计划文档和完成系统所需的项目计划。在12.6节,我们介绍详细的设计,并举一个Java/JDBC程序片段的例子,该程序实现系统的某一个事务。
  第15章概述随后的几章中关于事务处理的部分内容。如果课程时间允许,它可以用来丰富数据库课程。

第三部分:数据库的高级主题
  第16章~第19章包含高级数据库课程的部分主题。高级数据库课程包括第三部分的所有章和第27章的内容。据我们的经验,由于时间紧张,初级数据库课程很难包括第7、8、9、10、11和14章,所以在高级数据库课程中也可以加入这些章。第三部分中的主题有:
  * 对象和对象-关系数据库,包括概念模式、ODMG数据库、SQL:1999对象-关系扩展和CORBA。
  * Web文档处理的数据库问题,包括对XML Schema、XPath、XSLT和XQuery的详细讨论。
  * 分布式数据库,包括异构和同构系统、多重数据库、分段、半联结、全局查询优化、查询设计和分布式数据库设计。
  * 联机分析处理和数据挖掘,包括星型模型、CUBE和ROLLUP操作符、联合和分类。

第四部分:事务处理
  第20章~第27章和第9章以及第10章的部分内容包括事务处理一个学期课程所需的材料。这些章中的很多实例都涉及学生注册系统的设计,我们在第3章、第12章和5.7节设计该系统。我们要求学生阅读这些材料。
  第20章详细讲述事务的ACID性质。第21章、第22章描述多种不同的事务模型和在一个分布式的异构的C/S(客户/服务器模型)环境中事务处理系统的体系结构。其中的主题有:
  * 事务模型,包括存储点、链事务、事务队列、嵌套和多级事务、分布式事务、多重数据库系统和工作流系统。
  * 事务处理系统的体系结构,包括集中式和分布式数据库的客户/服务器组织方式、双层和三层体系结构、TP监控器和事务管理器。事务远程过程调用和点对点通信,以及它们在事务处理系统的组织中的使用。
  * 事务体系结构的实现和因特网事务处理应用程序的模型。
  第23章~第26章描述ACID性质中的原子性、隔离性和持久性如何在集中式和分布式系统中实现。其主题包括:
  * 抽象数据库的并发控制,包括严格的两段锁、乐观的并发控制、基于时间戳的并发控制、对象数据库的并发控制和为实现不同的事务模型而制定的加锁协议。
  * 关系数据库的并发控制,包括不同隔离级别下的加锁协议、在每个隔离级别下正确和不正确的调度实例、粒度加锁、索引加锁和多版本并发控制,其中包括SNAPSHOT隔离级别。
  * 日志和恢复,包括提前写日志、转储和检测点。
  * 分布式事务,包括两阶段提交协议、全局可串行化、全局死锁以及管理冗余数据的同步和异步算法。
  第27章讲述安全和因特网商务。该章涉及下列主题:
  * 对称和非对称加密、数字签名、盲签名和证书。
  * 用于认证和密钥分发的Kerberos协议。
  * 因特网协议,包括用于认证和会话加密的SSL协议、用于安全交易的SET协议、电子现金协议以及保证货物原子性、已验证交付和货币原子性的协议。
  第20章~第27章的目标是:
  * 使学生明白事务处理系统的体系结构,这样他们可以更好地评估系统提供商提供的功能。
  * 描述实现事务ACID性质的代价,该代价可通过系统资源和性能衡量。
  * 描述可以减少代价的多种技术。比如粒度锁、索引、反规范化和表分段。
  * 描述即便隔离不全时应用程序仍然可以正确执行的情形。例如,在隔离级别比SERIALIZABLE稍弱时事务仍然可以正确执行。
  本书附录A中包括的某些系统问题对于理解本书的部分内容很重要。其中包括模块化系统和封装的基本原理、客户/服务器体系结构基础、多路程序设计和线程以及进程间通信基础。如果学生在先前的课程中还没学到上述内容的话,教师可以选择其中的一些内容进行介绍。

章与章之间的关系
  为帮助教师根据课程的需要选择本书内容,我们用星号标记一些可跳过(但不影响该章整体结构)的小节。尽管可跳过的小节可能有时被后面的材料所引用,但这些引用是可以被忽略的。此外,练习题会根据其难度级别用一个或两个星号标记。
  根据课程目的,有多种使用本书的方式。为指导教师安排课程,表1列出可以包含在5门不同的课程中的章,这5门不同的课程适合不同的学生,强调了不同的教学重点。在这张表里,“是”表明该章中的所有内容都应该包含在课程中。“部分”意味着教师可以只选择其中一部分进行讲授。“阅读”表明该章可以布置为学生的阅读作业。
  第1列标记数据库入门课程所需的章。在该课程里,可能只包括第8章关于规范化的部分内容,或许只包括介绍性的章节。类似地,第10章只涵盖关于SQL嵌入宿主语言的不同方法的部分内容—或许只需包含适用于课程项目的一种方法。
  第2、3列描述两门紧凑的数据库入门课程。第2列的课程在数据库应用方面来展开课程材料,而第3列更面向理论。第10章在面向应用的材料中提供更加深入的规范化理论、查询语言基础和查询优化。尽管我们把这些材料描述成面向理论的,但是它也同样是面向系统的,因为它包括数据库管理系统设计的问题。在我所就职的学校,我们选择这两列当作本科生课程(如何选择这两种课程可根据教师的兴趣决定)。
  第4列描述一门高级数据库课程。在课程刚开始的时候,教师可以给学生复习或补充他认为必须的入门知识。这些知识可以在第7、8、9、10和14章中找到。接下来的课程讲述高级数据库主题和一些在电子商务中关于事务处理的知识。在我所就职的学校,这门课程用于研究生教学,而研究生在本科阶段已经学过数据库基础课程。
  第5列描述一门事务处理课程。该课程也假设学生已经学过数据库入门课程。在我所就职的学校,研究生和本科生都开设了这门课程。事务处理的知识需要有相关资料的补充。而这些资料,比如第9、10章中的一些知识,可能没有被包括进数据库基础课程。  
  为进一步调整课程,下面的各章之间关系图可能有所帮助(见图1)。该图指出两种依赖关系。实线说明某一章依赖于另外一章中的除可选章节外的绝大部分知识。而虚线说明依赖较弱,也就是说只依赖于某章中的一小部分概念,这些概念在课堂上可以很快地带过。第27章的依赖比较特殊,它可以安排在事务处理课程的末尾,因为它依赖于第21、22和25章,也可以安排在数据库课程的末尾,因为它依赖于第15章。

补充材料
  除本书之外,下面的补充材料有助于教师的教学工作:
  * 在线的所有章的PPT演示文档。
  * 在线的书中所有图的PPT幻灯片。
  * 在线解决方案指南,包括练习题的答案。
  * 我们认为读者可能感兴趣的额外的参考资料、注意事项、勘误表、家庭作业、测验等等。
  要获得上述补充材料,请访问本书的网址 www.aw.com/cssupport。只有教师(通过联络Addison-Wesley销售代表)能得到解决方案指南和PPT。(读者可登录华章网站下载习题答案和PPT。)
图1  各章之间的关系图

致谢
  我们真诚地感谢下列的审校人员,他们的意见和建议极大地改进了本书的质量。
Suad Alagic(Wichita大学)
Catriel Beeri(Hebrew大学)
Rick Cattel(Sun公司)
Jan Chomicki(SUNY Buffalo)
Henry A. Etlinger(罗切斯特理工学院)
Leonidas Fegaras(德克萨斯大学阿灵顿分校)
Alan Fekete(悉尼大学)
Johannes Gehrke(康内尔大学)
Jiawei Han(Simon Fraser大学)
Peter Honeyman(密歇根大学)
Vijay Kumar(Missouri大学)
Jonathan Lazar(Towson大学)
Dennis McLeod(南加利福尼亚大学)
Rokia Missaoui(Quebec大学)
Clifford Neuman(南加利福尼亚大学)
Fabian Pascal(顾问)
Sudha Ram(亚利桑那大学)
Krithi Ramamritham(UMass Amherst and IIT Bombay)
Andreas Reuter(International University in Germany, Bruchsal)
Arijit Sengupta(佐治亚州立大学)
Munindar P. Singh(北卡罗莱纳州立大学)
Greg Speegle(贝勒大学)
Junping Sun(Nova Southeastern大学)
Joe Trubisz(顾问)
Vassilis J. Tsotras(加利福尼亚大学里弗赛德分校)
Emilia E. Villarreal(加利福尼亚州立工业大学)
Gottfried Vossen(Muenster大学)
Don Chamberlin、Daniela Florescu、Jim Gray、Pankaj Gupta、Rob Kelly和C. Mohan很热心地为我们提供额外信息和解答我们的问题,在此向他们表示感谢。
  David S. Warren和Radu Grosu在教学中采用了本书的beta版本,并为本书提出了有用的意见和建议。Joe Trubicz不仅在本书手稿完成时进行了审校,并且对许多章的初始版本提供了关键性的意见。
  Ziyang Duan、Shiyong Lu、Guizhen Yang和Yan Zhang等学生帮助了我们核对本书中的错误。
  十分感谢Stony Brook计算机科学系全体教师,特别是Kathy Germana在工作期间给予我们的帮助。
  特别感谢Addison-Wesley的编辑Maite Suarez-Rivas在初期组织内容与方法以及在编写本书的整个过程中所起的重要作用。我们也同时感谢Addison-Wesley的其他员工,Katherine Harutunian、Pat Mahtani、Diane Freed、Regina Hagen、Paul Anagnostopoulos和Jacqui Scarlott 出色地完成了本书编辑和发行工作。
  最后,我们要感谢我们的妻子Rhoda、Edie和Lora在编写这本书时给予我们很多的支持和鼓励。

译者简介

施伯乐 周向东 方锦城 等:暂无简介

译者序

从关系数据库理论之发轫到商用数据库管理系统的大规模应用,如今,“数据库”已经成为广大读者所熟悉的名词,各种数据库教材不胜枚举。本书把抽象的数据库理论与具体的应用案例结合起来,从数据库应用系统设计的角度,对数据库与事务处理的基本概念与理论进行系统的阐述,作者们对素材的选取和把握,给人留下了深刻印象。
  本书的重点在于如何设计、实现数据库与事务处理应用,而不是实现数据库管理系统本身,强调了事务处理在数据库系统中的核心地位。同时,保留了经典关系数据库理论的体系框架。根据数据库与事务处理技术新的发展,本书对Web数据管理、分布式数据库、数据挖掘等新型数据库技术进行了系统解析。书中各章都附有大量的习题与参考文献,便于读者研习。如作者们指出的,本书既可以作为低年级本科生的数据库基础课程教材,也适宜作为研究生的高级数据库与事务处理教材。
  本书的第1章~第5章由陈金海教授翻译,第6章~第10章、第12章~第15章由许建军博士翻译,第11章、第20章~第23章由严和平博士翻译,第16章~第19章以及附录由周向东博士翻译,第24章~第27章由方锦城副教授翻译。施伯乐教授、周向东博士对全书的翻译进行了统稿与审校。
  本书篇幅宏大,内容丰富,立意新颖,不仅覆盖了数据库、事务处理理论与应用的方方面面,对与数据库相关的软件工程和操作系统的知识也多有涉及。由于译者水平有限,难免有翻译不妥与错误之处,敬请广大读者、同仁批评指正。

译  者

图书目录

第一部分  绪   论
第1章  数据库和事务概述 2
1.1  什么是数据库和事务 2
1.2  现代数据库和事务处理系统的特点 4
1.3  实现和支持数据库与事务处理系统的主要成员 6
1.4  决策支持系统—OLAP和OLTP 7
1.5  练习 8
第2章  进阶 10
2.1  案例研究:学生注册系统 10
2.2  关系数据库概述 10
2.3  怎样使程序成为事务 14
2.4  参考书目 18
2.5  练习 18
第3章  案例研究:开发学生注册系统 20
3.1  软件工程方法学 20
3.2  需求文档 21
3.3  需求分析——新问题 26
3.4  应用程序生成器 27
3.5  图形用户界面和对象 27
3.6  事件和过程 30
3.7  访问数据库和执行事务 32
3.8  详细说明学生注册系统 33
3.9  规格说明文档 34
3.10  参考书目 35
3.11  练习 35
第二部分  数据库管理
第4章  关系数据模型 38
4.1  什么是数据模型 38
4.2  关系模型 40
4.2.1  基本概念 41
4.2.2  完整性约束 43
4.3  SQL——数据定义子语言 48
4.3.1  指定关系类型 49
4.3.2  系统目录 49
4.3.3  键约束 50
4.3.4  处理空缺信息 50
4.3.5  语义约束 51
4.3.6  用户自定义域 53
4.3.7  外键约束 54
4.3.8  反应性约束 56
4.3.9  数据库视图 58
4.3.10  修改已有的定义 59
4.3.11  SQL-模式 60
4.3.12  访问控制 60
4.4  参考书目 62
4.5  练习 62
第5章  数据库设计I:实体-联系模型 64
5.1  E-R方法的概念建模 64
5.2  实体和实体类型 65
5.3  联系和联系类型 67
5.4  E-R方法的高级特性 71
5.4.1  实体类型层次结构 71
5.4.2  参与约束 74
5.5  一个经纪公司的例子 76
5.6  E-R方法的局限性 79
5.7  案例研究:学生注册系统的设计 82
5.8  参考书目 86
5.9  练习 86
第6章  查询语言Ⅰ:关系代数和SQL 88
6.1  关系代数:在SQL的覆盖之下 88
6.1.1  基本运算符 89
6.1.2  导出运算符 96
6.2  SQL的查询子语言 101
6.2.1  简单的SQL查询 101
6.2.2  集合运算 106
6.2.3  嵌套查询 108
6.2.4  数据的聚合 112
6.2.5  简单查询计算算法 117
6.2.6  再论SQL中的视图 118
6.2.7  空值的窘境 122
6.3  在SQL中修改关系实例 123
6.4  参考书目 127
6.5  练习 127
第7章  查询语言Ⅱ:关系演算和可视化查询语言 131
7.1  元组关系演算 131
7.2  通过元组关系演算理解SQL 138
7.3  域关系演算和可视化查询语言 140
7.4  可视化查询语言:QBE和PC数据库 143
7.5  关系代数和关系演算之间的联系 148
7.6  SQL:1999中的递归查询 150
7.7  参考书目 155
7.8  练习 155
第8章  数据库设计Ⅱ:关系规范化理论 157
8.1  冗余所带来的问题 157
8.2  分解 158
8.3  函数依赖 160
8.4  函数依赖的性质 161
8.5  范式 165
8.6  分解的性质 167
8.6.1  无损分解与有损分解 168
8.6.2  依赖保持分解 170
8.7  分解BCNF的一个算法 173
8.8  3NF模式的合成 175
8.8.1  最小覆盖 175
8.8.2  通过模式合成的3NF分解 177
8.8.3  通过3NF合成的BCNF分解 178
8.9  第四范式 180
8.10  高级4NF设计* 183
8.10.1  MVD和它们的性质 183
8.10.2  设计4NF的困难性 184
8.10.3  如何进行4NF分解 187
8.11  范式分解的总结 188
8.12  案例研究:学生注册系统的模式精化 188
8.13  性能调整问题:是否进行分解 190
8.14  参考书目 191
8.15  练习 192
第9章  触发器和动态数据库 195
9.1  触发器处理的语义 195
9.2  SQL:1999中的触发器 197
9.3  避免链式反应 202
9.4  参考书目 203
9.5  练习 203
第10章  真实世界中的SQL 205
10.1  在应用程序中执行SQL语句 205
10.2  嵌入式SQL 206
10.2.1  状态处理 208
10.2.2  会话、连接和事务 209
10.2.3  执行事务 210
10.2.4  游标 212
10.2.5  服务器存储过程 216
10.3  再论完整性约束 218
10.4  动态SQL 219
10.4.1  动态SQL的语句预备 220
10.4.2  预备语句和描述符区 222
10.4.3  游标 224
10.4.4  服务器端的存储过程 224
10.5  JDBC和SQLJ 225
10.5.1  JDBC的基本概念 225
10.5.2  预处理语句 227
10.5.3  结果集和游标 227
10.5.4  获取结果集的信息 229
10.5.5  状态处理 230
10.5.6  执行事务 230
10.5.7  服务器端的存储过程 231
10.5.8  示例 231
10.5.9  SQLJ:Java的语句级接口 231
10.6  ODBC* 234
10.6.1  预处理语句 235
10.6.2  游标 236
10.6.3  状态处理 238
10.6.4  执行事务 238
10.6.5  服务器端的存储过程 238
10.6.6  示例 239
10.7  比较 240
10.8  参考书目 240
10.9  练习 241
第11章  数据的物理组织和索引 243
11.1  磁盘组织 243
11.2  堆文件 247
11.3  排序文件 249
11.4  索引 251
11.4.1  聚簇索引与非聚簇索引 254
11.4.2  稀疏索引和稠密索引 256
11.4.3  包含多个属性的查找键 257
11.5  多级索引 259
11.5.1  索引顺序访问 261
11.5.2  B+树 263
11.6  散列索引 269
11.6.1  静态散列 269
11.6.2  动态散列算法 271
11.7  特殊用途的索引 277
11.7.1  位图索引 277
11.7.2  联结索引 278
11.8  调整问题:为一个应用选择索引 278
11.9  参考书目 279
11.10  练习 279
第12章  案例研究:实现学生注册系统 282
12.1  设计文档 282
12.1.1  文档结构 283
12.1.2  设计评审 284
12.2  测试计划 285
12.3  项目计划 287
12.4  编程 289
12.5  渐进式开发 290
12.6  学生注册系统的设计和编程 291
12.6.1  完成数据库设计:完整性约束 291
12.6.2  设计注册事务 293
12.6.3  部分注册事务程序 295
12.7  参考书目 297
12.8  练习 297
第13章  查询处理基础 298
13.1  外部排序 298
13.2  计算投影、并和差 301
13.3  计算选择 303
13.3.1  具有简单条件的选择 303
13.3.2  存取路径 304
13.3.3  具有复杂条件的选择 306
13.4  计算联结 307
13.4.1  用嵌套循环来计算联结 307
13.4.2  排序-合并联结 309
13.4.3  散列联结 310
13.5  多关系联结 311
13.6  计算聚合函数 313
13.7  调优问题:对物理数据库设计的影响 313
13.8  参考书目 314
13.9  练习 314
第14章  查询优化概述 316
14.1  查询处理概述 316
14.2  基于代数等价的启发式优化 317
14.3  估计查询执行计划的代价 320
14.4  估计输出的大小 326
14.5  选择计划 327
14.6  调整问题:对查询设计的影响 330
14.7  参考书目 332
14.8  练习 333
第15章  事务处理概述 336
15.1  隔离性 336
15.1.1  可串行化 337
15.1.2  两段锁 338
15.1.3  死锁 340
15.1.4  关系数据库中的锁 341
15.1.5  隔离级别 342
15.1.6  锁粒度和意向锁 344
15.1.7  用意向锁的可串行化封锁策略 345
15.1.8  总结 346
15.2  原子性和持久性 346
15.2.1  先写日志 347
15.2.2  从大规模存储器失效中恢复 348
15.3  实现分布式事务 349
15.3.1  原子性和持久性——两阶段提交协议 350
15.3.2  全局可串行性和死锁 351
15.3.3  复制 352
15.3.4  总结 353
15.4  参考书目 353
15.5  练习 354
第三部分  数据库的高级主题
第16章  对象数据库 356
16.1  关系数据模型的缺点 356
16.2  发展历史 361
16.3  概念上的对象数据模型 363
16.3.1  对象和值 363
16.3.2  类 364
16.3.3  类型 365
16.3.4  对象-关系数据库 367
16.4  ODMG标准 367
16.4.1  ODL:ODMG对象定义语言 370
16.4.2  OQL:ODMG 对象查询语言 374
16.4.3  ODMG中的事务 377
16.4.4  ODMG中的对象操纵 378
16.4.5  语言绑定 378
16.5  SQL:1999中的对象 382
16.5.1  行类型 382
16.5.2  用户定义类型 383
16.5.3  对象 384
16.5.4  查询用户定义类型 385
16.5.5  更新用户定义类型 385
16.5.6  引用类型 387
16.5.7  集合类型 389
16.6  公共对象请求代理体系结构 389
16.6.1  CORBA基础 390
16.6.2  CORBA和数据库 394
16.7  小结 398
16.8  参考书目 398
16.9  练习 399
第17章  XML 和 Web数据 401
17.1  半结构化数据 401
17.2  XML概述 403
17.2.1  XML元素和数据库对象 406
17.2.2  XML属性 407
17.2.3  命名空间 409
17.2.4  文档类型定义 412
17.2.5  DTD作为数据定义语言的不足 414
17.3  XML Schema 415
17.3.1  XML Schema和命名空间 416
17.3.2  简单类型 418
17.3.3  复杂类型 422
17.3.4  一个完整的Schema文档 428
17.3.5  完整性约束 431
17.4  XML查询语言 436
17.4.1  XPath:一种轻量的XML查询语言 436
17.4.2  XSLT:XML的一种转换语言 442
17.4.3  XQuery:XML的一个功能完善的查询语言 450
17.4.4  小结 464
17.5  参考书目 464
17.6  练习 465
第18章  分布式数据库 469
18.1  应用设计者对数据库的观点 470
18.2  在不同数据库中分布数据 472
18.2.1  分段 472
18.2.2  更新和分段 474
18.2.3  复制 475
18.3  查询策略 476
18.3.1  全局查询优化 476
18.3.2  多数据库系统的策略 481
18.3.3  调整问题:分布式环境下的数据库设计和查询计划 481
18.4  参考书目 482
18.5  练习 482
第19章  OLAP和数据挖掘 484
19.1  OLAP和数据仓库 484
19.2  OLAP应用的多维模型 485
19.3  聚合 488
19.3.1  下钻、上卷、切片和切块 488
19.3.2  CUBE操作符 490
19.4  ROLAP和MOLAP 494
19.5  实现中的一些问题 495
19.6  数据挖掘 495
19.7  数据仓库的数据载入 499
19.8  参考书目 500
19.9  练习 500
第四部分  事务处理
第20章  事务的ACID性质 504
20.1  一致性 504
20.2  原子性 506
20.3  持久性 507
20.4  隔离性 508
20.5  事务的ACID性质 510
20.6  参考书目 512
20.7  练习 512
第21章  事务模型 513
21.1  平坦事务 513
21.2  提供事务的结构 514
21.2.1  存储点 514
21.2.2  分布式事务 515
21.2.3  嵌套事务 518
21.2.4  多级事务 520
21.3  把应用分解成多个事务 523
21.3.1  链式事务 523
21.3.2  用可恢复队列调度事务 526
21.3.3  扩展事务 529
21.3.4  工作流和工作流管理系统 531
21.4  参考书目 534
21.5  练习 535
第22章  事务处理系统的体系结构 537
22.1  集中式系统中的事务处理 537
22.1.1  单用户系统的组织 537
22.1.2  集中式多用户系统的组织 538
22.2  分布式系统上的事务处理 539
22.2.1  分布式系统的组织 540
22.2.2  会话和上下文信息 544
22.2.3  队列事务处理 545
22.3  异构系统和TP监控器 546
22.3.1  事务管理器 547
22.3.2  TP监控器 548
22.4  TP监控器:通信和全局原子性 550
22.4.1  远程过程调用 551
22.4.2  对等通信 556
22.4.3  事务中异常情况的处理 558
22.5  因特网上的事务处理 560
22.5.1  一般的体系结构 561
22.5.2  因特网上事务系统的组织 563
22.6  参考书目 564
22.7  练习 564
第23章  隔离性的实现 566
23.1  调度和等价调度 567
23.1.1  串行化 570
23.1.2  冲突等价与观察等价 571
23.1.3  串行图 572
23.2  可恢复性、级联异常中止和严格性 574
23.3  并发控制的模型 576
23.4  立即更新的悲观并发控制策略 577
23.4.1  避免冲突 577
23.4.2  死锁 579
23.5  立即更新的悲观并发控制的设计 580
23.5.1  锁集和等待集的实现 580
23.5.2  两段锁 581
23.5.3  锁的粒度 582
23.6  对象和语义交换* 583
23.7  结构化事务模型中的隔离 587
23.7.1  存储点 587
23.7.2  链式事务 588
23.7.3  可恢复队列 588
23.7.4  嵌套事务 589
23.7.5  多级事务* 589
23.8  其他的并发控制 592
23.8.1  时间戳顺序的并发控制 593
23.8.2  乐观的并发控制 594
23.9  参考书目 597
23.10  练习 597
第24章  关系数据库中的隔离性 601
24.1  加锁 601
24.1.1  幻影 602
24.1.2  谓词加锁 603
24.2  加锁与SQL隔离级别 605
24.2.1  更新丢失、游标稳定性和更新锁 609
24.2.2  案例研究:正确性和非可串行级调度——学生注册系统 612
24.2.3  可串行化、SERIALIZABLE和正态的 617
24.3  粒度加锁:概念锁和索引锁 618
24.3.1  索引锁:无幻影的粒度加锁 619
24.3.2  对象数据库里的粒度加锁* 624
24.4  系统性能的改进 625
24.5  多版本并发控制 626
24.5.1  只读型的多版本并发控制 627
24.5.2  读取一致性的多版本并发控制 628
24.5.3  SNAPSHOT隔离级别 628
24.6  参考书目 633
24.7  练习 633
第25章  原子性和持久性 637
25.1  崩溃、异常中止和介质故障 637
25.2  直接型更新系统和先写型日志 638
25.2.1  性能和先写型登录 641
25.2.2  检测点和恢复 644
25.2.3  逻辑型登录和物理逻辑型登录* 648
25.3  延迟更新系统的恢复 649
25.4  介质故障的恢复 650
25.5  参考书目 653
25.6  练习 653
第26章  分布式事务的实现 655
26.1  ACID特性的实现 655
26.2  原子终止 656
26.2.1  两阶段提交协议 657
26.2.2  两阶段提交协议中故障的处理 661
26.2.3  格式和协议:X/Open标准 664
26.2.4  对等原子提交协议 664
26.3  协调的传递 665
26.3.1  线性提交协议 665
26.3.2  无准备状态的两阶段提交协议 666
26.4  分布式死锁 666
26.5  全局可串行化 667
26.6  不能保证全局原子性的场合 668
26.7  复制数据库 670
26.7.1  同步更新复制系统 672
26.7.2  异步更新复制系统 674
26.8  现实世界里的分布式事务 677
26.9  参考书目 677
26.10  练习 678
第27章  安全性与因特网商务 681
27.1  认证、授权与加密 681
27.2  加密 681
27.3  数字签名 684
27.4  密钥发布与认证 686
27.4.1  Kerberos协议:票据 687
27.4.2  临时串 690
27.5  授权 690
27.6  已认证的远程过程调用 692
27.7  因特网商务 693
27.7.1  SSL协议:证书 693
27.7.2  SET协议:对偶签名 695
27.7.3  货物原子性、托管与已认证交付 698
27.7.4  电子现金:盲签名 700
27.8  参考书目 705
27.9  练习 705
附   录
附录A  关于系统的问题 708
附录B  参考文献 716

教学资源推荐
作者: (英)David Hand,Heikki Mannila,Padhraic Smyth
作者: John Adolph Palinski
作者: 试题研究编写组
作者: 何玉洁 编著
参考读物推荐
作者: 柳遵梁 潘敏君 应以峰 著 周亮 审校
作者: 何勇 陈晓峰 著
作者: 周启海等