SQL实践教程(第10版)

978-7-115-58468-7
作者: 马克·谢尔曼(Mark Shellman)哈桑·阿夫尤尼(Hassan Afyouni)菲利普·J.普拉特(Philip J. Pratt)玛丽·Z.拉斯特(Mary Z. Last)
译者: 徐波
编辑: 郭泳泽

图书目录:

详情

本书介绍了SQL的编程原理、基本原则、使用方法及技巧,包含数据库设计基础知识,第一范式、第二范式、第三范式的概念和范式间的转换方法,涉及数据库创建、单表查询、多表查询、更新数据、数据库管理知识,并提供了常用SQL语句的案例速查表。公司使用SQL来管理订单、物品、客户和销售代表的有趣案例贯穿全书,方便读者跟随进度逐步上手SQL。 本书可作为高等院校SQL或数据库相关课程的参考教材,也可作为SQL的案例参考和函数速查手册,适合有一定编程基础、想要上手使用SQL的人阅读。

图书摘要

版权信息

书名:SQL实践教程(第10版)

ISBN:978-7-115-58468-7

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [美]马克·谢尔曼(Mark Shellman)

     [美]哈桑·阿夫尤尼(Hassan Afyouni)

     [美]菲利普·普拉特(Philip J. Pratt)

     [美]玛丽·拉斯特(Mary Z. Last)

译    徐 波

责任编辑 郭泳泽

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e58468”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

版权声明

A Guide to SQL, 10th Edition

Mark Shellman, Hassan Afyouni, Philip J. Pratt, and Mary Z. Last

Copyright © 2021 by Course Technology, a part of Cengage Learning

Original edition published by Cengage Learning. All Rights reserved.

本书原版由圣智学习出版公司出版。版权所有,盗印必究。

Posts & Telecom Press Co. Ltd is authorized by Cengage Learning to publish, distribute and sell exclusively this edition. This edition is authorized for sale in the People's Republic of China only (excluding Hong Kong SAR, Macao SAR and Taiwan). No part of this publication may be reproduced or distributed by any means, or stored in a database or retrieval system, without the prior written permission of Cengage Learning.

本书中文简体字翻译版由圣智学习出版公司授权人民邮电出版社独家出版发行。此版本仅限在中华人民共和国境内(不包括香港、澳门特别行政区及台湾地区)销售。未经授权的本书出口将被视为违反版权法的行为。未经出版者预先书面许可,不得以任何方式复制或发行本书的任何部分。

ISBN 978-7-115-58468-7

Cengage Learning Asia Pte. Ltd.

151 Lorong Chuan, #02-08 New Tech Park, Singapore 556741

本书封面贴有Cengage Learning防伪标签,无标签者不得销售。

内容提要

本书介绍了SQL的编程原理、基本原则、使用方法及技巧,包含数据库设计基础知识,第一范式、第二范式、第三范式的概念和范式间的转换方法,涉及数据库创建、单表查询、多表查询、更新数据、数据库管理知识,并提供了常用SQL语句的案例速查表。公司使用SQL来管理订单、物品、客户和销售代表的有趣案例贯穿全书,方便读者跟随进度逐步上手SQL。

本书可作为高等院校SQL或数据库相关课程的参考教材,也可作为SQL的案例参考和函数速查手册,适合有一定编程基础、想要上手使用SQL的人阅读。

前  言

结构化查询语言(Structured Query Language,SQL,发音为se-quel或ess-cue-ell)是一种流行的计算机语言,有着极广的受众,包括家庭计算机用户、小型企业主、大型机构的终端用户、程序员等。尽管本书使用MySQL Community Server 8.0.18作为介绍SQL的载体,但各章的内容、示例和习题也可以用其他任何SQL实现工具来完成。

本书在写作之时就照顾到了范围很广的教学层面,包括接受计算机科学入门课程的初学者和钻研高级信息系统课题的研究者。本书既可用于独立的SQL课程,也可作为数据库概念教学的辅助教材,帮助学生掌握SQL。

应按照顺序学习本书各章内容。建议学生完成章末的习题及章节中的示例,以实现最好的学习效果。第8章的内容要求读者至少学习或使用过一种编程语言,因此教师应该判断学生是否能够理解该章的概念。没有编程背景的学生可能难以理解嵌入式SQL的话题。如果觉得学生难以理解这些编程示例,教师可以选择跳过第8章的教学。

《SQL实践教程(第10版)》建立在以前版本成功的基础之上。这些版本通过一个使用SQL来管理订单、物品、顾客、销售代表的业务环境,描述了SQL的基本指令。和以前的版本一样,本书使用MySQL 8.0、Oracle 19c、SQL Server 2019作为展示SQL指令的载体。本书还会在Oracle和SQL Server指令与MySQL版本有所不同时予以说明。Oracle和SQL Server用户的区别将在“用户说明”中指出,这样可以让学生更容易明白他们所使用的SQL实现工具有什么不同。学生可以从Oracle网站免费下载Oracle 19c企业版、专业版或精简版以完成本书的学习,而不必购买和安装完整的Oracle程序。

本书用一整章内容来介绍数据库的设计,向学生展示了如何实现一个适当的设计、满足一组特定的需求,并讨论了存储过程和触发器等重要主题。本书还围绕宠物食品用品供应商和学生住宿公司这两个案例更新了相关问题。

本书特色

使用示例

从第3章开始,本书的每一章都包含了多个使用SQL解决问题的示例。通过这些示例,你会看到用于解决问题并实现解决方案的SQL指令。对于大多数学生而言,通过示例学习是精通一门技术语言的有效学习方式。由于这个原因,教师应该鼓励学生在计算机旁阅读各章的内容,并在计算机上输入书中的指令。

案例研究

关于KimTay Pet Supplies公司的延续性案例研究会在本书各章的案例及每章案例练习的第1组习题中出现。尽管为了便于管理,这个数据库的规模较小,但KimTay数据库的示例和习题模拟了使用SQL指令可以实现的真实业务。在各章及各章最后的习题中围绕同一个案例进行探究可以保证知识的高度连续性,进一步加强学习效果。

本书中的另一个案例研究围绕StayWell数据库,它会在每章案例练习的第2组习题中出现。这个案例研究向学生提供了在没有文中示例的直接引导下探索“自己的内容”的机会。

嵌入式问题

你在许多地方可以看到“有问有答”栏目,它们的作用是帮助读者在继续学习之前理解一些关键的内容。在有些情况下,问题的设计目的是在介绍一些特殊的概念之前让读者有机会对它们进行思考。每个问题的解答都会直接出现在问题的后面。读者可以直接阅读问题和解答,但是如果花点时间思考问题的答案,之后再将自己的解答与书中提供的解答进行比较,无疑会有更大的帮助。

关于Oracle和SQL Server的用户说明

当一条SQL指令在Oracle或SQL Server中具有不同的用法或格式时,我们将在“用户说明”中对其予以说明。当读者看到与自己所使用的SQL实现工具相关的用户说明时,请确保阅读它的内容。读者也可以阅读其他SQL实现工具的用户说明,以了解各种SQL实现工具的区别。

实用提示

实用提示框对基础信息进行了强调,为SQL的成功实现提供了有用的技巧。学生应该留意实用提示框中的建议,在练习SQL技能的时候也可以重温这些提示。

复习材料

本书各章最后可能设有“本章总结”“复习题”环节。其中,“复习题”测试学生是否记住了本章的重点,有时也会测试学生对他们所学习的知识的应用能力。此外,“关键思考题”用于锻炼学生解决问题的能力和分析技巧,它们会在正文和其他问题中穿插出现。各章还包含了与KimTay和StayWell 数据库相关的练习。

附录

本书正文之后有3个附录。附录A是SQL参考,描述了本书所介绍的主要SQL指令的作用和语法。学生可以阅读附录A,以快速掌握在什么时候、如何使用重要的指令。

附录B提供了有关“如何进行参考”的信息,允许学生通过搜索一个问题的解答来交叉引用附录A的适当内容。

附录C提供了编写查询指令的10条戒律,并对组成SQL语句的步骤和规则进行了总结。

教师支持资源

本书为教师和学生提供了丰富的补充材料包。教师支持资源提供了详细的教师电子手册、插图文件、教学幻灯片和Cognero测试库。教师电子手册提供了使用本书的一些建议和策略,并包含了复习题和案例练习的答案。插图文件允许教师使用本书中出现的插图创建自己的幻灯片。教师也可以使用材料包中以PowerPoint幻灯片形式提供的课件。这些课件完美契合了各章所涵盖的内容,包含了各章的插图,并且可以自定义。

教师支持资源还包含了关于KimTay和StayWell数据库的案例脚本文件,可在MySQL、Oracle和SQL Server中创建这两个数据库中的表和数据。有了这些文件之后,教师可以选择性地向学生布置作业,要求学生创建本书所使用的数据库并在其中加载数据。教师也可以通过向学生提供MySQL、Oracle或SQL Server脚本文件来自动完成或简化这些任务。

本书的组织形式

本书包含8章和3个附录,下面依次对它们进行描述。

第1章:KimTay和StayWell数据库简介

第1章介绍了贯穿全书的两个数据库案例:KimTay数据库和StayWell数据库。本章提供了许多“有问有答”习题,以帮助学生理解如何对数据库进行操作,为以后使用SQL进行实际操作打下基础。

第2章:数据库设计基础知识

第2章介绍了与关系数据库、功能依赖关系和主键有关的重要概念和术语,并介绍了设计数据库以满足特定需求的一种方法。本章还描述了在数据库设计中查找和修正各种不同的潜在问题的规范化过程。最后,本章介绍了如何使用实体关系图以图形的方式表示数据库设计。

第3章:创建表

在第3章中,学生们开始使用数据库管理系统(Database Management System,DBMS)创建并运行SQL指令来创建表、使用数据类型并向表中添加行。本章还讨论了空值的角色和用法。

第4章:单表查询

第4章是本书使用SQL指令查询数据库的两章之一。本章中的查询都只涉及单个表。本章所讨论的内容包括单个条件和复合条件,计算列,SQL的BETWEEN、LIKE、IN操作符,使用SQL聚合函数,嵌套查询,数据分组,以及提取具有空值的列。

第5章:多表查询

第5章通过演示连接多表的查询,完成了对数据库查询的讨论。本章所讨论的内容包括SQL的IN和EXISTS操作符、嵌套的子查询、使用别名、表与自身的连接、SQL的集合操作,以及ALL和ANY操作符的用法。本章还讨论了各种不同的连接类型。

第6章:更新数据

第6章讨论了如何使用SQL的COMMIT、ROLLBACK、UPDATE、INSERT、DELETE指令对表数据进行更新,介绍了如何根据一个现有的表创建一个新表及如何更改一个表的结构。本章还讨论了事务的相关内容,包括它们的作用和实现。

第7章:数据库管理

第7章讨论了SQL的数据库管理功能,包括视图的用法,用户数据库权限的授予和撤回,创建、删除和使用索引,从系统目录使用和获取信息,以及使用完整性约束来控制对数据项的访问。

第8章:函数、存储过程、触发器

第8章讨论了一些对单独的行进行操作的重要SQL函数,介绍了如何使用PL/SQL和T-SQL把SQL指令嵌入另一种语言。本章的内容还包括使用嵌入式SQL指令插入新行、修改和删除现有的行、提取单行,以及使用游标提取多行。此外,还介绍了触发器。

附录A:SQL参考

附录A包含了本书各章所讨论的主要SQL子句和操作符的指令参考。学生可以使用附录A作为创建指令的快速参考。每条指令包含了一段简短的描述,并在一张表中说明了必要和可选的子句及操作符,此外还附有示例和结果。

附录B:SQL参考使用指南

附录B向学生提供了一个提出问题(例如“如何删除行?”)的机会,并确认这些问题在附录A中的对应位置,用于寻找答案。当学生知道他们需要完成的任务,但无法想起他们所需要的准确SQL指令时,附录B用处极大。

附录C:编写查询指令的10条戒律

附录C向学生提供了一整页关于在编写查询语句时什么可以做、什么不可以做的指南。附录C的10条戒律涵盖了本书所讨论的多种SQL规则。

面向学生的说明

关于在Oracle或SQL Server中运行脚本文件的细节,可以咨询自己的教师,也可以参考正文的第3章,以了解与创建及使用脚本有关的信息。关于下载MySQL和Oracle 19c软件的信息,可以访问Oracle网站。关于SQL Server Express的信息,可以访问Microsoft网站。

关于作者

作者简介

Mark Shellman(加斯顿学院)

Mark Shellman博士是一位资深教授,在位于美国北卡罗来纳州达拉斯市的加斯顿学院信息技术系工作。被学生们亲切地称为Mark博士的他善于组织学生开展自主学习,并且他本人也热爱自学。他在信息技术领域擅长的领域包括数据库和编程语言。Mark博士教授信息技术超过30年,是Microsoft Access数据库“新视点”(New Perspectives)系列的几本教材的作者之一。

Hassan Afyouni(e-conn公司)

Hassan Afyouni博士从事信息技术已经超过30年。他是数据库专家、Oracle技术专家、企业架构师、技术咨询师、教育家,担任加拿大、美国和黎巴嫩的几所学院和大学的教师。他同时是一位在数据库领域受人尊敬的前沿图书作者。

Philip J. Pratt(大峡谷州立大学)

Philip J. Pratt是美国大峡谷州立大学荣誉数学和计算机科学系的教授。他在这所大学已经工作了30余年。他的教学研究领域包括数据库管理、系统分析、复变分析和离散数学。他编著了超过70本教科书,并且是流行的系列图书Shelly Cashman中3个水平等级的Microsoft Office Access教程的作者之一。另外,他还是《SQL实践教程》前几个版本的作者之一。

Mary Z. Last

Mary Z. Last从1984年以来一直从事计算机信息系统的教学工作。她曾是美国得克萨斯州贝尔顿市的玛丽哈丁贝勒大学的副教授和学习与教学成效中心的主任,现已退休。Last女士积极参与了计算机教育家的口述历史项目(Oral History Project),鼓励年轻的女性投身数学和科学事业。她从1992年以来就是Shelly Cashman系列图书中贡献巨大的作者之一。她还是很多前沿数据库教科书的作者。

作者致谢

Mark Shellman的致谢

首先,我想利用本书表达对我的父母Mickey和Shelba的缅怀,在本书写作期间他们永远离开了我。他们生前对我的关爱和支持是无与伦比的。我还想感谢我的妻子Donna Sue、两个孩子Taylor和Kimberly,感谢你们在我参与这个项目期间对我的支持和耐心。最后,我对整个开发团队抱有同样的感谢之情,包括Amy Savino、Michele Stulga和Joy Dark,也包括我的合作伙伴Hassan Afyouni。衷心感谢你们在整个项目期间的支持和关注,你们对我的意义可能超乎你们的想象。你们是最棒的!

Hassan Afyouni的致谢

我想把本书献给我美丽而富有耐心的妻子Rouba,感谢她对我持久的关爱和支持。我还想把本书献给我亲爱的孩子们——Aya、Wissam、Sammy和Luna。

特别感谢我的合作伙伴Mark Shellman,以及Cengage开发小组的Amy Savino、Michele Stulga、Joy Dark。感谢本书的整个制作团队。另外,感谢Jennifer Bowes为我提供机会参与这个项目。

资源与支持

本书由异步社区出品,社区(www.epubit.com)为你提供相关资源和后续服务。

您还可以扫码二维码, 关注【异步社区】微信公众号,回复“e58468”直接获取,同时可以获得异步社区15天VIP会员卡,近千本电子书免费畅读。

配套资源

本书提供教师支持资源。请在异步社区本书页面中单击并按提示进行操作。

提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎你将发现的问题反馈给我们,帮助我们提升图书的质量。

当你发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可。本书的作者和编辑会对你提交的勘误信息进行审核,确认并接受后,你将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

扫码关注本书

扫描下方二维码,你将会在异步社区微信服务号中看到本书信息及相关的服务提示。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果你对本书有任何疑问或建议,请你发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果你有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/contribute即可)。

如果你所在的学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果你在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请你将怀疑有侵权行为的链接发邮件给我们。你的这一举动是对作者权益的保护,也是我们持续为你提供有价值内容的动力之源。

关于异步社区和异步图书

“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网www.epubit.com。

“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。

异步社区

微信服务号

第1章 KimTay和StayWell数据库简介

学习目标

了解KimTay Pet Supplies公司。这家公司的数据库用于管理宠物用品的相关业务。KimTay数据库贯穿本书中的许多案例。

了解StayWell Student Accommodation公司。这是一家总部位于西雅图的公司,它的数据库用于帮助业主管理大学生的住宿情况。StayWell数据库也贯穿了本书中的许多案例。

1.1 简介

在本章中,我们将检视KimTay Pet Supplies公司关于数据库的需求。本书的众多示例都将使用这家公司的数据库。然后,我们将检视StayWell Student Accommodation公司关于数据库的需求,各章最后的习题中会出现它们的身影。

1.2 什么是数据库

在本书中,我们将对这两家公司的数据库进行操作。数据库是一种包含不同分类的信息,并维护这些分类之间关系的结构。例如,KimTay Pet Supplies公司的数据库(即本书所称的KimTay数据库)包含了诸如销售代表、顾客、发票和物品等分类的信息。StayWell Student Accommodation公司的数据库(即本书所称的StayWell数据库)包含了与管理住宿的办公室、提供住宿的业主、居住者,以及为房屋所提供的服务(例如清洁和维护)有关的信息。

每个数据库还包含了分类之间的关系。例如,KimTay数据库包含了销售代表与他们所负责的顾客之间的关系信息,以及顾客与他们所开具的发票之间的关系信息。StayWell数据库包含了两个主要的公司办公室和它们所管理的房屋、业主、针对服务请求所提供的不同服务,以及与租住房屋的居住者之间的关系信息。

读者在学习本书时,将会学习与数据库有关的很多内容,并学习如何查看和更新它们所包含的信息;在阅读各章时,将会看到KimTay数据库的示例。在各章的最后,教师可以布置与KimTay数据库或StayWell数据库有关的习题。

1.3 KimTay数据库

KimTay Pet Supplies公司(一家宠物食品用品供应商,位于美国怀俄明州科迪市,下称KimTay)的管理层发现,公司最近业务的增长使得原先的手工系统无法再支撑顾客、发票和库存数据的维护需求。另外,KimTay还想通过互联网扩展业务。如果把数据存储在数据库中,管理层就能保证数据是最新的,而且比当前的手工系统更加精确。另外,管理者们可以方便、快速地解答与存储在数据库中的数据有关的问题,并且可以生成各种非常实用的报表。

管理层已经确定,KimTay必须在新的数据库中维护与销售代表、顾客和库存有关的如下信息。

每位销售代表的身份标识(下称ID)、名字、姓氏、完整地址[1]、手机号码、总佣金和佣金率。

每位顾客的ID、名字、姓氏、完整地址、电子邮件地址、当前余额、信用限额,以及为其服务的销售代表的ID。

仓库中每件物品的ID、描述、库存数量、分类、库存位置和单价。

KimTay还必须存储与发票有关的信息。图1-1显示了其中一张发票样本,它包括以下3个部分。

发票的抬头(位于顶部),包括公司名称和联系信息、发票号码和日期,以及顾客的ID、姓名[2]和完整地址,此外还包括销售代表的ID和姓名。

发票的票面包括一条或多条明细,有时称为发票项。每条明细包含了物品ID、物品描述、订购物品的数量,以及该物品的报价。每条明细还包含了总价,通常称为扩展项,它是订购数量与报价相乘的结果。

最后,发票的结算总额(位于底部)包含了整张发票的总价。

[1] 完整地址由多个部分组成,包含街道及房号(下称地址)、城市、州、邮政编码等。——编者注

[2] 姓名包含名字(first name)和姓氏(last name或surname)。——编者注

图1-1 发票样本

KimTay必须在数据库中存储与每位顾客的发票有关的下列数据项。

发票号码、发票的开票日期、开具发票的顾客ID;顾客信息,包含顾客的姓名、完整地址、为该顾客服务的销售代表的ID;销售代表信息,包含销售代表的姓名。

每条发票明细的发票号码、物品ID、订购数量和报价;物品描述,存储在物品信息中。订购数量与报价相乘的结果并没有被存储,因为数据库可以随时对它进行计算。

发票的结算总额并没有被存储在数据库中。因为数据库会在打印发票或者在屏幕上显示发票时计算出总额。

图1-2和图1-3显示了KimTay的数据样本。

图1-2 KimTay的样本数据

图1-3 另一种INVOICES表结构

在SALES_REP表中,我们可以看到ID分别为05、10、15、20的4位销售代表。销售代表05的姓名是Susan Garcia。她的完整地址是“42 Mountain Ln,Cody,WY”,邮政编码是82414,手机号码是307-824-1245。她的总佣金是12743.16美元,佣金率是0.04(即4%)。

在CUSTOMER表中,12位KimTay顾客的ID分别为125、182、227、294、314、375、435、492、543、616、721、795。ID为125的顾客的姓名是Joey Smith,地址、城市和州分别是17 Fourth St、Cody和WY,邮政编码为82414,电子邮件为jsmith17@example.com。他的当前余额是80.68美元;信用卡限额是500.00美元;REP_ID列是05,这表示为Joey Smith提供服务的是销售代表05(即Susan Garcia)。

在ITEM表中,我们可以看到15件物品,它们的ID分别为AD72、BC33、CA75、DT12、FM23、FS39、FS42、KH81、LD14、LP73、PF19、QB92、SP91、UF39、WB49。物品AD72是Dog Feeding Station(犬用喂食器),当前该物品有12件库存。犬用喂食器属于DOG(狗)分类,位于B区,价格是79.99美元。这张表中的其他分类还有BRD(鸟)、CAT(猫)、FSH(鱼)、HOR(马)。

在INVOICES表中,我们可以看到里面有8张发票,分别用发票号码14216、14219、14222、14224、14228、14231、14233、14237标识。发票14216是在2021年11月15日向ID为125的顾客(即Joey Smith)开具的。

初看上去,INVOICE_LINE表有些奇怪:为什么需要一张单独的表来表示发票明细呢?发票明细能包含在INVOICES表中吗?从理论上说是可以的。我们可以构建一张如图1-3所示的INVOICES表。注意这张表包含了一些与图1-2相同的发票信息,它们具有相同的日期和顾客ID。另外,如图1-3所示,表中的每一行都包含了一张特定发票的所有发票明细。例如,观察第2行,我们可以发现发票14219具有2条发票明细。其中一条明细是物品AD72,数量为2,报价为79.99美元;另一条发票明细是物品DT12,数量为4,报价为39.99美元。

使用两行来存储本可以用一行表示的信息似乎效率不高。但是,图1-3所示的布局存在一个问题:这张表的结构太复杂了。图1-2中的每个位置表示一项数据,但在图1-3中,有些位置包含了多个项,这样就难以追踪列之间的信息。例如,在发票14219的明细中,AD72对应于QUANTITY列的2(而不是4)并且对应于QUOTED_PRICE列的79.99美元(而不是39.99美元),这种对应关系难以记录,却至关重要。另外,更加复杂的表会产生如下一些实际的问题。

需要多少空间容纳这些数据项?

当一张发票的明细行数超出允许的上限时会怎样?

对于一件特定的物品,如何判断哪张发票包含了该物品的发票明细?

尽管这些问题都不是无法解决的,但它们还是使问题变得更加复杂,而图1-2所示的效果并不存在这些问题。在图1-2中,我们不需要担心某一行的某一列存在多个数据项,不管任何发票具有多少条明细,找到某件特定物品的发票明细都是非常容易的(只需要在ITEM_ID列中用给定的物品ID查找所有的发票明细)。一般而言,这种更为简单的结构是我们倾向采用的。这也是发票明细出现在一张独立的表中的原因。

为了测试读者对KimTay数据库的理解,请根据图1-2回答下列问题。

1.4 StayWell数据库

StayWell Student Accommodation公司(下称StayWell)为美国西雅图地区的业主提供关于学生住宿的寻租和管理业务。这家公司为这座城市的两个主要区域——Columbia City和Georgetown中包含1~5间卧室的房屋提供出租和管理业务。StayWell可以为本地及全美各地的业主提供这项服务,两个主要区域分别由公司的两个办公室——StayWell-Columbia City 和StayWell-Georgetown负责。

StayWell希望对业务进行扩展。当前的推广模式以向学生发放广告、通过大学的出版物宣传及在线推广为主,但是需要有意向的业主和承租人主动联系办公室,从而就与房屋出租有关的所有事宜进行交流。办公室在提供维护服务时需要收取费用,当前这些环节也是通过电子邮件或直接交流完成的。

StayWell认为提高效率并向基于电子商务的业务模型过渡的最好方式就是把所有与房屋、业主、承租人和服务有关的数据存储在数据库中。这意味着访问这些信息会变得更方便。StayWell希望这些数据库可以用于未来的项目中,例如移动App和在线预订系统等。

这些数据被分为几个表,如下所述。

图1-4所示的OFFICE表显示了办公室的编号、地址、区域、城市、州和邮政编码。

图1-4 StayWell办公室的样本数据

StayWell将办公室分为两个是为了更好地对房屋进行管理,主要是与业主就房屋的状态和维护进行交流。办公室还提供租金收取服务,即业主可以定期收到房租,而不需要担心租金拖欠的问题。办公室还对出租的房屋进行推广,帮助学生入住合适的房屋,提供看房服务并收取押金。最后,办公室还负责管理房屋的维护,并与入住者和业主就维修服务的事宜进行磋商。这些内容将在以后详述。

StayWell把与每所房屋的业主有关的信息存储在OWNER表中,如图1-5所示。每位业主由一个唯一的业主编号表示,它是由2个大写字母外加3位数字组成的。对于每位业主,这张表还包含了其名字、姓氏、地址、城市、州和邮政编码(注意业主来自全美各地)。尽管有些房室可能是由一对夫妇或一个家庭所共有的,但表中只存储了主要联系人的信息。

图1-5 StayWell房屋业主的样本数据

每个区域的每所房屋是由一个房屋ID标识的,如图1-6所示。每所房屋还包含了对它进行管理的办公室编号,以及房屋的地址、面积(以平方英尺为单位,1平方英尺约合0.093平方米)、卧室数、楼层数、每月租金和业主编号。房屋ID是标识每所房屋的不重复整数。

图1-6 StayWell房屋的样本数据

初看上去,在OWNER表中包含房屋ID是合理的,因为这样只增加了1列,但是如果仔细观察这些表,你就会注意到房屋的数量是要多于业主数量的,因为有些业主委托StayWell管理的房屋不止一所。如果OWNER表中包含了房屋ID,有些行的房屋ID就不止一个。这就需要在一行中用多个属性列来表示房屋(或者说每个单行需要包含多个数据项),从而造成交叉引用的问题。

StayWell对两个区域的房屋提供了维护服务,如图1-7所示。SERVICE_CATEGORY表包含了与这些服务有关的细节。CATEGORY_NUM列为每种服务提供了唯一的编号,CATEGORY_DESCRIPTION列描述了编号代表的具体服务。

图1-7 StayWell维护服务的样本数据

图1-8所示的SERVICE_REQUEST表显示了入住者向办公室提出的维修请求。每一行包含了服务ID(不重复)、房屋ID以及与图1-7相关的服务分类。例如,第1行显示了服务ID(即1)、房屋ID(即11)。观察PROPERTY表,我们可以看到房屋位于9531 Sherwood Rd。通过查询办公室编号,我们可以看到这所房屋是由StayWell-Georgetown管理的。这张表包含了与请求有关的细节以及当前状态,此外还包含了完成服务的预计工时(以小时为单位)、实际服务时间(以小时为单位)和下次服务日期(如果存在)。

图1-8 服务请求分类样本

图1-9所示的RESIDENTS表包含了与每所房屋的入住者有关的信息。RESIDENTS表中的列包括每位入住者的名字和姓氏,以及入住者ID。PROPERTY_ID表示他们所居住房屋的ID。

图1-9 StayWell入住者的样本数据

1.5 本章总结

KimTay的信息需求包括销售代表、顾客、物品、发票和发票明细。

StayWell的信息需求包括管理办公室、房屋细节、业主、入住者和服务请求。

关键术语

数据库database

1.6 案例练习

根据图1-2所示的KimTay数据库回答下列问题。本练习不需要操作计算机。

1.请列出信用额度大于500美元的所有顾客的名字和姓氏。

2.请列出于2021年11月18日为顾客ID 435开具的发票号码。

3.请列出HOR分类的每件物品的ID、物品描述和现存价值(现存价值是指当前数量与单价相乘的结果)。

4.请列出DOG分类的所有物品的ID和物品描述。

5.有多少位顾客的余额超出他们的信用额度?

6.数据库中最廉价物品的ID、描述和价格是什么?

7.对于每张发票,请列出发票号码、发票日期、顾客ID,以及顾客的名字和姓氏。

8.对于2021年11月16日开具的每张发票,请列出发票号码、顾客ID,以及顾客的名字和姓氏。

9.对于服务了至少一位信用额度为1000美元的顾客的销售代表,请列出这位销售代表的ID、名字和姓氏。

10.对于2021年11月15日开具的每张发票,请列出每件订购物品的发票号码、物品ID、物品描述及分类。

KimTay需要在发票出现问题时与顾客进行联系。为了帮助与顾客进行联系,KimTay应该在CUSTOMER表中包含哪些其他类型的数据?

使用图1-4~图1-9所示的StayWell数据库回答下列问题。本练习不需要操作计算机。

1.列出每位业主的编号、名字和姓氏。

2.列出城市为Seattle的每位业主的名字和姓氏。

3.列出每所面积小于1600平方英尺的房屋的ID。

4.列出数据库中拥有不止一所房屋的每位业主的名字、姓氏及所在城市。

5.列出拥有月租金小于1400美元的每位房屋业主的名字、姓氏及所在城市。

6.列出位于782 Queen Ln的房屋的所有入住者。

7.两层楼的房屋有多少所?

8.有多少位业主居住在华盛顿州(WA)之外?

9.对于预约或开放了服务请求的每所房屋,列出业主的名字和姓氏以及业主ID。

10.列出提出了维修服务请求的每所房屋的ID和建筑面积。

11.列出预计工时超过5小时的所有维修请求的房屋ID和办公室编号。

12.所有拥有3间卧室的房屋的平均租金是多少?

StayWell数据库中并没有包含服务收费项。我们可以在哪张表中包含服务收费信息?为什么?

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e58468”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

相关图书

SQL初学教程(第3版)
SQL初学教程(第3版)
SQL学习指南(第3版)
SQL学习指南(第3版)
SQL入门经典(第6版)
SQL入门经典(第6版)
SQL优化核心思想
SQL优化核心思想
SQL初学者指南(第2版)
SQL初学者指南(第2版)
Oracle PL/SQL必知必会
Oracle PL/SQL必知必会

相关文章

相关课程