图书前言

本书是从斯坦福大学的“数据库入门”(CS145)的课程笔记演变而来的。CS145是五门系列课程的第一门。后面的四门是: 数据库系统原理,数据库系统实现的工程训练,事务和分布式数据库,以及数据库理论。由于Arthur Keller颇有创意的讲授,使这门课逐步发展成着重于数据库的设计和编程的课程,而这两方面内容对计算机科学专业的大多数学生来说是最有用的。这门课还包括一个内容广泛、不断滚动的课外工程项目,供学生设计并实现一个具体的数据库应用。与该工程项目相关的作业、其他课外作业、测验以及其他课程资料都可以从本书的主页上得到;请参阅“万维网(World Wide Web)上的支持”部分。

本 书 的 使 用

本书适用于讲授一学期的课程。如果像CS145这样按四分之一学年(译注:每学年分为四学期,这种制度的一学期)的课程来安排,就不得不省略或跳过书中的某些内容。最好由教师自己决定削减哪些内容,但以下内容显然是可以削减的:有关Datalog的部分,SQL编程的高级部分以及SQL3的细节部分。

如果课程中安排了不断滚动的工程项目,那么,提早讲授SQL语句部分是很重要的。可以推后讲授的内容包括:有关Datalog的部分,第5章和第6章的SQL3部分以及第3章的某些理论部分(但是,如果学生们在开始进行SQL编程之前,想设计出优秀的关系模式的话,他们就需要规范化的知识,或许还需要多值依赖的知识)。

预 备 知 识

我们把本书定位于“夹层”水平,即高年级本科生和低年级研究生水平。这门课程正规的预备知识相当于大学二年级的水平:(1) 数据结构、算法和离散数学;(2)软件系统、软件工程和编程语言。学生们对以下内容至少要有初步的了解:代数的表达式和定律、逻辑、基本数据结构(如搜索树)、面向对象的编程概念以及编程环境。我们相信,按照典型的计算机科学专业的教学计划,到大学三年级结束时,学生们肯定会拥有充分的背景知识。

练习

本书包括多方面的练习,几乎每节都有。我们把比较难的练习或练习中比较难的部分用惊叹号(!)标出。最难的练习用双惊叹号(!!)标出。

有一些练习或练习的某些部分标有星号(*)。对于这些练习,我们将尽量通过本书的主页提供解答。这些解答是公开的,并可用于自我检测。注意:在某些情况下,练习B要求您对另一个练习A的解答进行修改或改进。如果A的某些特定部分有解答,那么B的相应部分也将有解答。

万维网上的支持

本书的主页是:

http://wwwdb.stanford.edu/~ullman/fcdb.html

这里有带星号的练习的解答,对已发现的书写或印刷错误的勘误表以及辅助教材。我们希望每一个像我们一样讲授CS145课程的人都能获得这些课程笔记,包括课外作业、解答和工程项目的作业。

致谢

特别感谢Bobbie Cochrane和Linda DeMichiel,感谢他们在SQL3标准方面给予的帮助。还有其他许多人帮助我们审校手稿,他们是:Donald Aingworth,Jonathan Becker,Larry Bonham,Christopher Chan,Oliver Duschka,Greg Fichtenholtz,Bart Fisher,Meredith Goldsmith,Steve Huntsberry,Leonard Jacobson,Thulasiraman Jeyaraman,dwight Joe,Seth Katz,Brian Kulman,LeWei Mo,Mark Mortensen,Ramprakash Narayanaswami,Torbjorn Norbye,Mehul Patel,Catherine Tornabene,Jonathan Ullman,Mayank Upadhyay,Vassilis Vassalos,Qiang Wang,Sundar Yamunachari和Takeshi Yokukawa。当然,剩下的错误由我们负责。