数据库管理系统(DBMS)是管理信息的基本工具,它得到广泛的使用,同时数据库系统原理和实践也是计算机科学课程的有机组成部分。本书覆盖了现代DBMS的基础,尤其是关系数据库系统。作为本科生的数据库入门课程的教材,我们希望以清晰而简洁的方式组织书中的内容。
全书注重“数量”对于教学效果的影响,给出了大量而详细的示例。每一章还有大量的练习(教师可以从网上得到答案),用于巩固学生应用概念,提高解决实际问题的能力。本书丰富的内容,再加上精选的研究性论文就可以支持一门**课程。与本书配套的软件和编程训练相结合,本书可以用在两种不同的入门级课程中。
(1) 侧重应用的课程:涵盖了数据库系统的原理,侧重于应用开发。第3版新增两章关于数据库的应用与开发(一章是关于数据库后台应用,另一章是关于Java和Internet应用架构),全书也进行了很大的修改以适应应用类课程的需求。本书还提供实际问题和充足的联机资料(例如,SQL查询和Java应用的代码,联机数据库和解决方案),使讲授这类侧重应用的课程更加容易。
(2) 侧重系统的课程:侧重于有关系统的知识,要求学生具有良好的C和C++的编程经验。Minibase软件可以用作学生实现关系DBMS课程作业的软件基础。该软件的几个核心模块(例如,堆文件、缓冲区管理器、B+树、哈希索引、各种连接算法、并发控制和恢复算法)在文中都有详细的描述,从而使得学生能够使用给定的类接口(C++)来完成项目。
毫无疑��,很多教师会选择讲授介于这两者之间的课程。本书第3版提供了模块化的知识组织方式,为混合类型授课提供了方便。同时,本书也为更**的课程提供了充足的资料。
第3版的内容
本书主要分为七大部分,如图0.1所示。基础知识部分主要介绍数据库系统、ER模型和关系模型的相关知识,讲述了如何创建和使用数据库,涵盖了数据库的设计和查询,以及对SQL查询语句的深入研究。教师可以根据自己的需要省略某些内容(例如,关系演算、ER模型或者SQL查询语句的某些部分),但是,这些内容对每个学习数据库知识的学生都是重要的,所以建议教师尽可能地详细讲解这些知识。部分内容侧 重 关 系一数据库基础侧重应用与系统二应用程序开发侧重应用三存储与索引侧重系统四查询评估侧重系统五事务管理侧重系统六数据库设计与调整侧重应用七**主题侧重应用与系统图0.1第3版的内容组织方式在其余的六个主要部分中,每一部分或者侧重应用或者侧重系统。三个侧重系统讲解的部分都有对本部分内容进行概述的章节,例如,本书第8章是对存储与索引部分的概述。教师可以单独讲授这些章节,也可以将其作为某部分的一章。例如,在侧重应用的课程中,第8章可能是惟一涉及到存储和索引的章节,然而在侧重系统的课程中,可以从第9章到第11章中挑出一章来对第8章的内容进行补充。数据库设计与性能调整部分,主要讲述如何为实现**访问而进行性能调整和设计。这些侧重应用的部分*好是在学生们掌握了数据库系统结构之后讲授,因此放到了本书靠后的部分。
建议课程大纲
本书可以用在两种不同的入门级课程中,一种课程侧重于应用,另一种侧重于系统知识。
侧重于应用的入门课程的课程大纲如下:基础知识部分,应用开发部分,接着第三、四和五部分的概述章节,以数据库设计与调整结束。按照该方法,章节从属依赖关系保持在*低点,可以使讲授者能够很容易调整和添加其他内容。**部分是基础知识部分,应该*先讲授,在讲授第三、第四和第五部分时,应讲授其概述部分。在**部分到第四部分的章节中惟一的依赖关系如图0.2所示。**部分的章节应该按图中的顺序讲解。但是,为了尽快开始SQL查询内容,我们也可以跳过关系代数和关系演算部分(尽管我们认为这些内容是重要的,并且建议*好在开始SQL语句之前讲授)。
侧重于系统的入门课程包括基础知识部分和侧重系统的部分。对于侧重系统的课程,重要的是编程计划的时间安排(例如,使用Minibase软件),这需要早接触系统方面的知识。章节之间的依赖和从属关系已被尽量降低,以保证在讲授第1章和第3章之后能够尽早开始侧重系统的内容学习。
本书提供的充足资料使课程的选择更加多样化。在入门级课程中选择以应用为**或者以系统为**将某些内容割舍;实际上,本书提供的资料足以满足对数据库知识全面的学习。扩展部分的内容覆盖范围广,可以作为**课程的核心内容,满足更深层次的读者需求。
补充材料
本书提供了大量的联机补充资料:
■联机章节:为了在书中给新的内容留出空间,例如应用与开发,知识获取和XML,我们把讲述QBE的章节放到了网上。学生可以从本书的网站上下载这一章的内容。本章的习题的答案包含在答案集中。
■课程幻灯片:包括所有章节的MS Powerpoint、Postscript和PDF格式的讲义的幻灯片都可以从网站上下载。另外,教师还可以从网上得到本书中使用的所有图片(xfig格式),根据教学需要进行修改。
■练习答案:本书提供了大量有深度的练习题。学生可以通过因特网获得Postscript和PDF格式的奇数题号的习题答案和每章的幻灯片,教师则可以获得全部的习题答案。
■软件:本书提供两种软件。一种是Minibase,这是为侧重系统的课程提供的一个小型的关系DBMS。在第30章中,本书提供了以Minibase为基础的例题和答案,这些内容仅提供给教师。另一种是,本书提供了书中所有SQL和Java应用开发习题的代码,如何创建数据库的示例和如何创建商业DBMS的方案。同样,学生只能得到奇数题号习题的答案,而教师可以得到全部的答案。
■教师手册:提供对每章中内容的注释和小结,使教师在强调或者省略某些内容时有所参考。手册中还包括对联机资料的注释,为布置习题和课程作业提供了很多建议。手册还包括了本书作者教学时使用的考试卷子,当然,这些也仅提供给教师。
其他信息
本书主页的URL:
http://www.cs.wisc.edu/~dbbook
该主页上列出了从第2版到第3版的内容变动,该主页经常更新,同时含有针对书中所有错误、幻灯片和补充材料的链接。教师可以定期访问该站点,或者在站点上注册,这样就可以得到电子邮件形式的重要更新通知。
致谢
本书由CS564的讲义演变而来,CS564是UWMadison为本科高年级学生和研究生开设的介绍性的数据库课程。David DeWitt开设了本课程,同时开发了Minirel课程设计,该设计要求学生编写经过精心挑选的关系DBMS的某些部分。关于本材料的想法是在讲授CS564的过程中形成的,而Minirel则促进了Minibase的出现。Minibase更为全面(例如带有查询优化器和可视化软件),同时又尽量保持Minirel的实质。Mike Carey和我共同设计了Minibase的许多部分。我的讲义(后来成了本书)受到了Mike的讲义和Yannis Ioannidis的讲稿幻灯片的影响。
Joe Hellerstein在Berkeley使用了本书的测试版,同时提供了非常宝贵的反馈信息、幻灯片的支持和对本书一些引人入胜的引用。与他一起写面向对象数据库一章实在是一种乐趣。
C. Mohan提供了非常宝贵的帮助,他耐心地回答了许多在各种商业系统中的实现技术问题,尤其是索引、并发控制和恢复算法。Moshe Zloof回答了许多关于QBE语义和基于QBE的商业系统问题。Ron Fagin、Krishna Kulkarni、Len Shapiro、Jim Melton、Dennis Shasha和Dirk Van Gucht审阅了本书,提出了详细的反馈意见,大大改进了本书的内容和表达。Beloit College的Michael Goldweber、Wyoming的Matthew Haines、SUNY StonyBrook的Michael Kifer、Wisconsin的Jeff Naughton、Cornell的Praveen Seshadri和Brown的Stan Zdonik在其数据库课程中也使用了本书的**版,同时提供了反馈和书中某些错误的报告。尤其是Michael Kifer指出了第2章中的一个老算法的错误,该算法用来计算*小覆盖,同时为了提高模块性,建议在第2章中增加一些SQL特征。Gio Wiederhold的参考书目(被S. Sudarshan转化为Latex格式)和Michael Ley关于数据库和逻辑编程的联机参考书目对编辑本书各章节的参考书目有很大帮助。Shaun Flisakowshi和Uri Shaft在我使用Latex的漫长过程中经常给予我帮助。
我要特别感谢许多许多学生对Minibase软件做出的贡献。当我开发第1版(其中的大部分都被废弃了,但是它们影响了以后的版本)的时候,Emmanuel Ackaouy、Jim Pruyne、Lee Schumacher和Michael Lee与我一起工作。Emmanuel Ackaouy和Bryan So是我使用该版本教授CS564时的助教研究生,他们改进该项目的努力超出了对助教研究生的要求。在Berkeley,Paul Aoki使用Minibase的一个版本并提供了许多有用的注解。在CS764(研究生数据库课程)的整个班级中,学生们在我和Mike Carey领导的大量的课程项目中开发了当前Minibase版本的许多部分。当我**次使用Minibase教授CS564时,Amit Shukla和Michael Lee是我的助教研究生,他们进一步开发了该软件。
为开发Minibase组件,几个学生跟我工作了很长时间。这些组件包括可视化的缓冲区管理器和B+树的软件包(Huseyin Bektas、Harry Stavropoulos和Weiqing Huang);查询优化器和可视界面visualizer(Stephen Harris、Michael Lee和Donko Donjerkovic);基于Opossum模式编辑器的ER图工具(Eben Haber)和用于规范化的基于GUI的工具(Andrew Prock和Andy Therber)。另外,Bill Kimmel将CS764课程项目产生的大部分代码进行了综合和修改,它们包括以下部分:存储管理器、缓冲管理程序、文件和存取方法、关系操作和查询计划执行器。Ranjani Ramamurty在整理和综合不同模块上进一步扩展了Bill的工作。Luke Blanshard、Uri Shaft和Shaun Flisakowski把已发布代码的版本组装起来,开发了测试套件和基于Minibase软件的练习。Krishna Kunchithapadam测试了优化器,开发了Minibase GUI部分。
很显然,如果没有这么多天才们的贡献,Minibase软件是不可能产生的。由于该软件是对公众免费使用的,我希望更多的教师能够在讲授面向系统的数据库课程时把大量实现和实验的内容补充到讲义中。
我要感谢许多学生,他们开发和检查了练习的答案,同时对本书的草稿提供了有价值的反馈。按照字母顺序,他们是:X. Bao、S. Biao、M. Chakrabarti、C. Chan、W. Chen、N. Cheung、D. Colwell、C. Fritz、V. Ganti、J. Gehrke、G. Glass、V. Gopalakrishnan、M. Higgrins、T. Jasmin、M. Krishnaprasad、Y. Lin、C. Liu、M. Lusignan、H. Modi、S. Narayanan、D. Randolph、A. Ranganathan、J. Reminga、A. Therber、M. Thomas、Q. Wang、R. Wang、Z. Wang和J. Yuan。Wisconsin的Arcady Grenader、James Harrington和Marti Reames以及Berkeley的Nina Tang提供了特别详细的反馈。
当我与出版商打交道的时候,Charlie Fischer、Avi Siberschatz和Jeff Ullman给了我非常有价值的建议。从McGrawHill、Betsy Jones和Eric Munson的编辑那里得到了大量的评审意见,对本书给出了指导。无论什么时候对于突然出现的问题,Emily Gray和Brad Kosirog总能及时解决。在Wisconsin,Ginny Werner真诚地帮助我处理这些事情。
*后,本书非常耗费时间,在许多方面它带给我家庭的困难比带给我的还多。我的儿子们坦白地表明了他们的观点。那时五岁的Ketan说:“爸爸,不要再写那本无聊的书了。你没有任何时间来陪我。”两岁的Vivek说:“你还在写书?不陪我玩篮球!”他们所有的不满都由我的妻子Apu来承受。虽然如此,在我埋头写这本书的所有夜晚和**,她都努力使这个家庭像往常一样的热闹而幸福(更不用提那些当我埋头于成为一个教员的日子)。同样,在所有这些事情中,我都能看到我双亲的影子:我的父亲酷爱学习,我的母亲疼爱我们,这都影响了我。我的兄弟Kartik对本书的贡献主要是用电话不时地将我从工作中拉回来,但是如果我不感谢他,那么他会生气的。在这里我要感谢我的家庭,他们使我觉得所做的每一件事情都非常有意义(好极了!我知道我找到了一个合理的理由来感谢Kartik)。
第2版的致谢
当我们准备第2版的时候,McGrawHill出版社的Emily Gray和Betsy Jones进行了大量的审阅并提供了指导和帮助。Jonathan Goldstein帮助完成了空间数据库的参考书目。下面列出的审阅者在内容和组织上提供了有价值的反馈意见:Ohio大学的Liming Cai、Kansas大学的Costas Tsatsoulis、Houston大学的KwokBun Yue、Wayne州立大学的Clear Lake和William Grosky、Virginia大学的Sang H. Son、Minnesota大学的James M. Slack、Twente大学(荷兰)的Mankato和Herman Balsters、Caincinnati大学的Karen C. Davis、Florida大学的Joachim Hamer、Tulane大学的Fred Petry、Baylor大学的Gregory Speegle、Texas A&M大学的Salih Yurttas和San Francisco州立大学的David Chao。
许多人指出了第1版中的许多错误。我们要特别感谢下列人士:Portland州立大学的Joseph Albert、Wisconsin大学的Hanyin Chen、Oregon研究生院的Lois Delcambre、Southern Methodist大学的Maggie Eich、Curtin技术大学的Raj Gopalan、Toronto大学的Davood Raflei、South Australia大学的Michael Schrefl、Connecticut大学的Alex Thomasian和Siena大学的Scott Vandenberg。
我要特别感谢那些详细回答商业系统是如何支持各种功能的人们,他们是:IBM公司的Mike Carey、Bruce Lindsay、C. Mohan和James Teng;Informix公司的M. Muralikrishna和Michael Ubell;Microsoft公司的David Campbell、Goetz Graefe和Peter Spiro;Oracle公司的Hakan Jacobsson、Jonathan D. Klein、Muralidhar Krishnaprasad和M. Ziauddin;以及Sybase公司的Marc Chanliau、Lucien Dimino、Sangeeta Doraiswamy、Roger MacNicol和Tirumanjanam Rengarajan。
当Ketan(今年8岁)读了第1版中对自己的感谢后,他提出了一个简单问题:“为什么不把这本书献给我们?为什么不给妈妈?”Ketan,我注意到了这个无法说明的疏漏。Vivek(今年5岁)更关心自己的名声:“爸爸,我的名字是不是出现在本书的所有拷贝上?本书是否在世界上的每一个计算机科学系中人们都使用它?”Vivek,我希望是这样。*后,没有Apu和Keiko的支持,本次修订是不可能完成的。
第3版的致谢
我们感谢Raghav Kaushik在XML讨论中的贡献和Alex Thomasian在并发控制中的贡献。我们还要特别感谢Jim Melton,他提供了自己一本尚未出版的书籍,内容涉及到SQL∶1999标准中面向对象扩展,同时还为第3版草稿检查出错误。Berkeley的Marti Hearst非常慷慨,她提供给我们关于知识获取的幻灯片,Alon Levy和Dan Suciu也乐于让我们采用他们关于XML的课程笔记。Mike Carey则提供给我们关于Web Services的资料。
McGrawHill的Emily Lupash一直在支持和鼓励我们,她整理了由EmbryRiddle Aeronautical大学的Ming Wang,RPI的Cheng Hsu,Masshachusettes大学的Paul Bergstein,SJSU的Archana Sathaye,Purdue的Bharat Bhargava,Bradley的John Fendrich,Central Michigan的Ahmet Ugur,Colorado的Richard Osborne,CCNY的Akira Kawaguchi,Ben Gurion的Mark Last,California大学的Vassilis Tsotras,和Central Florida的Ronald Eaglin提出的大量修改意见。同时,我们对这些给本书建议的学者表示衷心的感谢,他们的宝贵意见大大地提高了本书修订后的水平。我要感谢Gloria Schiesl和Jade Moran非常乐观和**地解决了*后时刻的混乱,他们和Sherry Kane一起为我们制定了非常紧凑合理的日程安排。我还要感谢Michelle Whitaker对本书的封面和封底设计进行了多次的修改。
在Raghu的日记中写道,Ketan模仿骆驼分享帐篷的示例,认为“只有这样是公平的”——Raghu把这本书只献给他和Vivek,因为“妈妈已经享受到这本书了”。尽管这种说法得到Vivek大力热情的支持,再加上溺爱他们的父亲的纵容,然而,这本书仍然献给Apu,就像从第1版开始一样。
对于Johannes来说,没有Keiko的支持和鼓励,没有Elisa睡着时平静可爱的面庞,本次修订是无法完成的。