数据库管理已经从一种专门的计算机应用发展为几乎所有企业中的一个核心成分,因此,有关数据库系统的知识已成为计算机科学教育中必不可少的部分。在本书中,我们讲述数据库管理的基本概念,这些概念包括数据库设计、数据库语言、数据库系统实现等多个方面。
本书可作为三年级或四年级本科生数据库入门课程的教科书,也可作为一年级研究生的教科书。除了涵盖入门课程的基本内容外,本书还包括可作为课程补充材料或作为高级课程介绍性材料的高级内容。
我们仅要求读者熟悉基本的数据结构、计算机组成和一种高级程序设计语言,例如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.