数据库系统概念(原书第7版)
作者 : [美] 亚伯拉罕·西尔伯沙茨 (Abraham Silberschatz) [美] 亨利·F. 科思 (Henry F. Korth) [印] S. 苏达尔尚(S. Sudarshan) 著
译者 : 杨冬青 李红燕 张金波 等译
丛书名 : 计算机科学丛书
出版日期 : 2021-06-02
ISBN : 978-7-111-68181-6
适用人群 : 高年级本科生或低年级研究生,相关技术人员
定价 : 149.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 820
开本 : 16
原书名 : Database System Concepts,Seventh Edition
原出版社: McGraw-Hill
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

《数据库系统概念》是数据库系统方面的经典教材之一,其内容由浅入深,既包含数据库系统基本概念,又反映数据库技术新进展。它被国际上许多大学所采用,包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学等。

图书特色

数据库领域的殿堂级作品,数据库理论与实战兼修的必备之选

图书前言

数据库管理已经从一种专门的计算机应用发展为几乎所有企业中的一个核心成分,因此,有关数据库系统的知识已成为计算机科学教育中必不可少的部分。在本书中,我们讲述数据库管理的基本概念,这些概念包括数据库设计、数据库语言、数据库系统实现等多个方面。
本书可作为三年级或四年级本科生数据库入门课程的教科书,也可作为一年级研究生的教科书。除了涵盖入门课程的基本内容外,本书还包括可作为课程补充材料或作为高级课程介绍性材料的高级内容。
我们仅要求读者熟悉基本的数据结构、计算机组成和一种高级程序设计语言,例如Java、C、C++或Python。概念都以直观的方式加以描述,其中的许多概念基于我们大学运行的例子加以阐释。本书中包括重要的理论结果,但省略了形式化证明,取而代之的是用图表和例子来说明为什么结论是正确的。对于形式化描述和研究结果的证明,读者可以参见参考文献中列出的研究论文和高级教材。
本书中包括的基本概念和算法通常基于当今商用或试验性的数据库系统中采用的概念和算法。我们的目标是在通用环境下描述这些概念和算法,没有与某个特定的数据库系统绑定,虽然在恰当的时候我们确实提供了对某些特定系统的引用。
在第7版中,我们保持了前面版本的总体风格,同时对内容和结构进行了更新来反映数据库设计、管理和使用的方式所发生的变化。其中一个重要的变化是“大数据”系统的广泛应用。我们还考虑了数据库概念在教学方面的发展趋势,并在适当的地方做出了推动这些趋势的修改。
本版本中最值得注意的变化如下:
广泛涵盖了大数据系统的内容,既从用户的角度介绍(第10章),也从系统内部的角度介绍(第20~23章),与第6版相比有大量的内容扩充和改进。
增加了新的一章“区块链数据库”(第26章),介绍区块链技术及其在企业应用中日益增长的作用。这一章的一个重要焦点是区块链系统与数据库系统之间的交互。
对涉及数据库内部的所有各章(第12~19章)进行了修改,以融入固态硬盘、主存数据库、多核系统和列存储等当代技术。
对于使用JSON、RDF和SPARQL进行半结构化数据管理做了更多的描述(8.1节)。
更新了对于时态数据(7.10节)、数据分析(第11章)和诸如写优化的索引等高级索引技术(14.8节和24.2节)的描述。
为更好地支持含有实操部分的课程(对于任何数据库课程,这都是我们强烈推荐的方式),对一些章节进行了重新组织和更新,包括使用当代的应用开发工具和大数据系统,如Apache Hadoop和Spark。
所有更新源于我们收到的许多意见和建议,这些意见和建议来自第6版的读者以及我们在耶鲁大学、理海大学、印度理工学院孟买校区的学生,也源于我们自己对数据库技术发展的观察和分析。
本书的内容
除第1章外,本书共十一部分,具体如下:
引言(第1章)。第1章对数据库系统的性质和目标进行一般性综述。我们解释了数据库系统的概念是如何发展的,各数据库系统的共同特性是什么,数据库系统能为用户做什么,以及数据库系统如何与操作系统交互。我们还引入了一个数据库应用的例子:一个包括多个系、教师、学生和课程的大学。这个应用作为贯穿全书的运行实例。这一章本质上是激励性、历史性和解释性的。
第一部分:关系语言(第2~5章)。第2章介绍数据的关系模型,包括关系数据库的结构、数据库模式、码、模式图、关系查询语言、关系运算和关系代数等基本概念。第3~5章主要介绍最具影响力的面向用户的关系语言:SQL。对于一个设计完成的模式,这部分描述了查询、修改、插入和删除等数据操作。虽然这里详细讲述了数据定义的语法,但关于模式设计的问题将推迟到第二部分讲述。
第二部分:数据库设计(第6~7章)。第6章概要介绍数据库设计过程并详细描述实体-联系数据模型。实体-联系模型为数据库设计问题以及在数据模型的约束下捕获现实应用的语义时所遇到的问题提供了一个高层视图。UML类图表示也在这一章中讲述。第7章介绍关系数据库设计。这一章讲述了函数依赖和规范化的理论,重点强调了提出各种范式的动机,以及它们的直观含义。这一章以关系设计的概览开始,依赖于对函数依赖的逻辑蕴涵的直观理解。这使得规范化的概念可以在全面讨论函数依赖理论之前先做介绍,而函数依赖理论将在本章稍后部分讨论。授课教师可以只选用这些直观描述的内容,而不会丢失连贯性。不过,完整地讲授这一章将有利于学生对规范化概念形成较好的理解,从而引导他们去学习函数依赖理论中一些较艰深的概念。这一章的最后一节讲述时态数据建模。
第三部分:应用程序设计和开发(第8~9章)。第8章讨论几种对于应用程序设计和开发非常重要的复杂数据类型,包括半结构化数据、基于对象的数据、文本数据和空间数据。虽然XML在数据库环境中的流行度正在消减,但我们还是保留了对XML的介绍,同时增加了对JSON、RDF和SPARQL的介绍。第9章讨论用于构建交互式的基于Web的数据库应用和移动数据库应用的工具与技术。这一章对服务器端和客户端都进行了详细介绍,所包括的主题有: Java服务器端程序(servlet)、JSP、Django、Java描述语言(JavaScript)和Web服务。同时,还对以下主题进行了讨论:应用体系结构、对象-关系映射系统(包括Hibernate和Django)、性能(包括使用memcached和Redis的缓存)和确保Web应用安全的独特挑战。
第四部分:大数据分析(第10~11章)。第10章概述大规模数据分析应用,重点讲述与传统的数据库应用相比,这些应用如何对数据管理提出不寻常的要求,然后讨论了这些要求是如何得到满足的。所阐述的主题有:包括分布式文件系统在内的大数据存储系统、键值存储和NoSQL系统、MapReduce、Apache Spark、流数据和图数据库。这里对这些系统和概念与前面介绍的数据库概念之间的关联做了重点讲解。第11章讨论为大规模数据分析而设计的系统的结构和使用。这一章首先解释了数据分析、商业智能和决策支持的概念,并在此基础上讨论了数据仓库的结构和将数据收集到仓库中的过程。然后,讲述了仓库中的数据在OLAP应用中的使用,并对数据挖掘算法和技术进行了概述。
第五部分:存储管理和索引(第12~14章)。第12章讨论存储设备以及这些设备的特性如何影响数据库的物理组织和性能。第13章讨论数据存储结构,包括文件组织和缓冲区管理。第14章讲述多种数据存取技术。首先对基于多级索引的数据存取进行描述,进而对B+树进行详细介绍。然后介绍B+树不太适用的那些应用的索引结构,包括诸如LSM树和缓冲树等写优化的索引,位图索引,使用k-d树、四分树和R树的空间数据索引等。
第六部分:查询处理和优化(第15~16章)。第15~16章阐述查询处理和查询优化。第15章重点讲述数据库操作的实现算法,特别是为无法完全放入主存中的非常大的数据而设计的各种各样的连接算法。这一章还讲述了用于主存数据库的查询处理技术。第16章讲述查询优化,首先展示了如何使用转换规则将查询计划转换为与之等价的其他计划,然后描述了如何估计查询执行代价,以及如何高效地找出代价最小的查询执行计划。
第七部分:事务管理(第17~19章)。第17章着重介绍事务处理系统的基本概念:原子性、一致性、隔离性和持久性。这一章概述了用于保证这些特性的方法,包括基于日志的恢复和使用锁的并发控制、基于时间戳的技术以及快照隔离。仅需要对事务概念进行综述的课程可以只使用第17章,而不必使用这部分的其他章节,那些章节的内容要深入得多。第18章重点讲述并发控制,并介绍几种保证可串行化的技术,包括封锁、时间戳和乐观(有效性检查)技术。这一章讲述了多版本并发控制技术,包括广泛使用的快照隔离技术,以及一个保证可串行化的扩展技术。这一章还讨论了弱一致性级别、索引结构中的并发、主存数据库系统中的并发、长持续时间的事务、操作级别的并发和实时事务处理。第19章讨论在系统崩溃和存储器故障的情况下保证事务正确执行的主要技术,包括日志、检查点和数据库转储,以及使用远程备份系统的高可用性。这一章还介绍了提前释放锁的恢复和广泛使用的ARIES算法,讨论了主存数据库系统中的恢复以及NVRAM的使用。
第八部分:并行和分布式数据库(第20~23章)。第20章介绍计算机系统体系结构,并描述基本的计算机系统对于数据库系统的影响。这一章讨论了集中式系统、客户-服务器系统、并行和分布式体系结构以及基于云的系统。本部分的其余三章分别讲述并行和分布式数据库的不同方面,第21章讲述存储和索引,第22章讲述查询处理,第23章讲述事务处理。第21章讨论分区和数据偏斜、复制、并行索引、分布式文件系统(包括Hadoop文件系统)和并行的键值存储。第22章讨论多个查询间的并行和单个查询内的并行,包括并行和分布式排序与连接、MapReduce、流水线、Volcano交换算子模型、线程级并行、流数据以及地理上分散的查询的优化。第23章讨论传统的分布式处理方法(如两阶段提交),以及更复杂的解决方案(如Paxos和Raft)。这一章讲述了分布式并发控制的各种算法,包括副本管理和弱一致性级别,还讨论了CAP定理所包含的权衡和协调,以及使用版本向量和默克尔树(Merkle tree)来检测不一致性的方法。
第九部分:附录。附录A给出我们的大学模式的细节,包括完整的模式、DDL和所有的表。
第十部分:中文在线章节(第24~26章)。第24章对第14章的索引结构进行了扩展,详细讲述LSM树及其变种、位图索引、空间索引和动态散列技术。第25章扩展了第9章所涵盖的内容,讨论性能调整、基准测试,以及从遗产系统中移植、标准化和分布式目录系统。第26章从数据库的角度审视区块链技术,描述了区块链数据结构,以及使用加密散列函数和公钥加密来保证匿名性、无可辩驳性、防篡改性等区块链性质。这一章描述和比较了用于保证去中心化的分布式共识算法,包括工作量证明、权益证明和拜占庭(Byzantine)共识。这一章的大部分内容讨论使得区块链成为重要的数据库概念的那些特性,包括许可区块链的作用、智能合约中业务逻辑和协议的编码,以及跨区块链的互操作性。这一章还讨论了为达到数据库级别的事务处理性能所采用的技术。最后对当前和未来的企业区块链应用进行了综述。
第十一部分:英文在线章节(第27~32章)。可以在db-book.com上在线获取这些章节。我们提供了6章,涵盖了具有历史意义或者具有先进性的材料。第27章讲述“纯”查询语言:元组和域关系演算,以及Datalog(它的语法是仿照Prolog语言的)。第28章讲述关系数据库设计中的高级主题,包括多值依赖理论和第四范式,以及更高的范式。第29章讲述基于对象的数据库、诸如数组和多重集合类型等更复杂的数据类型,以及非1NF的表。第30章对第8章关于XML的讨论进行扩展。第31章讲述信息检索,讨论非结构化的文本数据的查询。第32章提供对PostgreSQL数据库系统的综述,面向的是专注于数据库内部层面的课程。这一章对于学生在PostgreSQL数据库的开放源码库上做课题特别有用。
在每一章的末尾我们都提供了一节—延伸阅读,其中的参考资料有助于学生对各章所包含的内容或者所涉及的相关领域的新进展继续深入学习。有时,延伸阅读一节会包括已成为尽人皆知的经典之作的原始渊源论文。另外,在线提供每一章的详细参考文献,并且为那些有意对各章所包含内容的某些部分进行深入学习的读者提供了参考资料。
第7版
第7版是由以下因素驱动产生的:我们收到的关于前面几版的意见和建议,我们在耶鲁大学、理海大学、印度理工学院孟买校区讲授本课程的体会,以及我们对于数据库技术发展方向的分析。
前面我们列举了这一版的主要新特性,包括:对大数据内容的广泛涵盖,为反映当代的硬件技术对所有各章所做的更新,半结构化数据管理,高级索引技术,以及关于区块链数据库的新的一章。除了这些主要的改动之外,我们对每一章都进行了修改,对较旧的内容进行了更新,增加了对数据库技术当前进展的讨论,改进了对学生认为难以理解的主题的描述。我们还增加了新的习题,并对参考文献进行了更新。
下面我们为原先使用第6版的教师列出这一版的较为重要的改变。
将关系代数移到了第2章,以帮助学生更好地理解作为SQL等查询语言的基础的关系运算。更深入地讲述关系代数还有利于学生更好地理解后面讨论查询处理和优化所需的代数运算。关系演算的两种变体现在都在在线章节中讲述,因为我们认为它们现在仅对更加面向理论化的课程有价值,而对于大多数的数据库课程来说是可以略掉的。
现在关于SQL的三章包含了数据库系统特定的SQL变体的更多细节,以帮助学生更好地完成实践作业。对于SQL与多重集合关系代数之间的关联也做了更详细的讲解。现在第4章包含了关于连接的所有材料,而以前自然连接是放在前面的章节中的。这一章还增加了用于生成唯一码值的序列和行级安全性的相关内容。特别有用的对JDBC API的当前扩展现在放到了第5章中,而对OLAP的讲述从这一章移到了第11章中。
对第6章进行了修改,将E-R图和E-R概念都放到了这一章中,而不是像以前的版本那样先讲述概念然后再介绍E-R图。我们认为这会帮助学生更好地理解E-R模型。
第7章改进了对时态数据建模的介绍,融入了SQL:2011时态数据库的特性。
第8章是新的一章,讲述复杂数据类型,包括诸如XML、JSON、RDF、SPARQL等半结构化数据,以及基于对象的数据、文本数据和空间数据。在第6版中详细介绍了基于对象的数据库、XML和文本数据上的信息检索,这些主题现在被简化后包含在第8章中,而第6版中原来的那些章节现在可以在线阅读。
第9章被大大地改写了,以反映当前的应用开发工具和技术,包括扩展了对JavaScript和用于构建动态Web界面的JavaScript库的介绍、对Python中采用Django架构的应用开发的介绍、对Web服务的介绍和对使用HTML5的断连操作的介绍,增加了使用Django的对象-关系映射内容,还对能够处理大事务负载的高性能应用的开发技术进行了讨论。
第10章是关于大数据的新的一章,从用户的角度讨论了大数据的概念和工具。这一章的内容包括大数据存储系统、MapReduce范式、Apache Hadoop和Apache Spark、流数据库和图数据库,目的是使读者对表象背后的事情有个大致的了解,以便能够使用大数据系统。后续的几章详细介绍了大数据的内部构件。
存储和文件结构被分成了两章。讲述存储的第12章经过更新后,更充分地描述了闪存,并包含了若干新技术—面向列的存储和主存数据库中的存储组织。讲述数据存储结构的第13章经过扩展后,现在包含了许多细节,例如自由空间图、划分,最重要的是面向列的存储。
讲述索引的第14章增加了写优化的索引结构,包括LSM树及其变种和缓冲树,它们有很好的应用前景。这一章对空间索引的介绍比较简短。在讲述高级索引技术的第24章中有对LSM树和空间索引的更详细介绍。现在第14章仅对位图索引进行了简单介绍,更详细的介绍则移到了第24章中。动态索引技术也被移到了第24章中,目前这一技术对实践不太重要。
讲述查询处理的第15章大大扩展了对查询处理中的流水线技术的介绍,增加了主存中关于查询处理的新素材,包括查询编译以及对空间连接的简单介绍。讲述查询优化的第16章包含了外连接和聚集等算子的等价规则的更多示例,更新了用于代价估计的统计信息的内容,改进了关于连接顺序优化算法的介绍。这一章中还增加了使用半连接和反连接运算对嵌套子查询去除相关的技术的介绍。
讲述并发控制的第18章包含了主存中并发控制的新素材。讲述恢复系统的第19章对于使用远程备份系统的高可用性给予了更多的重视。
关于并行数据库和分布式数据库的介绍进行了全面的修改。由于这两个领域从低层次的并行到地理上分散的系统都演进到了连续体(continuum)状态,因此我们现在一起展示这些主题。
第20章讲述数据库系统体系结构,在以前版本的基础上有很大的改变,包含了关于实际的互联网络(诸如树形或胖树结构)的新素材,大大扩展和更新了关于共享内存体系结构和缓存一致性的素材。这一章中有一个关于基于云的服务的新节,它涵盖了虚拟机和容器、平台即服务、软件即服务以及弹性。
第21章讲述并行和分布式存储,只有少部分内容在第6版中讲过,例如分区技术,本章中的其他内容都是新的。
第22章讲述并行和分布式查询处理,还是只有少数节已经包含在第6版中,例如排序、连接和少数几个关系运算的并行算法,本章中的其他内容几乎都是新的。
第23章讲述并行和分布式事务处理。这一章中有一些内容已经包含在第6版中,例如关于分布式数据库中的2PC、持久消息和并发控制的那几节,本章中的其他内容几乎都是新的。
与第6版一样,我们在附录A和用到大学数据库例子的各章中列出了该数据库的模式和样例关系实例,以便于理解。另外,我们在网站db-book.com上提供了整个例子的SQL数据定义语句,以及创建样例关系实例的SQL语句。这能激励学生直接在数据库系统上运行样例查询,并修改这些查询去进行更多的试验。上面没有列出的所有主题都在第6版的基础上有所更新,但总体结构相对来说没有改动。
章末材料
在每一章的末尾除了总结之外,还有一个术语回顾列表,用来帮助读者回顾这一章中讨论的关键主题。
与第6版一样,习题被划分成两部分:实践习题和习题。实践习题的解决方案在本书英文版的网站上公开发布。我们鼓励学生独立解决实践习题,然后用网站上的解决方案来检查自己的答案。习题的解答只有授课教师能得到(参看下面的“授课教师注意事项”,以获取如何得到题解的信息)。
许多章的末尾都有一个“工具”节,它提供了与该章的主题相关的软件工具的信息,其中一些工具可以用于实验室练习。大学数据库和习题中用到的其他关系的SQL DDL和样例数据在本书英文版的网站上可以得到,也可以用于实验室练习。
授课教师注意事项
可以用本书各章的不同子集来设计课程,某些章也可以用不同于本书中的顺序来讲授。下面列出了一些可能的安排。
第5章(高级SQL)。这一章可以跳过或推迟到后面讲授,而不会影响连续性。建议大多数课程至少较早地讲授5.1.1节,因为JDBC很可能会是学生实习的一个有用工具。
第6章(使用E-R模型的数据库设计)。如果教师愿意,这一章可以在第3~5章之前讲,因为第6章完全不依赖于SQL。但是,那些强调编程实习的课程可能会在学习SQL之后有各种各样的实验室练习,对这样的课程我们推荐在讲数据库设计之前先讲SQL。
第15章(查询处理)和第16章(查询优化)。入门性的课程可以去掉这两章,这对于任何其他章的讲授都没有影响。
第七部分(事务管理)。我们的讲述包括一章综述(第17章)和后续各章的详细讨论。如果计划把后面的章推迟到高级课程中去讲授,可以选择仅讲述第17章,而省略第18和19章。
第八部分(并行和分布式数据库)。我们的讲述包括一章综述(第20章)与后续各章关于存储、查询处理和事务等主题的讨论。如果计划把后面的章推迟到高级课程中去讲授,可以选择仅讲述第20章,而省略第21~23章。
第十一部分(英文在线章节)。第27章(形式关系查询语言)可以在第2章之后讲SQL之前讲授,入门性课程也可以省略这一章。另外5个英文在线章节(高级关系数据库设计、基于对象的数据库、XML、信息检索和PostgreSQL)可以用作自学材料,入门性课程可以去掉它们。
基于本书的教学大纲可以在本书英文版的网站上找到。
本书英文版网站和英文补充材料
本书英文版网站的网址是db-book.com,其中包括:
本书所有各章的幻灯片。
实践习题的答案。
6个在线章节。
实验素材,包括大学模式和习题中用到的SQL DDL和样例数据,大量实验练习和相关项目示例,以及关于建立和使用各种数据库系统和工具的说明。
最新勘误表。
下列附加材料仅有教师可以获得:
包括书中所有习题的答案的教师手册。
包括额外习题的问题库。
扫描二维码可获得的中文材料
本书采用一书一码的方式,即一本书对应一个专有的二维码(见本书前面的衬纸)。扫描二维码获取阅读权限后,可浏览以下电子数据资源。
第十部分(包括高级索引技术、高级应用开发、区块链数据库等高级主题)。
索引。
未来我们还可能通过该二维码提供更多的增值服务,例如习题答案、老师的授课视频等。
联系我们
我们已尽了最大的努力来避免在本书中出现排版错误、内容疏忽等。然而,与新发布的软件类似,错误在所难免,在本书英文版的网站中提供了一个最新勘误表。如果你能指出尚未包含在最新勘误表中的本书的疏漏之处,我们将十分感激。
我们很高兴能收到你对改进本书的建议,也很欢迎你对本书英文版网站做出对其他读者有用的贡献,例如程序设计习题、课程实习建议、在线实验室和指南以及授课要点等。
电子邮件请发到db-book-authors@cs.yale.edu,来信请寄至Avi Silberschatz,Department of Computer Science,Yale University, 51 Prospect Street, P.O. Box 208285, New Haven, CT 06520-8285 USA。
致谢
许多人对第7版以及之前的6版提供了帮助,我们对他们致以诚挚的谢意。
第7版
Ioannis Alagiannis和Renata Borovica-Gajic撰写了可以在线获取的描述PostgreSQL数据库的第32章。这一章是对第6版中PostgreSQL章的完全重写,第6版中的那一章是由Anastasia Ailamaki、Sailesh Krishnamurthy、Spiros Papadimitriou、Bianca Schroeder、Karl Schnaitter和Gavin Sherry撰写的。
Judi Paige帮助制作了插图和演示幻灯片,并处理了文字编辑等事宜。
Mark Wogahn保证了生成本书文本的软件正常工作,包括LaTex宏和字体等。
Sriram Srinivasan对于并行和分布式数据库部分的反馈使我们受益匪浅。
N. L. Sarda对第6版和第7版的一些节给出了具有洞察力的反馈。
Bikash Chandra 和 Venkatesh Emani协助对“应用程序开发”一章进行了更新,并创建了样例代码。
印度理工学院孟买校区的学生(特别是Ashish Mithole)对预印本中有关并行和分布式数据库的章节提出了意见。
耶鲁大学、理海大学和印度理工学院孟买校区的学生对第6提给出了意见。
Jeffrey Anthony(Synaptic公司的合伙人兼CTO)以及理海大学的学生Corey Caplan(现在是 Leavitt Innovations的联合创始人之一)、Gregory Cheng、Timothy LaRowe和Aaron Rotem对新的区块链章节提出了有益的意见和建议。
前面各版
Hakan Jakobsson(Oracle)撰写了第6版中关于Oracle数据库系统的一章;Sriram Padmanabhan(IBM)撰写了第6版中关于IBM DB2 数据库系统的一章;Sameet Agarwal、José A. Blakeley、Thierry D’Hers、Gerald Hinson、Dirk Myers、Vaqar Pirzada、Bill Ramos、Balaji Rathakrishnan、Michael Rys、Florian Waas和Michael Zwilling撰写了第6版中关于Microsoft SQL Server数据库系统的一章,特别是José Blakeley组织和编辑了这一章,遗憾的是他现在已经不和我们在一起了;César Galindo-Legaria、Goetz Graefe、Kalen Delaney和Thomas Casey对Microsoft SQL Server这一章以前的版本做出了贡献,现在,这些章没有包含在第7版中。
Anastasia Ailamaki、Sailesh Krishnamurthy、Spiros Papadimitriou、Bianca Schroeder、Karl Schnaitter和Gavin Sherry撰写了第6版中关于Postgre SQL的一章。
Daniel Abadi审阅了第5版的目录,并协助进行了调整。
作为本书的审阅人,Steve Dolins(佛罗里达大学)、Rolando Fernanez(乔治·华盛顿大学)、Frantisek Franek(麦克马斯特大学)、Latifur Khan(得克萨斯大学达拉斯分校)、Sanjay Madria(密苏里科技大学)、Aris Ouksel(伊利诺伊大学)和Richard Snodgrass(滑铁卢大学)的意见对于第6版的最终定稿帮助很大。
Judi Paige帮助制作了插图和演示幻灯片。
Mark Wogahn保证了生成本书文本的软件正常工作,包括LaTex宏和字体。
N. L. Sarda的反馈帮助我们改进了好几章,Vikram Pudi促使我们替换掉早先的银行模式,Shetal Shah对几章内容给出了反馈。
耶鲁大学、理海大学和印度理工学院孟买校区的学生对第5版以及第6版的预印本给出了意见。
Chen Li 和 Sharad Mehrotra为第5版提供了关于JDBC和安全性的素材。
Marilyn Turnamian 和 Nandprasad Joshi为第5版提供了秘书服务,Marilyn还为第5版准备了一个封面设计的早期版本。
Lyn Dupré对第3版进行了审查,Sara Strandtman对第3版进行了文字编辑。
Nilesh Dalvi、Sumit Sanghai、Gaurav Bhalotia、Arvind Hulgeri、K. V. Raghavan、Prateek Kapadia、Sara Strandtman、Greg Speegle和Dawn Bezviner协助准备了前面各版的教师手册。
用船作为封面概念的部分想法最初是Bruce Stephan建议的。
以下人士对本书的第5版和前面各版提出了建议和意见:R. B. Abhyankar, Hani Abu-Salem, Jamel R. Alsabbagh, Raj Ashar, Don Batory, Phil Bernhard, Christian Breimann, Gavin M. Bierman, JanekBogucki, Haran Boral, Paul Bourgeois, PhilBohannon, Robert Brazile, Yuri Breitbart, Ramzi Bualuan, Michael Carey, Soumen Chakrabarti, Tom Chappell, Zhengxin Chen, Y. C. Chin, Jan Chomicki, Laurens Damen, Prasanna Dhan- dapani, Qin Ding, Valentin Dinu, J. Edwards, Christos Faloutsos, Homma Farian, Alan Fekete, Frantisek Franek, Shashi Gadia, Hector Garcia-Molina, Goetz Graefe, Jim Gray, Le Gruenwald, Eitan M. Gurari, William Hankley, Bruce Hillyer, Ron Hitchens, Chad Hogg, Arvind Hulgeri, Yannis Ioannidis, Zheng Jiaping, Randy M. Kaplan, Graham J. L. Kemp, Rami Khouri, Hyoung-Joo Kim, Won Kim, Henry Korth (father of Henry F.), Carol Kroll, Hae Choon Lee, SangWon Lee, Irwin Levinstein, Mark Llewellyn, Gary Lindstrom, Ling Liu, Dave Maier, Keith Marzullo, Marty Maskarinec, Fletcher Mattox, Sharad Mehrotra, Jim Melton, Alberto Mendelzon, Ami Motro, Bhagirath Narahari, Yiu-Kai Dennis Ng, Thanh-Duy Nguyen, Anil Nigam, Cyril Orji, Meral Ozsoyoglu, D. B. Phatak, Juan Altmayer Pizzorno, Bruce Porter, Sunil Prabhakar, Jim Peterson, K. V. Raghavan, Nahid Rahman, Rajarshi Rakshit, Krithi Ramamritham, Mike Reiter, Greg Riccardi, Odinaldo Rodriguez, Mark Roth, Marek Rusinkiewicz, Michael Rys, Sunita Sarawagi, N. L. Sarda, Patrick Schmid, Nikhil Sethi, S. Seshadri, Stewart Shen, Shashi Shekhar, Amit Sheth, Max Smolens, Nandit Soparkar, Greg Speegle, Jeff Storey, Dilys Thomas, Prem Thomas, Tim Wahls, Anita Whitehall, Christopher Wilson, Marianne Winslett, Weining Zhang, Liu Zhenming。
个人注记
Sudarshan感谢他的妻子Sita的爱、耐心和支持,感谢他的孩子Madhur、Advaith的爱和乐观精神。Hank感谢他的妻子Joan、孩子Abby和Joe的爱和理解。Avi感谢Valerie在本书修订期间的爱、耐心和支持。
A. S.
H. F. K.
S. S.

上架指导

计算机\数据库

封底文字

数据库领域的殿堂级作品
夯实数据库理论基础,修炼数据库技术内功的必备之选
对深入理解数据库,深入研究数据库,深入操作数据库都具有极强的指导作用!

本书是数据库系统方面的经典教材之一,其内容由浅入深,既包含了数据库系统基本概念,又反映了数据库技术的新进展。它被国际上许多著名大学所采用,包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学等。我国也有多所大学采用本书作为本科生和研究生数据库课程的教材和主要教学参考书,收到了良好的效果。
第7版保持了前6版的总体风格,同时对内容进行了扩充,对结构进行了调整,以更好地符合数据库教学的需求,反映数据库设计、管理与使用方式的发展和变化。具体更新内容如下:
广泛涵盖了大数据系统的内容,与第6版相比有大量的内容扩充和改进。
增加了区块链数据库的内容,重点介绍了区块链系统与数据库系统之间的交互。
对涉及数据库内部的所有各章进行了修改,以融入固态硬盘、主存数据库、多核系统和列存储等当代技术。
对于使用JSON、RDF和SPARQL进行半结构化数据管理做了更多描述。
更新了对于时态数据、数据分析和诸如写优化的索引等高级索引技术的描述。
为了更好地支持动手实践,重新组织和更新了一些章节,包括使用当代的应用开发工具和大数据系统,如Apache Hadoop和Spark。
本书英文版配套网站(http://www.db-book.com)提供的教辅资源包括:
各章的教学课件。
实践习题的答案。
6章英文在线内容(形式关系查询语言、高级关系数据库设计、基于对象的数据库、XML、信息检索和PostgreSQL)。
实验素材(包括大学模式和习题中用到的SQL DDL和样例数据,大量实验练习和相关项目示例,以及关于建立与使用各种数据库系统和工具的说明)。
最新勘误表。

译者序

数据库系统是对数据进行存储、管理、处理和维护的软件系统,是现代计算环境中的一个核心成分。随着计算机硬件、软件、网络技术的飞速发展和计算机系统在各行各业的广泛应用,数据库技术的发展尤其迅速且引人注目。有关数据库系统的理论和技术是计算机科学教育中必不可少的部分。《数据库系统概念》是一本经典的、备受赞扬的数据库系统教科书。其内容由浅入深,既包含了数据库系统的基本概念,又反映了数据库技术的新进展。它被国际上许多著名大学所采用,并多次再版。
我们先后将《数据库系统概念》一书的第3版、第4版、第5版和第6版译成中文,由机械工业出版社分别于2000年、2003年、2006年和2012年出版发行。国内许多大学采用《数据库系统概念》作为本科生和研究生数据库课程的教材或主要教学参考书,收到了良好的教学效果。现在我们又翻译了该书的第7版。第7版保持了前6版的总体风格,同时对结构进行了调整,对内容进行了扩充并增加了新的章节,包括“大数据”系统的广泛应用、区块链数据库等,以反映数据库设计、管理和使用的方式所发生的变化。第7版还考虑了数据库概念在教学方面的趋势,并进行了推动这些趋势的修改。第7版主要包括以下内容。
第1~9章讲述数据库系统的基本概念,对数据库系统的性质和目标进行了综述,对关系数据模型和关系语言做了较详细的介绍,对数据库设计过程、关系数据库理论以及数据库应用的设计和开发(包括基于Web的数据库应用以及移动数据库应用中所使用的工具和技术)进行了详细讨论。
第10~11章讲述大数据分析,阐述大规模数据分析应用对数据管理的要求,介绍满足这些要求的大数据存储系统、键值存储和NoSQL系统、MapReduce、Apache Spark、流数据和图数据库等,讨论数据仓库的结构和数据在OLAP应用中的使用以及数据挖掘算法和技术。
第12~19章讲述数据库系统的实现技术,介绍数据存储结构和缓冲区管理以及多种索引结构,阐述多种数据库查询执行算法和查询优化方法,阐述原子性、一致性、隔离性、持久性等事务处理的基本概念,并介绍保证这些特性的并发控制及故障恢复技术。
第20~23章主要讨论并行和分布式数据库,包括对集中式、客户-服务器、并行和分布式以及基于云的系统等计算机体系结构的介绍,对并行和分布式系统中的存储和索引结构的介绍,对多查询间并行和单个查询内并行的讨论,对分布式事务处理方法(包括两阶段提交、副本管理和弱一致性级别、使用版本向量和默克尔树来发现不一致性的手段和方法等)的讨论。
附录A给出了贯穿全书的大学模式的细节,包括完整的模式、DDL和所有的表。
第24~26章是中文在线章节,讲述一些高级主题,包括LSM树及其变种、位图索引、空间索引和动态散列等对索引结构的扩展,高级应用开发中的性能调整、应用程序测试、应用程序移植和标准化等,区块链技术中使用加密散列函数和公钥加密来保证区块链特性(匿名性、无可辩驳性、防篡改性等)的方法以及区块链技术在企业应用中日益增长的作用。
第27~32章是英文在线章节,内容涵盖了具有历史意义或者具有先进性的材料,包括元组关系演算、域关系演算和Datalog等“纯”查询语言,关系数据库设计中的多值依赖理论和第四范式以及更高的范式,基于对象的数据库与诸如数组和多重集合类型等更复杂的数据类型,关于XML的更深入的讨论,对PostgreSQL数据库系统的综述等。
第1~9章的主要内容以及第10~23章和在线章节的部分内容可以作为本科生数据库入门课程的教材或主要参考资料,第10~23章和在线章节的其余内容可以用于研究生的数据库课程教学。
杨冬青、李红燕、张金波组织并参与了本书的翻译和审校工作,参与翻译的人员还有洪申达、吴梦、周雨熙、宋默弦、孙陈希、王卿云、尚骏远、周姸秀、孙永樾。
限于译者水平,译文中难免存在疏漏和错误,欢迎批评指正。

译 者
2020年10月于北京大学

图书目录

出版者的话
译者序
前言
关于作者
第1章 引言1
1.1 数据库系统应用1
1.2 数据库系统的目标3
1.3 数据视图6
1.3.1 数据模型6
1.3.2 关系数据模型6
1.3.3 数据抽象7
1.3.4 实例和模式8
1.4 数据库语言9
1.4.1 数据定义语言9
1.4.2 SQL数据定义语言10
1.4.3 数据操纵语言10
1.4.4 SQL数据操纵语言11
1.4.5 从应用程序访问数据库11
1.5 数据库设计12
1.6 数据库引擎12
1.6.1 存储管理器13
1.6.2 查询处理器14
1.6.3 事务管理14
1.7 数据库和应用体系结构15
1.8 数据库用户和管理员16
1.8.1 数据库用户和用户界面16
1.8.2 数据库管理员17
1.9 数据库系统的历史17
1.10 总结20
术语回顾21
实践习题22
习题22
工具22
延伸阅读23
参考文献23
第一部分 关系语言
第2章 关系模型介绍26
2.1 关系数据库的结构26
2.2 数据库模式28
2.3 码29
2.4 模式图32
2.5 关系查询语言32
2.6 关系代数33
2.6.1 选择运算33
2.6.2 投影运算34
2.6.3 关系运算的复合34
2.6.4 笛卡儿积运算35
2.6.5 连接运算36
2.6.6 集合运算37
2.6.7 赋值运算38
2.6.8 更名运算39
2.6.9 等价查询40
2.7 总结40
术语回顾41
实践习题41
习题42
延伸阅读43
参考文献44
第3章 SQL介绍45
3.1 SQL查询语言概览45
3.2 SQL数据定义46
3.2.1 基本类型46
3.2.2 基本模式定义47
3.3 SQL查询的基本结构49
3.3.1 单关系查询49
3.3.2 多关系查询51
3.4 附加的基本运算55
3.4.1 更名运算55
3.4.2 字符串运算56
3.4.3 select子句中的属性说明57
3.4.4 排列元组的显示次序 57
3.4.5 where子句谓词58
3.5 集合运算58
3.5.1 并运算59
3.5.2 交运算60
3.5.3 差运算60
3.6 空值61
3.7 聚集函数62
3.7.1 基本聚集62
3.7.2 分组聚集63
3.7.3 having子句65
3.7.4 对空值和布尔值的聚集66
3.8 嵌套子查询67
3.8.1 集合成员资格67
3.8.2 集合比较68
3.8.3 空关系测试69
3.8.4 重复元组存在性测试70
3.8.5 from子句中的子查询71
3.8.6 with子句72
3.8.7 标量子查询73
3.8.8 不带from子句的标量73
3.9 数据库的修改74
3.9.1 删除75
3.9.2 插入76
3.9.3 更新77
3.10 总结78
术语回顾79
实践习题79
习题81
工具83
延伸阅读84
参考文献84
第4章 中级SQL85
4.1 连接表达式85
4.1.1 自然连接85
4.1.2 连接条件88
4.1.3 外连接89
4.1.4 连接类型和条件92
4.2 视图92
4.2.1 视图定义93
4.2.2 在SQL查询中使用视图94
4.2.3 物化视图95
4.2.4 视图更新95
4.3 事务97
4.4 完整性约束98
4.4.1 单个关系上的约束99
4.4.2 非空约束99
4.4.3 唯一性约束100
4.4.4 check子句100
4.4.5 引用完整性100
4.4.6 给约束赋名102
4.4.7 事务中对完整性约束的违反103
4.4.8 复杂check条件与断言103
4.5 SQL的数据类型与模式105
4.5.1 SQL中的日期和时间类型105
4.5.2 类型转换和格式化函数105
4.5.3 缺省值106
4.5.4 大对象类型107
4.5.5 用户自定义类型108
4.5.6 生成唯一码值110
4.5.7 create table的扩展111
4.5.8 模式、目录与环境111
4.6 SQL中的索引定义112
4.7 授权113
4.7.1 权限的授予与收回114
4.7.2 角色115
4.7.3 视图的授权116
4.7.4 模式的授权117
4.7.5 权限的转移117
4.7.6 权限的收回118
4.7.7 行级授权119
4.8 总结119
术语回顾120
实践习题121
习题122
延伸阅读123
参考文献123
第5章 高级SQL125
5.1 使用程序设计语言访问SQL125
5.1.1 JDBC126
5.1.2 从Python访问数据库132
5.1.3 ODBC132
5.1.4 嵌入式SQL134
5.2 函数和过程136
5.2.1 声明及调用SQL函数和过程136
5.2.2 用于过程和函数的语言结构137
5.2.3 外部语言例程140
5.3 触发器141
5.3.1 对触发器的需求141
5.3.2 SQL中的触发器141
5.3.3 何时不用触发器144
5.4 递归查询146
5.4.1 使用迭代的传递闭包146
5.4.2 SQL中的递归148
5.5 高级聚集特性149
5.5.1 排名150
5.5.2 分窗153
5.5.3 旋转154
5.5.4 上卷和立方体155
5.6 总结158
术语回顾158
实践习题158
习题160
工具161
延伸阅读162
第二部分 数据库设计
第6章 使用E-R模型的数据库设计164
6.1 设计过程概览164
6.1.1 设计阶段164
6.1.2 设计选择165
6.2 实体-联系模型166
6.2.1 实体集166
6.2.2 联系集167
6.3 复杂属性169
6.4 映射基数171
6.5 主码174
6.5.1 实体集174
6.5.2 联系集175
6.5.3 弱实体集176
6.6 从实体集中删除冗余属性177
6.7 将E-R图转换为关系模式180
6.7.1 强实体集的表示180
6.7.2 具有复杂属性的强实体集的表示180
6.7.3 弱实体集的表示182
6.7.4 联系集的表示182
6.7.5 模式的冗余183
6.7.6 模式的合并184
6.8 扩展的E-R特性184
6.8.1 特化185
6.8.2 概化186
6.8.3 属性继承186
6.8.4 特化上的约束187
6.8.5 聚集187
6.8.6 转换为关系模式188
6.9 实体-联系设计问题190
6.9.1 E-R图中的常见错误190
6.9.2 使用实体集还是属性191
6.9.3 使用实体集还是联系集192
6.9.4 二元还是n元联系集193
6.10 数据建模的可选表示法194
6.10.1 可选的E-R表示法195
6.10.2 统一建模语言196
6.11 数据库设计的其他方面198
6.11.1 功能要求198
6.11.2 数据流、工作流198
6.11.3 模式演化198
6.12 总结199
术语回顾200
实践习题200
习题202
工具203
延伸阅读204
参考文献204
第7章 关系数据库设计205
7.1 好的关系设计的特点205
7.1.1 分解206
7.1.2 无损分解207
7.1.3 规范化理论208
7.2 使用函数依赖进行分解208
7.2.1 符号惯例209
7.2.2 码和函数依赖209
7.2.3 无损分解和函数依赖211
7.3 范式212
7.3.1 Boyce-Codd范式212
7.3.2 第三范式214
7.3.3 BCNF和3NF的比较215
7.3.4 更高级的范式216
7.4 函数依赖理论216
7.4.1 函数依赖集的闭包216
7.4.2 属性集的闭包218
7.4.3 正则覆盖219
7.4.4 保持依赖222
7.5 使用函数依赖的分解算法223
7.5.1 BCNF分解223
7.5.2 3NF分解225
7.5.3 3NF算法的正确性226
7.6 使用多值依赖的分解227
7.6.1 多值依赖227
7.6.2 第四范式229
7.6.3 4NF分解229
7.7 更多的范式230
7.8 原子域和第一范式231
7.9 数据库设计过程232
7.9.1 E-R模型和规范化232
7.9.2 属性和联系的命名233
7.9.3 为了性能去规范化234
7.9.4 其他设计问题234
7.10 时态数据建模235
7.11 总结237
术语回顾238
实践习题239
习题241
延伸阅读243
参考文献244
第三部分 应用程序设计和开发
第8章 复杂数据类型246
8.1 半结构化数据246
8.1.1 半结构化数据模型概述246
8.1.2 JSON248
8.1.3 XML249
8.1.4 RDF和知识图谱251
8.2 面向对象253
8.2.1 对象-关系数据库系统254
8.2.2 对象-关系映射257
8.3 文本数据257
8.3.1 关键字查询258
8.3.2 相关性排名258
8.3.3 检索有效性的度量260
8.3.4 结构化数据和知识图谱上的关键字查询260
8.4 空间数据261
8.4.1 几何信息表示262
8.4.2 设计数据库263
8.4.3 地理数据264
8.4.4 空间查询265
8.5 总结266
术语回顾267
实践习题268
习题269
延伸阅读270
参考文献270
第9章 应用程序开发271
9.1 应用程序和用户界面271
9.2 Web基础272
9.2.1 统一资源定位符272
9.2.2 超文本标记语言273
9.2.3 Web服务器和会话275
9.3 servlet277
9.3.1 servlet示例277
9.3.2 servlet会话279
9.3.3 servlet的生命周期280
9.3.4 应用服务器280
9.4 可选择的服务器端框架280
9.4.1 服务器端脚本280
9.4.2 Web应用框架282
9.4.3 Django框架283
9.5 客户端代码和Web服务284
9.5.1 JavaScript284
9.5.2 Web服务288
9.5.3 断连操作288
9.5.4 移动应用平台289
9.6 应用程序体系结构290
9.6.1 业务逻辑层291
9.6.2 数据访问层和对象-关系映射291
9.7 应用程序性能294
9.7.1 通过高速缓存减少开销295
9.7.2 并行处理296
9.8 应用程序安全性296
9.8.1 SQL注入296
9.8.2 跨站点脚本和请求伪造297
9.8.3 密码泄露298
9.8.4 应用级认证299
9.8.5 应用级授权300
9.8.6 审计追踪302
9.8.7 隐私302
9.9 加密及其应用303
9.9.1 加密技术303
9.9.2 数据库中的加密支持305
9.9.3 加密和认证306
9.10 总结307
术语回顾308
实践习题309
习题309
项目建议310
工具312
延伸阅读313
参考文献313
第四部分 大数据分析
第10章 大数据316
10.1 动机316
10.1.1 大数据的来源和使用317
10.1.2 大数据查询318
10.2 大数据存储系统319
10.2.1 分布式文件系统320
10.2.2 分片322
10.2.3 键值存储系统322
10.2.4 并行和分布式数据库325
10.2.5 复制和一致性326
10.3 MapReduce范式327
10.3.1 为什么要使用MapReduce327
10.3.2 MapReduce示例1:词汇统计328
10.3.3 MapReduce示例2:日志处理329
10.3.4 MapReduce任务的并行处理331
10.3.5 Hadoop中的MapReduce332
10.3.6 MapReduce上的SQL334
10.4 超越MapReduce:代数运算335
10.4.1 代数运算的动机335
10.4.2 Spark中的代数运算336
10.5 流数据339
10.5.1 流数据的应用339
10.5.2 流数据查询341
10.5.3 流上的代数运算343
10.6 图数据库345
10.7 总结347
术语回顾347
实践习题348
习题349
工具349
延伸阅读350
参考文献350
第11章 数据分析351
11.1 分析概述351
11.2 数据仓库352
11.2.1 数据仓库成分353
11.2.2 多维数据与数据仓库模式354
11.2.3 数据仓库的数据库支持355
11.2.4 数据湖356
11.3 联机分析处理356
11.3.1 多维数据上的聚集357
11.3.2 交叉表的关系表示360
11.3.3 SQL中的OLAP361
11.3.4 报表和可视化工具364
11.4 数据挖掘365
11.4.1 数据挖掘任务的类型366
11.4.2 分类366
11.4.3 回归369
11.4.4 关联规则370
11.4.5 聚类371
11.4.6 文本挖掘372
11.5 总结372
术语回顾373
实践习题374
习题375
工具375
延伸阅读376
参考文献376
第五部分 存储管理和索引
第12章 物理存储系统378
12.1 物理存储介质概述378
12.2 存储器接口380
12.3 磁盘381
12.3.1 磁盘的物理特性381
12.3.2 磁盘的性能度量383
12.4 闪存384
12.5 RAID386
12.5.1 通过冗余提高可靠性386
12.5.2 通过并行提高性能387
12.5.3 RAID级别387
12.5.4 硬件问题389
12.5.5 RAID级别的选择390
12.5.6 其他的RAID应用391
12.6 磁盘块访问391
12.7 总结393
术语回顾394
实践习题394
习题395
延伸阅读395
参考文献396
第13章 数据存储结构397
13.1 数据库存储架构397
13.2 文件组织398
13.2.1 定长记录398
13.2.2 变长记录400
13.2.3 大对象存储402
13.3 文件中记录的组织402
13.3.1 堆文件组织403
13.3.2 顺序文件组织404
13.3.3 多表聚簇文件组织405
13.3.4 划分407
13.4 数据字典存储407
13.5 数据库缓冲区409
13.5.1 缓冲区管理器409
13.5.2 缓冲区替换策略411
13.5.3 写操作的重排序与恢复413
13.6 面向列的存储414
13.7 主存数据库的存储组织417
13.8 总结418
术语回顾418
实践习题419
习题419
延伸阅读420
参考文献420
第14章 索引421
14.1 基本概念421
14.2 顺序索引422
14.2.1 稠密索引和稀疏索引422
14.2.2 多级索引425
14.2.3 索引更新426
14.2.4 辅助索引427
14.2.5 多码索引428
14.3 B+树索引文件428
14.3.1 B+树的结构429
14.3.2 B+树的查询431
14.3.3 B+树的更新434
14.3.4 B+树更新的复杂度439
14.3.5 非唯一性搜索码440
14.4 B+树扩展441
14.4.1 B+树文件组织441
14.4.2 辅助索引和记录重分配442
14.4.3 对字符串的索引443
14.4.4 B+树索引的批量加载443
14.4.5 B树索引文件444
14.4.6 闪存上的索引445
14.4.7 主存上的索引446
14.5 散列索引447
14.6 多码访问449
14.6.1 使用多个单码索引449
14.6.2 多码索引449
14.6.3 覆盖索引450
14.7 索引的创建450
14.8 写优化索引结构452
14.8.1 LSM树452
14.8.2 缓冲树454
14.9 位图索引455
14.10 时空数据索引456
14.10.1 空间数据索引456
14.10.2 时态数据索引458
14.11 总结459
术语回顾460
实践习题461
习题463
延伸阅读463
参考文献464
第六部分 查询处理和优化
第15章 查询处理466
15.1 概述466
15.2 查询代价的度量468
15.3 选择运算470
15.3.1 文件扫描的使用和索引的选择470
15.3.2 涉及比较的选择472
15.3.3 复杂选择的实现473
15.4 排序474
15.4.1 外排序-归并算法474
15.4.2 外排序-归并的代价分析476
15.5 连接运算476
15.5.1 嵌套-循环连接477
15.5.2 块嵌套-循环连接477
15.5.3 索引嵌套-循环连接478
15.5.4 归并-连接479
15.5.5 散列-连接482
15.5.6 复杂连接485
15.5.7 空间数据上的连接486
15.6 其他运算486
15.6.1 去重486
15.6.2 投影487
15.6.3 集合运算487
15.6.4 外连接488
15.6.5 聚集489
15.7 表达式执行489
15.7.1 物化490
15.7.2 流水线490
15.7.3 对于连续流数据的流水线494
15.8 内存中的查询处理495
15.8.1 高速缓存感知算法495
15.8.2 查询编译496
15.8.3 面向列的存储496
15.9 总结496
术语回顾497
实践习题498
习题499
延伸阅读500
参考文献500
第16章 查询优化501
16.1 概述501
16.2 关系表达式的转换503
16.2.1 等价规则504
16.2.2 转换示例507
16.2.3 连接次序509
16.2.4 等价表达式的枚举509
16.3 表达式结果的统计信息估计510
16.3.1 目录信息511
16.3.2 选择规模估计512
16.3.3 连接规模估计514
16.3.4 其他运算的规模估计516
16.3.5 不同取值个数的估计516
16.4 执行计划的选择517
16.4.1 基于代价的连接次序选择517
16.4.2 采用等价规则的基于代价的优化520
16.4.3 优化中的启发式方法521
16.4.4 嵌套子查询的优化523
16.5 物化视图525
16.5.1 视图维护526
16.5.2 增量的视图维护526
16.5.3 查询优化和物化视图528
16.5.4 物化视图和索引选择529
16.6 查询优化中的高级主题529
16.6.1 top-K优化529
16.6.2 连接最小化530
16.6.3 更新的优化530
16.6.4 多查询优化和共享式扫描530
16.6.5 参数化查询优化531
16.6.6 自适应查询处理531
16.7 总结532
术语回顾532
实践习题533
习题535
延伸阅读536
参考文献536
第七部分 事务管理
第17章 事务538
17.1 事务的概念538
17.2 一个简单的事务模型539
17.3 存储器结构541
17.4 事务的原子性和持久性542
17.5 事务的隔离性543
17.6 可串行化547
17.7 事务的隔离性和原子性550
17.7.1 可恢复调度550
17.7.2 无级联调度550
17.8 事务的隔离性级别551
17.9 隔离性级别的实现553
17.9.1 锁553
17.9.2 时间戳554
17.9.3 多版本和快照隔离554
17.10 事务的SQL语句表示555
17.11 总结556
术语回顾557
实践习题558
习题558
延伸阅读559
参考文献559
第18章 并发控制560
18.1 基于锁的协议560
18.1.1 锁560
18.1.2 锁的授予563
18.1.3 两阶段封锁协议563
18.1.4 封锁的实现565
18.1.5 基于图的协议566
18.2 死锁处理568
18.2.1 死锁预防568
18.2.2 死锁检测与恢复569
18.3 多粒度571
18.4 插入操作、删除操作与谓词读573
18.4.1 删除573
18.4.2 插入574
18.4.3 谓词读和幻象现象574
18.5 基于时间戳的协议576
18.5.1 时间戳576
18.5.2 时间戳排序协议577
18.5.3 Thomas写规则578
18.6 基于有效性检查的协议580
18.7 多版本机制581
18.7.1 多版本时间戳排序582
18.7.2 多版本两阶段封锁583
18.8 快照隔离584
18.8.1 快照隔离中的多版本584
18.8.2 更新事务的有效性检查步骤585
18.8.3 串行化问题和解决方案586
18.9 实践中的弱一致性级别589
18.9.1 二级一致性589
18.9.2 游标稳定性589
18.9.3 跨用户交互的并发控制590
18.10 并发控制的高级主题591
18.10.1 在线索引创建591
18.10.2 索引结构中的并发592
18.10.3 主存数据库中的并发控制594
18.10.4 长事务596
18.10.5 利用操作的并发控制596
18.10.6 实时事务系统598
18.11 总结599
术语回顾600
实践习题601
习题603
延伸阅读604
参考文献604
第19章 恢复系统606
19.1 故障分类606
19.2 存储器607
19.2.1 稳定存储器的实现607
19.2.2 数据访问608
19.3 恢复与原子性609
19.3.1 日志记录610
19.3.2 数据库修改611
19.3.3 并发控制与恢复611
19.3.4 事务提交612
19.3.5 使用日志来重做和撤销事务612
19.3.6 检查点615
19.4 恢复算法616
19.4.1 事务回滚616
19.4.2 系统崩溃后的恢复616
19.4.3 提交处理的优化618
19.5 缓冲区管理618
19.5.1 日志记录缓冲618
19.5.2 数据库缓冲619
19.5.3 操作系统在缓冲区管理中的作用620
19.5.4 模糊检查点621
19.6 非易失性存储器上数据丢失的故障621
19.7 使用远程备份系统的高可用性622
19.8 锁的提前释放与逻辑撤销操作625
19.8.1 逻辑操作625
19.8.2 逻辑撤销日志记录626
19.8.3 有逻辑撤销的事务回滚626
19.8.4 逻辑撤销中的并发问题628
19.9 ARIES629
19.9.1 数据结构629
19.9.2 恢复算法631
19.9.3 其他特性633
19.10 主存数据库的恢复634
19.11 总结634
术语回顾636
实践习题637
习题638
延伸阅读639
参考文献639
第八部分 并行和分布式数据库
第20章 数据库系统体系结构642
20.1 概述642
20.2 集中式数据库系统642
20.3 服务器系统体系结构643
20.3.1 事务服务器体系结构644
20.3.2 数据服务器与数据存储系统646
20.3.3 客户端高速缓存647
20.4 并行系统648
20.4.1 并行数据库的动机648
20.4.2 并行系统的性能度量649
20.4.3 互连网络651
20.4.4 并行数据库体系结构654
20.4.5 共享内存655
20.4.6 共享磁盘658
20.4.7 无共享659
20.4.8 层次659
20.5 分布式系统659
20.6 并行和分布式系统中的事务处理661
20.7 基于云的服务662
20.7.1 云服务模型662
20.7.2 云服务的优缺点665
20.8 总结665
术语回顾666
实践习题667
习题667
延伸阅读668
参考文献668
第21章 并行和分布式存储669
21.1 概述669
21.2 数据分区669
21.2.1 分区策略670
21.2.2 分区技术的对比671
21.3 分区中的偏斜处理672
21.3.1 平衡的范围分区向量673
21.3.2 虚拟节点分区673
21.3.3 动态再分区674
21.4 复制676
21.4.1 副本的位置677
21.4.2 更新与副本的一致性677
21.5 并行索引678
21.6 分布式文件系统681
21.7 并行的键值存储683
21.7.1 数据表示684
21.7.2 存储与检索数据685
21.7.3 对事务的支持687
21.7.4 不使用声明式查询的管理688
21.7.5 性能优化689
21.8 总结689
术语回顾690
实践习题690
习题691
工具691
延伸阅读692
参考文献692
第22章 并行和分布式查询处理694
22.1 概述694
22.2 并行排序695
22.2.1 范围分区排序695
22.2.2 并行的外排序-归并696
22.3 并行连接697
22.3.1 分区连接697
22.3.2 分片-复制连接698
22.3.3 处理并行连接中的偏斜700
22.4 其他运算700
22.4.1 其他关系运算700
22.4.2 map和reduce操作701
22.5 查询计划的并行执行703
22.5.1 操作间并行703
22.5.2 交换算子模型705
22.5.3 情况汇总706
22.5.4 查询计划中的容错708
22.6 共享内存体系结构上的查询处理710
22.7 并行执行的查询优化711
22.7.1 并行查询计划空间712
22.7.2 并行查询计算的代价712
22.7.3 选择并行查询计划713
22.7.4 数据托管714
22.7.5 物化视图的并行维护715
22.8 流数据的并行处理716
22.8.1 元组的路由716
22.8.2 流运算的并行处理718
22.8.3 流数据的容错719
22.9 分布式查询处理720
22.9.1 来自多个数据源的数据集成720
22.9.2 模式和数据集成721
22.9.3 跨多个数据源的查询处理723
22.9.4 分布式目录系统726
22.10 总结727
术语回顾728
实践习题729
习题730
工具731
延伸阅读731
参考文献732
第23章 并行和分布式事务处理734
23.1 分布式事务734
23.1.1 系统结构735
23.1.2 系统故障模式736
23.2 提交协议736
23.2.1 两阶段提交736
23.2.2 提交期间的阻塞避免740
23.2.3 事务处理的可选模型741
23.3 分布式数据库中的并发控制743
23.3.1 封锁协议744
23.3.2 死锁处理744
23.3.3 租赁746
23.3.4 基于时间戳的分布式协议747
23.3.5 时间戳的产生747
23.3.6 分布式时间戳排序748
23.3.7 分布式有效性检查749
23.4 复制750
23.4.1 副本一致性750
23.4.2 使用副本的并发控制751
23.4.3 故障处理753
23.4.4 重构和重组755
23.5 扩展的并发控制协议756
23.5.1 多版本2PL和全局一致性时间戳756
23.5.2 分布式快照隔离757
23.5.3 联邦数据库系统中的并发控制758
23.6 具有弱一致性级别的复制759
23.6.1 用一致性换取可用性759
23.6.2 异步复制760
23.6.3 异步视图维护762
23.6.4 检测不一致性更新764
23.6.5 解决冲突的更新765
23.6.6 使用默克尔树来检测集合之间的差异766
23.7 协调器的选择768
23.7.1 备份协调器768
23.7.2 选举协调器769
23.8 分布式系统中的共识771
23.8.1 问题概述771
23.8.2 Paxos共识协议772
23.8.3 Raft共识协议774
23.8.4 使用复制状态机的容错服务777
23.8.5 使用共识的两阶段提交779
23.9 总结779
术语回顾781
实践习题781
习题783
延伸阅读783
参考文献784
第九部分 附录
附录A 详细的大学模式788
第十部分 中文在线章节一
第24章 高级索引技术
第25章 高级应用开发
第26章 区块链数据库
索引
第十一部分 英文在线章节二
第27章 形式关系查询语言
第28章 高级关系数据库设计
第29章 基于对象的数据库
第30章 XML
第31章 信息检索
第32章 PostgreSQL

教学资源推荐
作者: (美)W.H.Inmon
作者: (美)Ryan K.Stephens Ronald R.Plew
作者: 王丽艳 郑先锋 刘亮 编著 陈昌志 主审
作者: 何玉洁
参考读物推荐
作者: 文小飞 著
作者: (美)Hannu Krosing, Jim Mlodgenski, Kirk Roybal 著
作者: 马立和 高振娇 韩锋 著