
本书是数据库初学者和初级开发人员不可多得的数据库宝典,其中融入了作者
对数据库深入透彻的理解和丰富的实际操作经验。与第2版一样,本版也深入浅出地描绘了数据库原理及其应用。但本版技术更新、实用性更强,新增的内容包括子类型/子类型实体、IE Crow’s Foot E-R图、基于Wed的数据库处理、商业智能系统、SQL视图、SQL Server 2005 Express Edition和 My SQL 5.0的使用等。
书中介绍了在成功管理数据库系统的基本概念,包括:
。关系模型的基本原理
。结构化查询语言(SQL)
。数据建模
。数据库设计
。数据库管理
。Web数据库处理
前 言
Colin Johnson是西雅图一家小型制造厂的产品管理员。几年前,Colin计划构建一个数据库来跟踪产品包中的产品。开始时,他运用电子制表软件来完成这一工作,却无法通过该表获取所需的报表。Colin听说了Microsoft Access,希望该软件能解决问题。经过几天的尝试,他发现无法掌握Access的使用方法,于是购买了一些流行的Access书籍并努力学习。不过最终他还是放弃了,后来他聘请了一个顾问,该顾问创建了一个大致可满足Colin要求的应用程序。一段时间以后,Colin想对此应用程序作一些改动,但他却不敢进行这样的尝试。
Colin是个成功的商人,他能够主动地去实现他的目标。作为一个老练的Windows用户,他可以通过自学掌握Excel、PowerPoint以及大量面向产品的应用程序。但他在使用Access来解决问题时却停滞不前。Colin认为“我确信我可以做到,但我没有更多的时间”。这样的事件非常引人注目,因为在过去的10年内上演了无数次。
Microsoft Corporation、Oracle和其他数据库管理系统(DBMS)厂商都意识到了这一情况,他们投入了数百万美元来创建更好的图形用户界面、数以百计的多窗格向导,以及众多示例应用程序。遗憾的是,这样的努力无法从根本上解决问题。事实上,许多用户并不清楚向导可以实现哪些功能。一旦这些用户需要修改数据结构或是组件(例如,窗体和查询),就会陷入麻烦中,这令他们措手不及。如果不了解底层结构,这些用户就只能绞尽脑汁,却徒劳无功。最终也只能得到一些设计糟糕的数据库和应用程序,而无法满足用户的要求。
那么为什么像Colin这样的用户可以学会使用文字处理软件或电子数据表这样的产品,却无法学会使用DBMS产品呢?其中一个主要原因就是许多人都不熟悉数据库的基本概念。每个人可能都知道段落和边距,却无法理解关系的概念。其次,他们可能觉得使用DBMS产品一定比了解数据库概念本身更容易。“我们想做的只是跟踪一些内容,为什么实现起来却这么困难?”如果不了解关系模型,在存储数据之前将一张销售发票分成5个单独的表就可能使业务用户感到迷惑。
基本概念
当今的技术特点是如果不学习基本概念,那么就不可能成功地利用DBMS。凭借多年来为业务用户开发数据库的经验,我认为数据库的基本概念主要包括以下内容:
● 关系模型的基本概念
● 结构化查询语言(SQL)
● 数据建模
● 数据库设计
● 数据库管理
由于当前Internet和World Wide Web的广泛使用,因此可以增加一个更为基本的概念:
● Web数据库处理
像Colin这样的用户(或是将接受类似工作的学生)不需要像信息系统专家那样深入地了解这些主题。因此,本书只介绍了一些基本的概念——这些内容对于像Colin这样的用户(创建和使用小型数据库的用户)来说至关重要。我已经在Database Processing: Fundamentals, Designs, and Implementation一书中重写、简化和删除了一些内容1。 不过在本书中,也力求讨论准确,不会产生误导。即使学生们已学习过更高级的数据库课程,也仍然可从本书中获益。
独立于DBMS产品的概念
本书假设学生没有使用过任何特定的DBMS产品。本书通过Microsoft Access、SQL Server 2005 Express Edition和MySQL 5.0举例说明了数据库概念,从而使学生可以将这些产品作为工具使用,并且实际地尝试练习书中的内容,但是,所有的概念都适合于DBMS产品。通过这种方式,学生们可以理解所有数据库的基础知识—— 从小型的Access数据库到大型的Oracle或DB2数据库。
而且这一方法也避免了一个常见的问题。在同时介绍概念和产品时,学生容易将概念与产品特性、功能相混淆。例如参照完整性约束。在讲授基础理论时,学生都知道在某些情况下,一个表中的列值必须总是由另一个表中的列值提供。学生也将知道这一约束如何出现在关系定义的上下文中,以及DBMS或应用程序如何强制执行这一约束。如果结合具体的DBMS教学,如Access,那么学生将学到的知识就可能是:在某些情况下选取复选框,而在其他情况下不选取的具体操作。这样很容易导致在介绍产品特性的同时,使学生们淡忘了数据库的基本理论。
然而这并不是说在本书中将不使用DBMS。相反,学生们可以通过使用企业版DBMS产品来熟悉这些基本概念。本书的这一版本包括了关于Access、SQL Server 2005 Express Edition和MySQL 5.0的充分的基本信息,从而使您可以在不借助其他书籍或资料的情况在课堂上介绍这些产品。本书深入介绍了Access,因为它是在个人数据库方面非常流行的产品(并且包括在Microsoft Office Professional应用程序套件中)。通过学习这些Access相关知识,学生可以完成书中介绍的所有数据库任务,并且可能胜任一些课程的学习。然而,如果希望深入介绍特定的DBMS或使用本书中没有介绍的DBMS产品,则需要提供额外的书籍或资料。Prentice-Hall提供了有关Microsoft Access 2003和其他DBMS产品的大量辅助读物,可以结合本书一起学习。
Access工作台
本书前面的版本在附录中介绍了Access。Access广泛用于初级数据库课程,因此这一版本介绍了如何使用Access的更多信息。每一章都带有一个“Access工作台”部分,其中使用Access举例说明了本章的概念和技术。“Access工作台”的第一部分介绍了如何创建数据库和简单的表,到最后的第七部分则介绍了针对Access数据库的Web数据库处理。“Access工作台”的作用不是全面地介绍Access,而是介绍包括了所有必要的基础Access主题,从而使学生可以有效地构建并使用Access数据库。
复习题、练习题和实践项目
学生能否学会最终运用所学的知识非常重要,因此每章都提供了一些复习题、练习题(包括针对“Access工作台”的练习题)和3个贯穿本书始终的项目。如果学生阅读并理解了每一章的内容,就应该能知道复习题的答案。练习题要求学生将每章所讲的概念应用到具体的小问题或任务中。
第一个项目Garden Glory介绍了一个向个人或企业提供园艺服务的合伙公司的数据库,并讨论了该数据库的开发和使用。第二个项目James River珠宝行分析了一家零售店为支持针对的购买者而设计的程序的数据库需求。第三个项目Queen Anne Curiosity商店介绍了零售商店的销售和库存需求。本书的所有章节和附录C中都包括了这3个项目。在每个实例中,都要求学生将各章中学到的知识运用到项目中去。教师们可以填写本书最后的调查表向培生出版集团驻北京代表处领取教学支持资料,其中包括与本书相关的一些数据库和示例数据。在过去30多年中,我们已经发现数据库和数据库应用程序的开发是一项令人愉快和有益的活动。我们相信:数据库的数量、大小和重要性会在将来不断增加,并且该领域将越来越显示其突出的地位。我们希望本书中介绍的概念、知识和技术将帮助学生成功地参与到现在和多年以后的数据库项目构建中。
对第2版的改进
主要的改动如下:
● 介绍了SQL视图(附录C)。
● 介绍了子类型/子类型实体(第4章和第5章)。
● 使用了IE Crow’s Foot E-R图而不是UML E-R模型以方便用户使用,并且与Database Processing的第10版保持一致(第4章和后面的章节)。
● 重新安排了第6章和第7章中的主题——在第6章中作为数据库管理的一部分介绍了分布式数据库和面向对象的数据库。
● 附带介绍了基于Web的数据库处理,包括创建Web页面的特定步骤和代码示例,这些Web页面显示存储在数据库中的数据(第7章)。
● 介绍了商业智能(BI)系统的概念(第7章)。
● 在每章和附录C中使用“Access工作台”介绍Access的基础知识。
● 介绍SQL Server 2005 Express Edition(附录A)和MySQL 5.0(附录B)的使用。
此外,使用示例数据集充分地开发了在本书各个部分中使用的3个示例数据库——在每一章中使用的Wedgewood Pacific Corporation和Heather Sweeney Designs,以及在“Access工作台”中使用的Wallingford Motors。这些数据库的使用提供了全书各个章节之间概念示例的连续性,并且使学生可以创建实际的数据库以试验每章中讨论的主题。
此外,还有一个没有改动的方面需要提及,即这一版中保留了第2版中增加的较为有效的规范化讨论,并且使用说明性的过程来规范化关系。本书的第1版介绍了规范化的基本原理,让学生自己应用这些基本原理。第2版的第2章介绍了学生可以用于运用规范化的4步过程。这一改动不仅简化了规范化任务,而且使规范化的基本原理更加易于理解。因此,当前版本中沿用了这一方法。对于需要深入了解范式的教师,本书第5章中在讨论范式时介绍了2NF和3NF的简短定义。
主要内容
本书共包括7章和3个附录。第1章解释了使用数据库的原因、数据库的组成以及开发数据库的方法。学生们将学习数据库及其应用程序的用途、数据库相对于电子表格列表的差别和优势。第2章介绍了关系模型,定义了基本的关系模型术语,同时还介绍了规范化原则的基本概念,并介绍了规范化过程。
第3章讲述了基本的SQL语句。介绍了定义数据的基本SQL语句,如SQL SELECT和数据修改语句。本书并不介绍高级的SQL语句,只讲述一些核心的语句。附录C介绍了SQL视图。接下来的3章讨论了数据库设计和管理。第4章使用实体-关系(E-R)模型解决数据建模问题,其中包括对数据建模的需求、基本的E-R术语和概念,还提供了一个简短的E-R建模示例应用程序(Heather Sweeney Designs)。第5章讲述了数据库设计,解释了规范化的基本概念。第4章示例中的数据模型在第5章中则被转换为关系设计。
第6章讨论了数据库管理。构建了一个作为功能数据库的示例数据库,并且将其用作讨论数据库管理需求的示例。本章概述了并发控制、安全性和备份及恢复技术。数据库管理主题对所有的数据库都很重要,对个人的单用户数据库也是如此。事实上,这些主题在某些方面对于私人数据库更为重要,因为它们没有专业的数据库管理员来确保关键任务的执行。第6章也讨论了分布式数据库和面向对象的数据库。
最后,第7章介绍了使用基于Web的数据库处理,包括开放数据库连接(ODBC)、活动数据对象(ADO)、活动服务器页面(ASP)的讨论。本章也讨论了可扩展标记语言(XML)的出现和基本概念,并且介绍了商业智能(BI)系统。
附录A提供了SQL Server 2005 Express Edition的简短介绍,附录B则提供了MySQL 5.0的类似介绍。在每章和附录C的“Access工作台”中都包括了对Microsoft Access的介绍。
David M. Kroenke
西雅图,华盛顿区
1 David Kroenke所著的Database Processing,10th Edition一书(Upper Saddle River, NJ:Prentice-Hall,2004)。
目 录
第Ⅰ部分 基 础 知 识
第1章 数据库简介 3
1.1 使用数据库的原因 4
1.1.1 关于列表的问题 4
1.1.2 使用关系数据库 7
1.1.3 关系表的处理 13
1.2 数据库系统的概念 14
1.2.1 数据库 15
1.2.2 DBMS 16
1.2.3 应用程序 18
1.2.4 个人数据库系统和企业
数据库系统的比较 20
1.3 Access工作台:第1部分——
熟悉Microsoft Access 22
1.3.1 创建Access数据库 23
1.3.2 创建数据库表 26
1.3.3 在表中插入数据——数据
表视图 34
1.3.4 修改表中的数据——数据
表视图 37
1.3.5 删除表中的行——数据
表视图 38
1.3.6 在表中插入数据——使用
表单 40
1.3.7 修改数据和删除记录——
使用表单 44
1.3.8 创建一个表的Access
报表 44
1.3.9 关闭数据库并
退出Access 47
1.4 小结 48
1.5 复习题 49
1.6 练习题 50
1.7 Access工作台练习题 51
1.8 Garden Glory项目问题 52
1.9 James River珠宝行项目
问题 52
1.10 Queen Anne Curiosity商店
项目问题 53
第2章 关系模型 55
2.1 关系 56
2.1.1 一个关系示例与两个非
关系示例 57
2.1.2 显示关系结构的说明 58
2.1.3 术语说明 59
2.2 键的类型 59
2.2.1 复合键 60
2.2.2 候选键与主键 60
2.2.3 代理键 63
2.2.4 外键与参照完整性约束 64
2.3 NULL值的问题 68
2.4 函数依赖与规范化 68
2.4.1 函数依赖 69
2.4.2 再论主键与候选键 70
2.4.3 规范化 71
2.4.4 关系设计原则 72
2.4.5 规范化过程 72
2.4.6 规范化的示例 74
2.5 Access工作台:第二部分——
在Microsoft Access中操作多
个表 79
2.5.1 WMCRM数据库中可能
的修改问题 80
2.5.2 操作多个表 84
2.5.3 创建表之间的关系 86
2.5.4 使用包括两个表的表单 90
2.5.5 创建包括两个表中数据
的报表 91
2.5.6 关闭数据库并
退出Access 92
2.6 小结 93
2.7 复习题 94
2.8 练习题 95
2.9 Access工作台练习题 96
2.10 Garden Glory项目问题 99
2.11 James River Jewelry珠宝行
项目问题 100
2.12 Queen Anne Curiosity商店
项目问题 101
第3章 结构化查询语言 105
3.1 示例数据库 106
3.2 用于数据定义的SQL语句 110
3.2.1 使用表约束定义主键 115
3.2.2 使用表约束定义外键 116
3.2.3 向DBMS提交SQL
语句 118
3.3 插入关系数据的SQL语句 121
3.4 SQL关系查询语句 124
3.4.1 SQL SELECT/FROM/
WHERE架构 124
3.4.2 从单个表中读取指定列 125
3.4.3 从单个表中读取指定行 127
3.4.4 从单个表中读取指定行和
指定列 129
3.4.5 在WHERE子句中指定
范围、使用通配符和
空值 131
3.4.6 对结果进行排序 134
3.4.7 SQL内置函数和计算 135
3.4.8 内置函数和分组 138
3.4.9 使用子查询处理多个表 139
3.4.10 使用连接查询多个表 141
3.4.11 SQL JOIN…ON语法 145
3.4.12 外部连接 148
3.5 修改和删除关系数据
的SQL语句 150
3.5.1 修改数据 150
3.5.2 删除数据 152
3.6 修改和删除表和
约束的SQL语句 153
3.6.1 DROP TABLE和ALTER
TABLE语句 153
3.6.2 CHECK约束 154
3.7 SQL视图 155
3.8 Access工作台:第三部分——
在Microsoft Access中使用
查询 155
3.8.1 使用Microsoft Access
SQL 156
3.8.2 使用Microsoft Access
QBE 160
3.8.3 使用Microsoft Access
参数查询 165
3.8.4 使用Microsoft Access
SQL创建表 166
3.8.5 修改Access表以添加Access
SQL不支持的数据需求 169
3.8.6 使用Microsoft Access SQL
插入数据 174
3.8.7 使用Access SQL添加参照
完整性约束 177
3.8.8 修改Access数据库以添加
Access SQL不支持的
约束 178
3.8.9 关闭数据库并退出
Access 180
3.9 小结 181
3.10 复习题 182
3.11 练习题 184
3.12 Access工作台练习题 186
3.13 Garden Glory项目问题 189
3.14 James River珠宝行项目
问题 190
3.15 Queen Anne Curiosity商店
项目问题 192
第Ⅱ部分 数据库设计和管理
第4章 数据建模与实体-关系模型 197
4.1 需求分析阶段 198
4.2 实体-关系数据模型 199
4.2.1 实体 199
4.2.2 属性 200
4.2.3 标识符 200
4.2.4 关系 201
4.3 实体-关系图 204
4.3.1 E-R模型的不同版本 205
4.3.2 数据建模产品中E-R
模型的变化 205
4.3.3 弱实体 207
4.3.4 ID依赖实体 207
4.3.5 非标识符依赖的弱实体 209
4.3.6 子类实体 212
4.3.7 递归关系 213
4.4 开发E-R图示例 214
4.4.1 Heather Sweeney Designs
公司的数据库 214
4.4.2 培训课的客户列表 214
4.4.3 给客户的信函模板 216
4.4.4 销售发货单 219
4.4.5 属性说明 222
4.4.6 业务规则 224
4.4.7 验证数据模型 224
4.5 Access工作台:第四部分——
使用Microsoft Access来开发
原型 225
4.5.1 为原始的数据模型创建
表单模型 226
4.5.2 为修改过的数据模型创建
表单原型 228
4.5.3 Access的Banded Form
and Report Editors 230
4.5.4 关闭数据库并退出
Access 231
4.6 小结 231
4.7 复习题 232
4.8 练习题 234
4.9 Access工作台练习题 234
4.10 Garden Glory项目问题 235
4.11 James River Jewelry项目
问题 235
4.12 Queen Anne Curiosity 商店项目问题 236
第5章 数据库设计 239
5.1 把数据模型转换为数据库
的设计方案 240
5.2 使用关系模型表示实体 241
5.2.1 ITEM实体的表示 241
5.2.2 CUSTOMER实体
的表示 243
5.2.3 SALES-COMMISSION
实体的关系设计 246
5.2.4 弱实体的表示 247
5.3 关系的表示 251
5.3.1 强实体中的关系 251
5.3.2 使用了弱实体的关系 258
5.3.3 子型实体关系的表示 259
5.3.4 递归关系的表示 260
5.4 Heather Sweeney Designs公司
的数据库设计 264
5.4.1 弱实体 265
5.4.2 关系 265
5.4.3 强制参照完整性 266
5.5 Access工作台:第五部分——
Microsoft Access中的关系 268
5.5.1 Access中的多对多
关系 268
5.5.2 Access中的一对一关系 268
5.5.3 关闭数据库并退出
Access 273
5.6 小结 273
5.7 复习题 274
5.8 练习题 276
5.9 Access工作台练习题 276
5.10 Garden Glory公司项目
问题 277
5.11 James River珠宝行项目
问题 277
5.12 Queen Anne Curiosity商店
项目问题 278
第6章 数据库管理 279
6.1 Heather Sweeney Designs公司
的数据库 280
6.2 并发控制 287
6.2.1 使用原子事务的必要性 287
6.2.2 并发事务处理 288
6.2.3 丢失更新问题 289
6.2.4 并发问题:脏读取、不
可重复读取和幻象读取 290
6.2.5 资源锁定 290
6.2.6 串行化事务 292
6.2.7 死锁 292
6.2.8 乐观锁定和悲观锁定 293
6.2.9 声明锁定特征 294
6.2.10 一致事务 295
6.2.11 事务隔离级别 296
6.3 游标类型 297
6.4 数据库安全 298
6.4.1 用户账户 299
6.4.2 处理权限和责任 300
6.4.3 DBMS级别的安全 304
6.4.4 应用程序级别的安全 305
6.5 数据库备份与恢复 306
6.5.1 通过重新处理进行恢复 306
6.5.2 通过回滚和前滚
进行恢复 307
6.5.3 DBA的其他职责 310
6.6 分布式数据库的处理 310
6.6.1 分布式数据库的类型 310
6.6.2 分布式数据库面临
的挑战 312
6.7 对象-关系数据库 313
6.8 Access工作台:第六部分——
Microsoft Access中的数据库
管理 313
6.8.1 Access中的数据库安全 314
6.8.2 受保护数据库的使用 322
6.8.3 受保护数据库的管理 324
6.8.4 关闭数据库并退出
Access 324
6.9 小结 324
6.10 复习题 326
6.11 练习题 328
6.12 Access工作台练习题 329
6.13 Garden Glory项目问题 330
6.14 James River珠宝行
项目问题 331
6.15 Queen Anne Curiosity商店项目问题 332
第7章 数据库处理应用程序和
商业智能 335
7.1 数据库处理的环境 336
7.1.1 查询、表单和报表 337
7.1.2 客户机/服务器以及传统的
应用程序处理 339
7.1.3 存储过程和触发器 339
7.2 Web数据库处理 340
7.2.1 ODBC 342
7.2.2 使用IIS进行Web处理 345
7.2.3 Active Server Pages
(ASP) 349
7.2.4 Active Data Objects
(ADO) 352
7.2.5 Web数据库处理面临
的挑战 358
7.3 数据库处理和XML 358
7.3.1 XML模式文件 359
7.3.2 XML和数据库处理 360
7.3.3 XML Web Services 362
7.4 商业智能系统 363
7.5 Access工作台:第七部分:
使用Microsoft Access进行
Web数据库处理 367
7.5.1 Wallingford Motors的
Web主页 367
7.5.2 选择数据库文件 369
7.5.3 创建ODBC数据源 370
7.5.4 创建客户联系方式的
视图 371
7.5.5 创建ASP页面 372
7.5.6 运行ASP页面 374
7.5.7 关闭 374
7.6 小结 375
7.7 复习题 376
7.8 练习题 378
7.9 Access工作台练习题 380
7.10 Garden Glory公司项目
问题 381
7.11 James River Jewelry珠宝行
项目问题 381
7.12 Queen Anne Curiosity商店
项目问题 382
附录A Microsoft SQL Server 2005
Express Edition简介 383
附录B MySQL简介 395
附录C SQL视图 409
术语表 427