• 500.00 KB
  • 2022-04-22 11:52:18 发布

数据库课后答案(第三版).doc

  • 65页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'《数据库原理及应用》(第三版)钱雪忠李京主编课后参考答案数据库原理及应用(第三版)钱雪忠等主编北京邮电大学出版社2010.05第1章绪论一、选择题1、A2、A3、A4、A5、B6、C7、C8、A9、A10、C1、()是位于用户与操作系统之间的一层数据管理软件。数据库在建立、使用和维护时由其统一管理、统一控制。A.DBMSB.DBC.DBSD.DBA2、文字、图形、图像、声音、学生的档案记录、货物的运输情况等,这些都是()A.DATAB.DBSC.DBD.其他3、目前()数据库系统已逐渐淘汰了网状数据库和层次数据库,成为当今最为流行的商用数据库系统。A.关系B.面向对象C.分布D.对象-关系4、()是刻画一个数据模型性质最重要的方面。因此在数据库系统中,人们通常按它的类型来命名数据模型。A.数据结构B.数据操纵C.完整性约束D.数据联系5、()属于信息世界的模型,实际上是现实世界到机器世界的一个中间层次。A.数据模型B.概念模型C.非关系模型D.关系模型6、当数据库的()改变了,由数据库管理员对()映象作相应改变,可以使()保持不变,从而保证了数据的物理独立性。(1)模式(2)存储结构(3)外模式/模式(4)用户模式(5)模式/内模式A.(1)和(3)和(4)B.(1)和(5)和(3)C.(2)和(5)和(1)D.(1)和(2)和(4)7、数据库的三级体系结构即子模式、模式与内模式是对()的三个抽象级别。A.信息世界B.数据库系统C.数据D.数据库管理系统8、英文缩写DBA代表()A.数据库管理员B.数据库管理系统C.数据定义语言D.数据操纵语言9、模式和内模式()。A.只能各有一个B.最多只能有一个C.至少两个D.可以有多个10、在数据库中存储的是()。 A.数据B.信息C.数据和数据之间的联系D.数据模型的定义二、填空题1、数据库就是长期储存在计算机内_有组织的__、_可共享__的数据集合。2、数据管理技术已经历了人工管理阶段、_文件系统阶段_和_数据库系统阶段_三个发展阶段。3、数据模型通常都是由_数据结构_、_数据操作_和_数据完整性约束_三个要素组成。4、数据库系统的主要特点:_数据整体结构化_、数据冗余度小、具有较高的数据程序独立性、具有统一的数据控制功能等。5、用二维表结构表示实体以及实体间联系的数据模型称为__关系__数据模型。6、在数据库的三级模式体系结构中,外模式与模式之间的映象,实现了数据库的_______数据逻辑__独立性。7、数据库系统是以_数据库或数据库中的数据___为中心的系统。8、E-R图表示的概念模型比_DBMS支持的数据模型_更一般、更抽象、更接近现实世界。9、外模式,亦称为子模式或用户模式,是_局部用户__能够看到和使用的局部数据的逻辑结构和特征的描述。10、数据库系统的软件主要包括支持_DBMS_运行的操作系统以及__DBMS_本身。三、简答题1、简述计算机数据管理技术发展的三个阶段。解:数据管理技术已经历了人工管理、文件系统及数据库系统三个发展阶段。这三个阶段的特点及其比较如下表1.1所示。表1.1数据管理三个阶段的比较比较项目人工管理阶段文件系统阶段数据库系统阶段应用背景科学计算科学计算、管理大规模管理背硬件背景无直接存取存储设备磁盘、磁鼓大容量磁盘景软件背景没有操作系统有文件系统有数据库管理系统处理方式批处理联机实时处理、批处理联机实时处理、分布处理、批处理数据的管理者用户(程序员)文件系统数据库管理系统数据面向的对象某一应用程序某一应用现实世界特数据的共享程度无共享,冗余度极大共享性差,冗余度大共享性高,冗余度小数据的独立性不独立,完全依赖于程序独立性差具有高度的物理独立性和一定的逻辑独立性点数据的结构化无结构记录内有结构、整体无结构整体结构化,用数据模型描述数据控制能力应用程序自己控制应用程序自己控制由数据库管理系统提供数据安全性、完整性、并发控制和恢复能力(1)人工管理阶段:20世纪50年代中期以前,计算机主要用于科学计算。硬件设施方面:外存只有纸带、卡片、磁带,没有磁盘等直接存取设备;软件方面:没有操作系统和管理数据的软件;数据处理方式是批处理。人工管理数据具有以下几个特点:1)数据不保存;2)应用程序管理数据;3)数据不共享;4)数据不具有独立性。 (2)文件系统阶段:20世纪50年代后期到60年代中期,这时计算机已大量用于数据的管理。硬件方面:有了磁盘、磁鼓等直接存取存储设备;软件方面:操作系统中已经有了专门的管理软件,一般称为文件系统;处理方式有批处理、联机实时处理。特点如下:1)数据长期保存;2)文件系统管理数据;3)数据共享性差,冗余度大;4)数据独立性差;(3)数据库系统阶段:20世纪60年代后期以来,计算机用于管理的规模更为庞大,数据量急剧增长,硬件已有大容量磁盘,硬件价格下降;软件则价格上升,使得编制、维护软件及应用程序成本相对增加;处理方式上,联机实时处理要求更多,分布处理也在考虑之中。介于这种情况,文件系统的数据管理满足不了应用的需求,为解决共享数据的需求,随之从文件系统中分离出了专门软件系统——数据库管理系统,用来统一管理数据。数据库系统阶段具有如下优于文件系统的特点:1)数据结构化;2)数据的共享性高,冗余度低,易扩充;3)数据独立性高;4)数据由DBMS统一管理和控制。2、常用的三种数据模型的数据结构各有什么特点?解:常用的三种数据模型是层次模型、网状模型和关系模型。它们的数据结构及特点分别介绍如下:1)层次模型的数据结构——树型结构在数据库中,对满足以下两个条件的基本层次联系的集合称为层次模型。(1)有且仅有一个节点无双亲,这个节点称为“根节点”。(2)其他节点有且仅有一个双亲。所谓基本层次联系是指两个记录类型以及它们之间的一对多的联系。在层次模型中,每个结点表示一个记录类型,记录之间的联系用结点之间的连线表示,这种联系是父子之间的一对多的联系。这就使得数据库系统只能处理一对多的实体联系。每个记录类型可包含若干个字段,这里,记录类型描述的是实体,字段描述的是实体的属性。各个记录类型及其字段都必须命名,并且名称要求唯一。每个记录类型可以定义一个排序字段,也称为码字段,如果定义该排序字段的值是唯一的,则它能唯一标识一个记录值。若用图来表示,层次模型是一棵倒立的树。节点层次(Level)从根开始定义,根为第一层,根的子女称为第二层,根称为其子女的双亲,同一双亲的子女称为兄弟。2)网状模型的数据结构——网状结构图在数据库中,把满足以下两个条件的基本层次联系集合称为网状模型:(1)允许一个以上的结点无双亲;(2)一个结点可以有多于一个的双亲。网状模型是一种比层次模型更具有普遍性的结构,它去掉了层次模型的两个限制,允许多个结点没有双亲结点,允许结点有多个双亲结点,此外它还允许两个结点之间有多种联系。因此网状模型可以更直接地去描述现实世界。而层次模型实际上是网状模型的一个特例。与层次模型一样,网状模型中的每个结点表示一个记录类型,每个记录类型可包含若干个字段,结点间的连线表示记录类型之间的一对多的父子联系。从定义可看出,层次模型中子女结点与双亲结点的联系是唯一的,而在网状模型中这种联系可以不唯一的。3)关系模型——二维表关系模型与层次模型和网状模型不同,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。每一行称为一个元组,每一列称为一个属性(或字段)。下面是关系模型中的涉及到的相关的术语:关系:一个关系对应一张二维表,如一张教师登记表。元组:二维表中的一行称为一个元组。属性:二维表中的一列称为一个属性,对应每一个属性的名字称为属性名。主码:如果二维表中的某个属性或是属性组可以唯一确定一个元组,则称为主码,也称为关系键。域:属性的取值范围称为域,如人的年龄一般在1-120岁之间,大学生的年龄属性的域是14-38,性别的域是男和女等。分量:元组中的一个属性值。例如,教师号对应的值001、002、003都是分量。 关系模式:表现为关系名和属性的集合,是对关系的具体描述。一般表示为:关系名(属性1,属性2,…,属性N)。如教师关系模式为:教师(教师号,姓名,年龄,职称)在关系模型中,实体以及实体间的联系都是用关系来表示。关系模型要求关系必须是规范化的,即要求关系必须满足一定规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有子表或子列。3、试述数据库系统的特点。解:数据库系统阶段具有如下优于文件系统的主要特点:1)数据结构化;2)数据的共享性高,冗余度低,易扩充;3)数据独立性高;4)数据由DBMS统一管理和控制。1)数据结构化:数据库系统实现整体数据的结构化,是数据库的主要特征之一,也是数据库系统与文件系统的本质区别。在数据库系统中,数据不再针对某一应用,而是面向全组织,是整体结构化的。不仅数据是结构化的,而且存取数据的方式也是很灵活的,可以存取数据库中的某一个数据项(或字段)、一组数据项、一个记录或是一组记录。2)数据的共享性高,冗余度低,易扩充:数据库系统从整体角度看待和描述数据,数据不再面向某个应用而是面向整个系统,因此数据可以被多个用户、多个应用共享使用。数据共享可以大大的减少数据冗余,节约存储空间。数据共享还能够避免数据之间的不相容性与不一致性。由于数据面向整个系统,是有结构的数据,不仅可以被多个应用共享使用,而且容易增加新的应用,这就使得数据系统弹性大,易于扩充,可以适应各种用户的要求。可以取整体数据的各种子集用于不同的应用系统,当应用需求改变或增加时,只要重新选取不同的子集或加上一部分数据便可以满足新的需求。3)数据独立性高:数据独立性包括了数据的物理独立性和数据的逻辑独立性两方面。物理独立性是指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。也就是说,数据在磁盘上的数据库中怎样存储是由DBMS管理的,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变时,应用程序不用改变。逻辑独立性是指用户的应用程序与数据库的整体逻辑结构是相互独立的,也就是说,数据的整体逻辑结构改变了,用户程序也可以不需修改的。数据独立性是由DBMS的三级模式结构与二级映象功能来保证的。4)数据由DBMS统一管理和控制:DBMS为保证共享数据的安全、正确、可靠等提供以下几方面的数据控制功能:(1)数据的安全性控制;(2)数据的完整性约束;(3)并发控制;(4)数据库恢复。4、试述数据模型的概念、数据模型的作用和数据模型的三要素。解:1)数据模型的概念:数据模型是模型中的一种,是现实世界数据特征的抽象,它描述了系统的三个方面:静态特性、动态特性和完整性约束条件。2)数据模型的作用:数据模型应满足三方面的要求:一是能比较真实地模拟现实世界;二是容易为人所理解;三是便于在计算机上实现。不同的数据模型实际上是提供给我们模型化数据和信息的不同工具。根据模型应用的不同目的,可以将这些模型粗分为两类,他们分属于两个不同的层次。第一类模型是概念模型,也称信息模型,它是按用户的观点来对数据和信息建模的,主要用于数据库设计。另一类模型是数据模型,主要包括层次模型、网状模型、关系模型、面向对象模型等,它是按计算机系统对数据建模,主要用于在DBMS中对数据的存储、操纵、控制等的实现。为了把现实世界中的具体事物抽象、组织为某一DBMS支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换(或数据化)为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个DBMS支持的数据模型,而是概念级的模型;然后再把概念模型转换为计算机上某一DBMS支持的数据模型。数据模型是数据库系统的核心和基础,各种机器上实现的DBMS软件都是基于某种数据模型的。可以说没有数据模型就没有数据库及其系统,其重要性不言而喻。 3)数据模型的三要素:数据模型一般由数据结构、数据操作和数据完整性约束三部分组成(俗称三要素),是严格定义的一组概念的集合。(1)数据结构:数据结构用于描述系统的静态特性,是所研究的对象类型的集合。数据模型按其数据结构分为层次模型、网状模型、关系模型和面向对象模型。其所研究的对象是数据库的组成部分,它们包括两类,一类是与数据类型、内容、性质有关的对象,例如网状模型中的数据项、记录,关系模型中的域、属性、实体关系等;一类是与数据之间联系有关的对象,例如网状模型中的系型、关系模型中反映联系的关系等。数据模型的三要素示意图(2)数据操作:数据操作用于描述系统的动态特性,是指对数据库中各种对象及对象的实例允许执行的操作的集合,包括对象的创建、修改和删除,对对象实例的检索和更新(例如插入、删除和修改)两大类操作及其它有关的操作等。数据模型必须定义这些操作的确切含义、操作符号、操作规则(如优先级)以及实现操作的语言等。(3)数据完整性约束:数据的完整性约束是一组完整性约束规则的集合。完整性约束规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。数据模型的三要素紧密依赖相互作用形成一个整体(如图示意),如此才能全面正确地抽象、描述来反映现实世界数据的特征。5、试述概念模型的作用。解:数据模型应满足三方面的要求:一是能比较真实地模拟现实世界;二是容易为人所理解;三是便于在计算机上实现。概念模型,也称信息模型,它是按用户的观点来对数据和信息建模的,主要用于数据库设计。为了把现实世界中的具体事物抽象、组织为某一DBMS支持的数据模型,人们常常首先将现实世界抽象为信息世界,然后将信息世界转换(或数据化)为机器世界。也就是说,首先把现实世界中的客观对象抽象为某一种信息结构,这种信息结构并不依赖于具体的计算机系统,不是某一个DBMS支持的数据模型,而是概念级的模型。概念模型提供给我们从现实世界到信息世界模型化数据和信息手段与工具。若没有概念模型现实世界的问题很难转化到机器世界的数据库系统中来处理。6、定义并理解概念模型中的以下术语:实体、实体型、实体集、属性、码、实体联系图(E-R图)、三种联系类型解:(1)实体:实体是指客观存在并可以相互区别的事物。实体可以是具体的人、事、物。例如,一个学生,一位老师,一门课程,一个部门;也可以是抽象的概念或联系,把它看作为实体。例如,学生的选课,老师的授课等等都是实体。(2)实体型:具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合组成的形式,称为实体型。例如,教师(教师号,姓名,职称,年龄)就是一个教师实体型。(3)实体集:实体集是指同型实体的集合。例如,全体教师就是一个实体集。即教师实体集={"张三","李四",……}(4)属性:属性是指实体所具有的某一特性。例如教师实体可以由教师号、姓名、年龄、职称等属性组成。(5)码:码是指唯一标识实体的属性集。例如教师号在教师实体中就是码。(6)联系:联系是指实体型与实体型之间、实体集内实体与实体之间以及组成实体的各属性间的关系。两个实体型之间的联系有以下三种: 1)一对一联系:如果实体集A中的每一个实体,至多有一个实体集B的实体与之对应。反之,实体集B中的每一个实体,也至多有一个实体集A的实体与之对应,则称实体集A与实体集B具有一对一联系,记作1:1。例如,在学校里,一个系只有一个系主任,而一个系主任只在某一个系中任职,则系型与系主任型之间(或说系与系主任之间)具有一对一联系。2)一对多联系:如果实体集A中的每一个实体,实体集B中的N个实体与之相对应,反之,如果实体集B中的每一个实体,实体集A中至多只有一个实体与之相对应,则称实体集A与实体集B具有一对多联系,记作1:N。例如,一个系中有若干名教师,而每个教师只在一个系中任教,则系与教师之间具有一对多联系。3)多对多联系:如果实体集A中的每一个实体,实体集B中有n个实体与之相对应,反之,如果实体集B中的每一个实体,实体集A也有m(m≥0)个实体与之相对应,则称实体集A与实体集B具有多对多的联系,记作m:n。例如,一门课程同时有若干个教师讲授,而一个教师可以同时讲授多门课程,则课程与教师之间具有多对多联系。单个或多个实体型之间也有类似于两个实体型之间的三种联系类型。具体略。(7)实体联系图(E-R图)实体联系图(E-R图)又称实体-联系方法。该方法用直观图形来描述现实世界抽象出的信息。E-R图提供了表示实体型、属性和联系的方法。E-R图是体现实体型、属性和联系的之间关系的图形表示形式。具体表示方法为:实体型:用矩形表示,矩形框内写明实体名。属性:用椭圆表示,椭圆形内写明属性名。并用无向边将其与相应的实体连接起来。联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)。举例说明略。7、学校有若干个系,每个系有若干班级和教研室,每个教研室有若干教师,每个教师只教一门课,每门课可由多个教师教;每个班有若干学生,每个学生选修若干课程,每门课程可由若干学生选修。请用E-R图画出该学校的概念模型,注明联系类型。解:8、每种工厂生产的产品由不同的零件组成,有的零件可用于不同的产品。这些零件由不同的原材料制成,不同的零件所用的材料可以相同。一个仓库存放多种产品,一种产品存放在一个仓库中。零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓库中(不跨仓库存放)。请用E-R图画出此关于产品,零件,材料,仓库的概念模型,注明联系类型。解:9、分别给出一个层次、网状和关系模型的实例。解:1)层次模型的实例图1.17给出了一个系的层次模型。图1.17一个层次模型的示例图1.18是图1.17的具体化,成为一个教师-学生层次数据库。该层次数据库有四个记录型。记录型系是根结点,由系编号、系名、办公地三个字段组成。它有两个子女结点教研室和学生。记录型教研室是系的子女结点,同时又是教师的双亲结点,它是教研室编号、教研室名两个字段组成。记录类型学生由学号、姓名、年龄三个字段组成。记录教师由教师号、姓名、研究方向三个字段组成。学生与教师是叶结点,它们没有子女结点。由系到教研室、教研室到教师、系到学生均是一对多的联系。图1.18教师-学生数据库模型图1.19是图1.18数据库模型的一个值。 图1.19教师-学生数据库的一个值2)网状模型的实例下面以教师授课为例,教师授课数据库可包含三个记录:教师、课程和授课。每个教师可以讲授多门课程,显然对教师记录中的一个值,授课记录中可以有多个值与之联系,而授课记录中的一个值,只能与教师记录中的一个值联系。教师与授课之间联系是一对多的联系联系名为T-TC。同样,课程与授课之间的联系也是一对多的联系,联系名为C-TC。图1.24为教师授课数据库的网状数据库模式。图1.24教师、课程、授课的网状数据库模式教师授课数据库的实例如图1.25所示。图1.25教师/授课/课程的网状数据库实例3)关系模型的实例学号SNO课程号CNO成绩SCORE200401C185200401C292200401C384200402C294200403C383SC选课表10、试述层次、网状和关系数据库的优缺点。解:1)层次模型的优缺点层次模型的优点:(1)层次模型本身比较简单。(2)对于实体间联系是固定的,且预先定义好的应用系统,采用层次模型来实现,其性能较优。(3)层次模型提供了良好的完整性支持。层次模型的缺点主要有:(1)现实世界中很多联系是非层次性的,如多对多联系,一个结点具有多个双亲等,层次模型表示这类联系的方法很笨拙,只能通过引入冗余数据或创建非自然的数据组织来解决。(2)对插入和删除操作的限制太多,影响太大。(3)查询子女结点必须通过双亲结点,缺乏快速定位机制。(4)由于结构严密,层次命令趋于程序化。2)网状模型的优缺点网状模型的优点主要有:(1)能够更为直接地描述现实世界,如一个结点可以有多个双亲。(2)具有良好的性能,存取效率较高。网状模型的缺点主要有:(1)结构比较复杂,而且随着应用环境的扩大,数据库的结构就变得越来越复杂,不利于最终用户掌握。(2)其DDL、DML语言复杂,用户不容易使用。由于记录之间联系是通过存取路径实现的,应用程序在访问数据时必须选择适当的存取路径,因此,用户必须了解系统结构的细节,加重了编写程序的负担。3)关系模型的优缺点关系模型具有下列优点:(1)关系模型与非关系模型不同,它有较强的数学理论基础。 (2)数据结构简单、清晰,用户易懂易用,不仅用关系描述实体,而且用关系描述实体间的联系。(3)关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发和建立的工作。关系模型具有查询效率不如非关系模型效率高的缺点。因此,为了提高性能,必须对用户的查询进行优化,增加了开发数据库管理系统的负担。11、定义并理解关系模型中的以下术语:关系、元组、属性、主码、域、分量、关系模式解:关系:一个关系对应一张二维表,如一张教师登记表称为教师关系。元组:二维表中的一行称为一个元组。属性:二维表中的一列称为一个属性,对应每一个属性的名字称为属性名。主码:如果二维表中的某个属性或是属性组可以唯一确定一个元组,则称为主码,也称为关系键,如教师号,可以唯一确定一个教师,也就成为教师关系的主码。域:属性的取值范围称为域,如人的年龄一般在1-120岁之间,大学生的年龄属性的域是14-38,性别的域是男和女等等。分量:元组中的一个属性值。例如,教师号对应的值001、002、003都是分量。关系模式:表现为关系名和属性的集合,是对关系的具体描述。一般表示为:关系名(属性1,属性2,…,属性N)例如教师关系可描述为:教师(教师号,姓名,年龄,职称)12、数据库系统的三级模式结构是什么?为什么要采用这样的结构?解:1)从数据库管理系统内部系统结构看,数据库系统通常采用三级模式结构。数据库系统的三级模式结构是指外模式、模式和内模式。如图1.28所示。图1.28数据库系统的三级模式结构(1)外模式(ExternalSchema):外模式也称子模式(SubSchema)或用户模式,是三级模式的最外层,它是数据库用户能够看到和使用的局部数据的逻辑结构和特征的描述。数据库管理系统(DBMS)提供子模式描述语言(子模式DDL)来定义子模式。(2)模式(Schema):模式又称概念模式,也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,是数据视图的全部。它是数据库系统模式结构的中间层,既不涉及数据的物理存储细节和硬件环境,也与具体的应用程序,与所使用的应用开发工具及高级程序设计语言等无关。概念模式实际上是数据库数据在逻辑级上的视图。一个数据库只有一个模式。DBMS提供模式描述语言(模式DDL)来定义模式。(3)内模式(InternalSchema):内模式也称为存储模式,一个数据库只有一个内模式。它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。DBMS提供内模式描述语言(内模式DDL)来严格地定义内模式。为了能够在内部实现这三个抽象层次的联系和转换,数据库管理系统在这三级模式之间提供了两层映象:外模式/模式映象,模式/内模式映象。2)数据库管理系统内部采用这样的结构是因为:这种结构能较好地保证数据库系统的数据具有较高的逻辑独立性和物理独立性。数据库的二级映象保证了数据库外模式的稳定性,从而根本上保证了应用程序的稳定性,使得数据库系统具有较高的数据与程序的独立性。数据库的三级模式与二级映象使得数据的定义和描述可以从应用程序中分离出去。又由于数据的存取由DBMS管理,用户不必考虑存取路径等细节,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。13、数据独立性包括哪两个方面,含义分别是什么? 解:数据独立性分为数据逻辑独立性与数据物理独立性两个方面。1)数据逻辑独立性当模式改变时,由数据库管理员对各个外模式/模式映象作相应改变,可以使外模式保持不变。应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称为数据逻辑独立性。2)数据物理独立性当数据库的存储结构等内模式改变了,由数据库管理员对模式/内模式映象作相应改变,可以使模式保持不变,从而应用程序也不必改变。保证了数据与程序的物理独立性,简称为数据物理独立性。14、数据库管理系统有哪些主要功能?解:数据库管理系统是数据库系统的核心组成部分,是对数据进行管理的大型系统软件,用户在数据库系统中的一些操作,例如:数据定义、数据操纵、数据查询和数据控制,这些操作都是由数据库管理系统来实现的。数据库管理系统主要包括以下几个功能:(1)数据定义:DBMS提供数据定义语言(DataDefinitionLanguage,简称DDL),用户通过它可以方便地对数据库中的数据对象(包括表、视图、索引、存储过程等)进行定义。定义相关的数据库系统的结构和有关的约束条件。(2)数据操纵:DBMS提供数据操纵语言(DataManipulationLanguage,简称DML),通过DML操纵数据实现对数据库的一些基本操作,如查询,插入,删除和修改等等。其中,国际标准数据库操作语言——SQL语言,就是DML的一种。(3)数据库的运行管理:这一功能是数据库管理系统的核心所在。DBMS通过对数据库在建立、运用和维护时提供统一管理和控制,以保证数据安全、正确、有效的正常运行。DBMS主要通过数据的安全性控制、完整性控制、多用户应用环境的并发性控制和数据库数据的系统备份与恢复四个方面来实现对数据库的统一控制功能的。(4)数据库的建立和维护功能:数据库的建立和维护功能包括数据库初始数据的输入、转换功能、数据库的转储、恢复功能、重组织功能和性能监视、分析功能等。15、数据库系统通常由哪几部分组成?解:数据库系统是指计算机系统中引入数据库后的整个人机系统。为此,数据库系统应由计算机硬件、数据库、计算机软件及各类人员组成。1)硬件平台:要有足够大的内存支持OS与DBMS的运行;要有足够大而快速的磁盘等直接存储设备存放数据库,有足够的磁盘空间做数据备份。要求系统有较高的通道能力,以支持数据较高的传送率。2)数据库:数据库是存放数据的地方,是存储在计算机内有组织的大量可共享的数据集合。数据库这里主要是指物理存储设备中有效组织的数据集合。3)软件:数据库系统的软件主要包括:(1)支持DBMS运行的操作系统;(2)DBMS:DBMS可以通过操作系统对数据库的数据进行存取、管理和维护;(3)具有与数据库接口的高级语言及其编译系统;(4)以DBMS为核心的应用开发工具,为特定应用环境开发的数据库应用系统。4)用户:用户主要有以下几种:用于进行管理和维护数据库系统的人员——数据库管理员;用于数据库应用系统分析设计的人员——系统分析员和数据库设计人员;用于具体开发数据库系统的人员——数据库应用程序员;用于使用数据库系统的人员——最终用户。这里的最终用户,又可以分为三类:偶然用户、简单用户、复杂用户等。 16、设学生含有学号、姓名、性别、系别、选修课程、平均成绩(是经计算得到的)等信息,若把选修课程、平均成绩也作为学生的属性,请用E-R图表示学生信息。17、请用扩展E-R图来表示客户的相关信息。客户含有姓名(由姓和名两部分组成)、客户号、电话(客户一般有多个电话)、出生日期、年龄、地址(含省、市、街道名、街道号、楼道号、房号与邮政编码)。18、请用扩展E-R图中的实体角色的表示方法来分别表示:学生与学生间的班长关系与课程之间的先修关系等。19、请用扩展E-R图的表示方法来表示公司生产特有产品的关系,其中公司含有公司名、地址、联系电话等信息,产品含有产品名与价格等信息。20、请用扩展E-R图的表示方法来表示如下信息:人有姓名、所在城市等信息;人可分成客户(含购买金额)和雇员(有雇员号、薪水信息等)两类;雇员可再分为办公人员(有累计办公天数信息)、车间职员(有累计产生产品数量信息)、销售人员(有累计销售数量与销售金额信息)等三类。21、请用扩展E-R图的聚集表示方法来表示如下信息:制造商有名称与地址信息、批发商有名称与地址信息、产品有产品名与价格信息。制造商与批发商联营产品的销售有个具体的时间,共同联营的产品才共同负责发送。22、设要为医院的核心主题建立概念模型E-R图,包括病人、医生及病人的病历。其中医生有姓名与专长信息;病人有姓名、身份证号、保险号等信息;病历有门诊日期、诊断病症、治疗方法及治疗结果等信息。病人找医生治疗有个具体的时间。保险号医生专长姓名病人身份证号m治疗方法诊治n姓名治疗时间门诊日期治疗结果 第2章关系数据库一、单项选择题1、A2、C3、B4、C5、A6、B7、B8、B9、C10、C1、设关系R和S的属性个数分别为r和s,则(R×S)操作结果的属性个数为()A.r+sB.r-sC.r×sD.max(r,s)2、在基本的关系中,下列说法正确的是()A.行列顺序有关B.属性名允许重名C.任意两个元组不允许重复D.列是非同质的3、有关系R和S,R∩S的运算等价于()A.S-(R-S)B.R-(R-S)C.(R-S)∪SD.R∪(R-S)4、设关系R(A,B,C)和S(A,D),与自然连接R∞S等价的关系代数表达式是()1=1A.σR.A=S.A(R×S)B.RSC.∏B,C,S.A,D(σR.A=S.A(R×S))D.∏R.A,B,C(R×S)5、五种基本关系代数运算是()A.∪、-、×、π和σB.∪、-、、∏和σC.∪、∩、×、π和σD.∪、∩、、π和σ6、关系代数中的θ联接操作由()操作组合而成。A.σ和πB.σ和×C.π、σ和×D.π和×7、在关系数据模型中,把()称为关系模式。A.记录B.记录类型C.元组D.元组集8、对一个关系做投影操作后,新关系的基数个数()原来关系的基数个数。A.小于B.小于或等于C.等于D.大于9、有关系:R(A,B,C)主键=A,S(D,A)主键=D,外键=A,参照R的属性A,系R和S的元组如下:指出关系S中违反关系完整性规则的元组是()。R:ABCS:DA123122132null3341A.(1,2)B.(2,null)C.(3,3)D.(4,1)10、关系运算中花费时间可能最长的运算是()。A.投影B.选择C.广义笛卡儿积D.并二、填空1、关系中主码的取值必须惟一且非空,这条规则是_实体_完整性规则。 2、关系代数中专门的关系运算包括:选择、投影、连接和除法,主要实现_查询_类操作。3、关系数据库的关系演算语言是以_谓词演算_为基础的DML语言。4、关系数据库中,关系称为_表__,元组亦称为__行__,属性亦称为_列__。5、数据库描述语言的作用是_定义数据库_。6、一个关系模式可以形式化地表示为_R(U,D,dom,F)_。7、关系数据库操作的特点是__一次一集合_式操作。8.数据库的所有关系模式的集合构成_关系数据库模型_,所有的关系集合构成_关系数据库_。9、在关系数据模型中,两个关系R1与R2之间存在1:m的联系,可以通过在一个关系R2中的_外键或外码或外部关键字_在相关联的另一个关系R1中检索相对应的记录。10、将两个关系中满足一定条件的元组连接到一起构成新表的操作称为_θ-连接_操作。三、简单、计算或查询1、试述关系模型的三要素内容。解:1)关系模型的数据结构——关系关系模型的数据结构:非常单一,在用户看来,关系模型中数据的逻辑结构是一张二维表。但关系模型的这种简单的数据结构能够表达丰富的语义,描述出现实世界的实体以及实体间的各种联系。2)关系模型的关系操作:关系模型给出了关系操作的能力,它利用基于数学的方法来表达关系操作,关系模型给出的关系操作往往不针对具体的RDBMS语言来表述。关系模型中常用的关系操作包括:选择(select)、投影(project)、连接(join)、除(divide)、并(union)、交(intersection)、差(difference)等查询(query)操作和添加(insert)、删除(delete)、修改(update)等更新操作两大部分。查询的表达能力是其中最主要的部分。早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。关系代数是用对关系的运算(即元组的集合运行)来表达查询要求的方式。关系演算是用谓词来表达查询要求的方式。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。关系代数、元组关系演算和域关系演算三种语言在表达功能上是等价的。另外还有一种介于关系代数和关系演算之间的语言SQL(StructuredQueryLanguage)。SQL不但具有丰富的查询功能,而且具有数据定义、数据操纵和数据控制功能,是集查询、DDL、DML、DCL于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的国际标准语言。因此,关系数据语言可以分成三类:(1)关系代数:用对关系的集合运算表达查询要求,例如ISBL。(2)关系演算:用谓词表达查询要求,可分为两类:①元组关系演算:谓词变元的基本对象是元组变量,例如APLHA、QUEL;②域关系演算:谓词变元的基本对象是域变量,例如QBE。(3)关系数据语言,例如SQL。这些关系数据语言的共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入到高级语言中使用。3)关系模型的三类完整性约束:关系模型提供了丰富的完整性控制机制,允许定义三类完整性:实体完整性、参照完整性和用户自定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该由关系系统自动支持。用户自定义的完整性是应用领域特殊要求而需要遵循的约束条件,体现了具体领域中的语义约束。2、试述关系数据库语言的特点和分类。解:见上题“2)关系模型的关系操作”。3、定义并理解下列概念,说明它们间的联系与区别:(1)域、笛卡尔积、关系、元组、属性(2)主码、候选码、外码 (3)关系模式、关系、关系数据库解:(1)域、笛卡尔积、关系、元组、属性1)域:域是一组具有相同数据类型的值的集合。2)笛卡尔积:给定一组域D、D、…、D(这些域中可以包含相同的元素,即可以完全不同,也可以部分或全部相同),D、D、…、D的笛卡尔积为D×D×…×D={(d,d,…,d)|d∈D,i=1,2,…,n}3)关系(Relation):D×D×…×D的任一子集叫作在域D,D,…D上的关系,用R(D,D,…D)表示。关系是笛卡尔积的子集,反过来说,看到某关系,也要看到该关系背后存在的其所属于的笛卡尔积,关系内容无论如何变都变化不出其所属于的笛卡尔积的,这是笛卡尔积概念的意义所在。4)表的每行对应一个元组。5)表的每列起一个唯一的名字,称为属性。联系:关系是笛卡尔积的子集,所以关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个唯一的名字,称为属性。(2)主码、候选码、外码1)候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(Candidatekey),关系至少含有一个候选码。2)主码:一个关系至少有一个候选码,则选定其中一个为主控使用者,称为主码(Primarykey)。3)外码:设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码(Foreignkey)。联系:关系的候选码中选定一个称为主码,主码即是候选码;而外码是与另一关系的主码相对应的属性组。(3)关系模式、关系、关系数据库关系数据库中,关系模式是型,关系是值。关系模式是对关系的描述,一个关系模式应当是一个5元组。1)关系模式:关系的描述称为关系模式(RelationSchema)。一个关系模式应当是一个五元组。它可以形式化地表示为:R(U,D,dom,F)。其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域的集合,dom为属性向域的映象集合,F为属性间数据的依赖关系集合。2)关系:关系实际上就是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,关系是它的值。3)关系数据库:在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,所有实体及实体之间的联系的关系的集合构成一个关系数据库。联系:关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。但在实际使用中,常常把关系模式和关系统称为关系,读者可以从上下文中加以区别。关系的集合构成一个关系数据库,关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述,是关系模式的集合。关系数据库的值也称为关系数据库,是关系的集合。关系数据库模式与关系数据库通常统称为关系数据库。4、关系数据库的完整性规则有哪些?试举例说明。解:1)关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。2)(1)实体完整性:若属性组(或属性)K是基本关系R的主码(或称主关键字),则所有元组K的取值唯一,并且K中属性不能全部或部分取空值。 例如:在课程关系T中,若“课程名”属性为主码,则“课程名”属性不能取空值,并且课程名要唯一。(2)参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S可能是相同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。例如,对于“学生(学号,姓名,性别,年龄,系别号)、系别(系别号,系名)”两关系,“系别号”为学生关系的外码。它要满足参照完整性。对于学生关系中的每个元组的“系别号”属性只能取下面两类值:空值,表示尚未给该学生分配系别;非空值,则该值必须是系别关系中某个元组的“系别号”的值,表示该学生不可能分配到一个不存在的系中,即被参照关系“系别”中一定存在一个元组,它的主码值等于该参照关系“学生”中的外码值。(3)用户定义的完整性:用户定义的完整性就是针对某一具体应用的关系数据库所制定的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。例如,对于学生关系中的年龄,我们可以按需要定义“年龄>8并且年龄<45”的自定义规则。5、关系代数运算有哪两大类,试说明每种运算的操作含义。解:1)关系代数的运算按运算符的不同主要分为传统的集合运算和专门的关系运算两类。(1)传统的集合运算:包括并、交、差、广义笛卡尔积四种运算。(2)专门的关系运算:包括选择、投影、连接、除等。2)各运算的操作含义(1)并:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的所有元组组成。记作:R∪S={t|tR∨tS}(2)差:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。记作:R-S={t|tR∧tS}(3)交:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由既属于R又属于S的所有元组组成。记作:R∩S={t|tR∧tS}(4)广义笛卡尔积:︵两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。记作:R×S={tt|tR∧tS}(5)选择:选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作:(R)={t|t∈R∧F(t)=“真”}(6)投影:关系R上的投影是从R中选择出若干属性列组成新的关系。记作:∏(R)={t[A]|tR}(7)连接:︵连接也称为θ连接。它是从两个关系的广义笛卡尔积中选取属性间满足一定条件的元组。记作:={tt|t∈R∧t∈S∧t[A]θt[B]}︵θ为”=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。等值连接表示为:={tt|∈R∧t∈S∧t[A]=t[B]}。为此:=A=B(R×S)- -︵自然连接(Naturaljoin)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。即若R和S具有相同的属性组B,则自然连接可记作:R∞S={trts[B]|tr∈R∧ts∈S∧tr[B]=ts[B]}。为此:R∞S=∏(R.B=S.B(R×S))(8)除:给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作:P=R÷S={tr[X]|tr∈R∧Yx⊇∏Y(S)},其中Yx为x在R中的象集,x=tr[X]。6、关系代数的基本运算有哪些?请用基本运算表示非基本运算。解:1)8种关系代数运算中并、差、广义笛卡尔积、投影和选择5种运算为基本的关系代数运算。2)另外3种运算,即交、连接和除为非基本运算,均可以用这5种基本运算来表达。表达如下:(1)R∩S=R-(R-S)或R∩S=S-(S-R)(2)=AθB(R×S)-=A=B(R×S)R∞S=∏(R.B=S.B(R×S))(3)R÷S=∏X(R)-∏X(∏X(R)×∏Y(S)-R)7、举例说明等值连接与自然连接的区别与联系。解:︵θ为”=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。等值连接表示为:={tt|∈R∧t∈S∧t[A]=t[B]}。为此:=A=B(R×S)--︵自然连接(Naturaljoin)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。即若R和S具有相同的属性组B,则自然连接可记作:R∞S={trts[B]|tr∈R∧ts∈S∧tr[B]=ts[B]}。为此:R∞S=∏(R.B=S.B(R×S))一般的连接操作是从行的角度进行运算。但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。举例:设图2.10(a)和图2.10(b)分别为关系R和关系S,R.B=S.B图2.10(d)为等值连接R∞S的结果,图2.10(e)为自然连接R∞S的结果。从中能明显看出其列数的不同。RSABCa1b15 a1b26a2b38a2b412BEb13b27b310b32b52(a)(b)R.B=S.BR∞SR∞SABCEa1b153a1b267a2b3810a2b382AR.BCS.BEa1b15b13a1b26b27a2b38b310a2b38b32(d)(e)图2.10连接运算举例8、设有关系R、S(如下表所示),计算:RSABCCDE3673454576236235432<2(1)R1=RS(2)R2=RS(3)R3=B=D(R×S)解:(1)ABCDE6234554345(2)ABR.CS.CDE623345 (3)结果同(2)9、请用抽象的元组关系演算表达式表达第8题中的R1、R2与R3关系。解:(1)R1={t|($u)($v)(R(u)∧S(v)∧t[1]=u[1]∧t[2]=u[2]∧t[3]=u[3]∧t[4]=v[2]∧t[5]=v[3]∧u[3]=v[1])}(2)R2={t|($u)($v)(R(u)∧S(v)∧t[1]=u[1]∧t[2]=u[2]∧t[3]=u[3]∧t[4]=v[1]∧t[5]=v[2]∧t[6]=v[3]∧u[2]=v[2])}(3)同(2)10、设有学生-课程关系数据库,它由三个关系组成,它们的模式是:学生S(学号SNO,姓名SN,所在系DEPT,年龄AGE)、课程C(课程号CNO,课程名CN,先修课号CPNO)、SC(学号SNO,课程号CNO,成绩SCORE)。请用关系代数与ALPHA语言分别写出下列查询:(1)检索学生的所有情况。(2)检索学生年龄大于等于20岁的学生姓名。(3)检索先修课号为C2的课程号。(4)检索选修了课程号C1成绩为A的所有学生姓名。(5)检索学号为S1的学生修读的所有课程名及先修课号。(6)检索年龄为23岁的学生所修读的课程名。(7)检索至少修读了学号为S5的学生修读的一门课的学生的姓名。(8)检索修读了学号为S4的学生所修读的所有课程的学生的姓名。(9)检索选修所有课程的学生的学号。(10)检索不选修任何课程的学生的学号。(11)在关系C中增添一门新课(新课信息自定)(12)学号为S17的学生因故退学请在S与SC中将其除名。(13)将关系S中学生S6的年龄改为22岁(只需ALPHA操作)。(14)将关系S中学生的年龄均增加1岁(只需ALPHA操作)。解:写出关系代数表达方式:(1)检索学生的所有情况。S或SSCC(2)检索学生年龄大于等于20岁的学生姓名。πSN(σAGE>=20(S))(3)检索先修课号为C2的课程号。πCNO(σCPNO=’C2’(C))(4)检索选修了课程号C1成绩为A的所有学生姓名。πSN(σCNO=’C1’∧SCORE=’A’(SCS))(5)检索学号为S1的学生修读的所有课程名及先修课号。πCN,CPNO(σSNO=’S1’(SCC))(6)检索年龄为23岁的学生所修读的课程名。πCN(σAGE=23(SSCC))(7)检索至少修读了学号为S5的学生修读的一门课的学生的姓名。πSN(SSCπCNO(σSNO=’S5’(SC)))(8)检索修读了学号为S4的学生所修读的所有课程的学生的姓名。πSN(S(πSNO,CNO(SC)÷πCNO(σSNO=’S4’(SC))))(9)检索选修所有课程的学生的学号。 πSNO,CNO(SC)÷πCNO(C)(10)检索不选修任何课程的学生的学号。πSNO(S)-πSNO(SC)写出ALPHA命令:(1)检索学生的所有情况。SSSCCGETW(S)GETW(S,SC,C):S.SNO=SC.SNO∧SC.CNO=C.CNO(2)检索学生年龄大于等于20岁的学生姓名。πSN(σAGE>=20(S))GETW(S.SN):(S.AGE>=20)(3)检索先修课号为C2的课程号。πCNO(σCPNO=’C2’(C))GETW(C.CNO):(C.CPNO=’C2’)(4)检索选修了课程号C1成绩为A的所有学生姓名。πSN(σCNO=’C1’∧SCORE=’A’(SCC))RANGESCSCXGETW(S.SN):SCX(SCX.SNO=S.SNO∧SCX.CNO=’C1’∧SCX.SCORE=’A’)(5)检索学号为S1的学生修读的所有课程名及先修课号。πCN,CPNO(σSNO=’S1’(SCS))RANGESCSCXGETW(C.CN,C.CPNO):SCX(SCX.CNO=C.CNO∧SCX.SNO=’S1’)(6)检索年龄为23岁的学生所修读的课程名。πCN(σAGE=23(SSCC))RANGESSXSCSCXGETW(C.CN):SXSCX(SX.SNO=SCX.SNO∧SCX.CNO=C.CNO∧SX.AGE=23)(7)检索至少修读了学号为S5的学生修读的一门课的学生的姓名。πSN(SSCπCNO(σSNO=’S5’(SC)))RANGESCSCXSCSCYGETW(S.SN):SCXSCY(SCX.SNO=’S5’∧SCY.SNO=S.SNO∧SCY.CNO=SCX.CNO)或RANGECCXSCSCXSCSCYGETW(S.SNO):CX(SCX(SCX.SNO=’S5’∧CX.CNO=SCX.CNO)->SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))(8)检索修读了学号为S4的学生所修读的所有课程的学生的姓名。πSN(S(πSNO,CNO(SC)÷πCNO(σSNO=’S4’(SC))))RANGECCXSCSCXSCSCYGETW(S.SNO):CX(SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO)->SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))也可以变换(A->B≡﹁A∨BX(A)≡﹁X(﹁A)) 真值表ABA->B≡﹁A∨BTTTTTFFFFTTTFFTTRANGECCXSCSCXSCSCYGETW(S.SNO):CX(SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO)->SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))GETW(S.SNO):CX(﹁(SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO))∨(SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO)))GETW(S.SNO):﹁CX(﹁(﹁(SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO))∨(SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))))GETW(S.SNO):﹁CX(((SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO))∧﹁(SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))))(9)检索选修所有课程的学生的学号。πSNO,CNO(SC)÷πCNO(C)RANGECCXSCSCXGETW(S.SNO):CXSCX(SCX.CNO=CX.CNO∧S.SNO=SCX.SNO)全称改存在为:RANGECCXSCSCXGETW(S.SNO):﹁CX(﹁SCX(SCX.CNO=CX.CNO∧S.SNO=SCX.SNO))(10)检索不选修任何课程的学生的学号。πSNO(S)-πSNO(SC)RANGESCSCXGETW(S.SNO):SCX(﹁(SCX.SNO=SNO))即:RANGESCSCXGETW(S.SNO):SCX(SCX.SNO≠SNO)或全称改存在为:GETW(S.SNO):﹁SCX(﹁(﹁(SCX.SNO=SNO)))即:GETW(S.SNO):﹁SCX(SCX.SNO=SNO))或(你们的做法)RANGESCSCXCCXGETW(S.SNO):CX﹁(SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))即: RANGESCSCXGETW(S.SNO):CXSCX(SCX.SNO≠SNO∨SCX.CNO≠CX.CNO)全称改存在为:RANGESCSCXCCXGETW(S.SNO):CX﹁(SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))GETW(S.SNO):﹁CX﹁(﹁(SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO)))GETW(S.SNO):﹁CX(SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))SQL命令见后(11)在关系C中增添一门新课MOVE"C9"TOW.CNOMOVE"计算机系统结构"TOW.CNMOVE"C4"TOW.CPNOPUTW(C)(12)学号为S17的学生因故退学请在S与SC中将其除名。HoldW(SC):SNO=’S17’DELETEWHoldW(S):SNO=’S17’DELETEW(13)将关系S中学生S6的年龄改为22岁(只需ALPHA操作)。HoldW(SNO,AGE):SNO=’S6’MOVE22TOW.AGEUPDATEW(14)将关系S中学生的年龄均增加1岁(只需ALPHA操作)。HoldW(SNO,AGE)MOVEW.AGE+1TOW.AGEUPDATEW写出SQL命令(非本章要求):9、设有学生-课程关系数据库,它由三个关系组成,它们的模式是:学生S(学号SNO,姓名SN,所在系DEPT,年龄AGE)、课程C(课程号CNO,课程名CN,先修课号CPNO)、SC(学号SNO,课程号CNO,成绩G)。请用关系代数与ALPHA语言分别写出下列查询:(1)检索学生的所有情况。SSSCCGETW(S)GETW(S,SC,C):S.SNO=SC.SNO∧SC.CNO=C.CNOSELECT*FROMS(2)检索学生年龄大于等于20岁的学生姓名。πSN(σAGE>=20(S))GETW(S.SN):(S.AGE>=20)SELECTSNFROMSWHERES.AGE>=20 (3)检索先修课号为C2的课程号。πCNO(σCPNO=’C2’(C))GETW(C.CNO):(C.CPNO=’C2’)SELECTCNOFROMCWHEREC.CPNO=’C2’(4)检索选修了课程号C1成绩为A的所有学生姓名。πSN(σCNO=’C1’∧SCORE=’A’(SCC))RANGESCSCXGETW(S.SN):SCX(SCX.SNO=S.SNO∧SCX.CNO=’C1’∧SCX.SCORE=’A’)SELECTSNFROMS,SCWHERES.SNO=SC.SNOANDSC.CNO=’C1’ANDSC.SCORE=’A’(5)检索学号为S1的学生修读的所有课程名及先修课号。πCN,CPNO(σSNO=’S1’(SCS))RANGESCSCXGETW(C.CN,C.CPNO):SCX(SCX.CNO=C.CNO∧SCX.SNO=’S1’)SELECTC.CN,C.CPNOFROMC,SCWHEREC.CNO=SC.CNOANDSC.SNO=’S1’(6)检索年龄为23岁的学生所修读的课程名。πCN(σAGE=23(SSCC))RANGESSXSCSCXGETW(C.CN):SXSCX(SX.SNO=SCX.SNO∧SCX.CNO=C.CNO∧SX.AGE=23)SELECTC.CNFROMS,SC,CWHERES.SNO=SC.SNOANDSC.CNO=C.CNOANDS.AGE=23(7)检索至少修读了学号为S5的学生修读的一门课的学生的姓名。πSN(SSCπCNO(σSNO=’S5’(SC)))RANGESCSCXSCSCYGETW(S.SN):SCXSCY(SCX.SNO=’S5’∧SCY.SNO=S.SNO∧SCY.CNO=SCX.CNO)或RANGECCXSCSCXSCSCYGETW(S.SNO):CX(SCX(SCX.SNO=’S5’∧CX.CNO=SCX.CNO)->SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))SELECTS.SNOFROMS,SCX,SCYWHERES.SNO=Y.SNOANDX.CNO=Y.CNOANDX.SNO=’S5’(8)检索修读了学号为S4的学生所修读的所有课程的学生的姓名。πSN(S(πSNO,CNO(SC)÷πCNO(σSNO=’S4’(SC)))) RANGECCXSCSCXSCSCYGETW(S.SNO):CX(SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO)->SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))也可以变换RANGECCXSCSCXSCSCYGETW(S.SNO):CX(SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO)->SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))GETW(S.SNO):CX(﹁(SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO))∨(SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO)))GETW(S.SNO):﹁CX(﹁(﹁(SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO))∨(SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))))GETW(S.SNO):﹁CX(((SCX(SCX.SNO=’S4’∧CX.CNO=SCX.CNO))∧﹁(SCY(SCY.SNO=S.SNO∧CX.CNO=SCY.CNO))))SELECTS.SNOFROMSWHERENOTEXISTS(SELECT*FROMSCXWHEREX.SNO=’S4’ANDNOTEXISTS(SELECT*FROMSCYWHERES.SNO=Y.SNOANDY.CNO=X.CNO))(9)检索选修所有课程的学生的学号。πSNO,CNO(SC)÷πCNO(C)RANGECCXSCSCXGETW(S.SNO):CXSCX(SCX.CNO=CX.CNO∧S.SNO=SCX.SNO)全称改存在为:RANGECCXSCSCXGETW(S.SNO):﹁CX(﹁SCX(SCX.CNO=CX.CNO∧S.SNO=SCX.SNO))SELECTS.SNOFROMSWHERENOTEXISTS(SELECT*FROMCCXWHERENOTEXISTS(SELECT* FROMSCSCXWHERES.SNO=SCX.SNOANDSCX.CNO=CX.CNO))(10)检索不选修任何课程的学生的学号。πSNO(S)-πSNO(SC)RANGESCSCXGETW(S.SNO):SCX(﹁(SCX.SNO=SNO))即:RANGESCSCXGETW(S.SNO):SCX(SCX.SNO≠SNO)或全称改存在为:GETW(S.SNO):﹁SCX(﹁(﹁(SCX.SNO=SNO)))即:GETW(S.SNO):﹁SCX(SCX.SNO=SNO))或(你们的做法)RANGESCSCXCCXGETW(S.SNO):CX﹁(SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))即:RANGESCSCXGETW(S.SNO):CXSCX(SCX.SNO≠SNO∨SCX.CNO≠CX.CNO)全称改存在为:RANGESCSCXCCXGETW(S.SNO):CX﹁(SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))GETW(S.SNO):﹁CX﹁(﹁(SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO)))GETW(S.SNO):﹁CX(SCX(SCX.SNO=SNO∧CX.CNO=SCX.CNO))SELECTSNOFROMSMINUS--EXCEPT(sqlserver2005)SELECTDISTINCTSNOFROMSC或SELECTSNOFROMSWHERESNONOTIN(SELECTDISTINCTSNOFROMSC)第3章关系数据库标准语言SQL一、选择题 1、C2、B3、D4、C5、A6、A7、D8、C9、C10、D1、在SQL语言中授权的操作是通过________语句实现的。A、CREATEB、REVOKEC、GRANTD、INSERT2、SQL语言的一体化特点是主要同()相比较而言的。A.操作系统命令B.非关系模型的数据语言C.高级语言D.关系模型语言3、在嵌入式SQL语言中使用游标的目的在于________。A、区分SQL与宿主语言B、与数据库通信C、处理错误信息D、处理多行记录4、设有关系R=(A,B,C)。与SQL语句SELECTDISTINCTAFROMRWHEREB=17等价的关系代数表达式是________。A.∏A(R)B.σB=17(R)C.∏A(σB=17(R))D.σB=17(∏A(R))5、两个子查询的结果()时,可以执行并、交、差操作。A.结构完全一致B.结构完全不一致C.结构部分一致C.主键一致6、在SQL查询语句中,用于测试子查询是否为空的谓词是()。A.ExistsB.UniqueC.SomeD.All7、使用SQL语句进行查询操作时,若希望查询结果中不出现重复元组,应在Select子句中使用()保留字。A.UniqueB.AllC.ExceptD.Distinct8、在视图上不可能完成的操作是()A.更新视图B.查询C.在视图上定义新的基本表D.在视图上定义新视图9、SQL中涉及属性Age是否是空值的比较操作,写法()是错误的。A.AgeIsNullB.Not(AgeIsNull)C.Age=NullD.AgeIsNotNull10、假定学生关系是S(S#,Sname,Sex,Age),课程关系是C(C#,CName,TEACHER),学生选课关系是SC(S#,C#,Grade)。要查找选修“数据库系统概论”课程的“男”学生学号,将涉及到关系()。A.SB.SC,CC.S,SCD.S,SC,C二、填空题1、SQL操作命令CREATE、DROP、ALTER主要完成的是数据的_定义_功能。2、__SQL___为关系数据库语言国际标准语言。3、SQL中文含义是_结构化查询语言_,它集查询、操纵、定义和控制等多种功能。4、视图是从_基本表或视图_导出的表。它相当于三级结构中的外模式。5、视图是虚表,它一经定义就可以和基本表一样被查询,但_更新__操作将有一定限制。 6、SQL的数据更新功能主要包括__INSERT__、__UPDATE_和_DELETE_三个语句。7、在字符匹配查询中,通配符“%”代表_任意多个字符_,“_”代表__任意单个字符_。8、SQL语句具有__交互式__和__嵌入式__两种使用方式。9、SQL语言中,实现数据检索的语句是_SELECT_。10、在SQL中如果希望将查询结果排序,应在Select语句中使用_ORDERBY_子句。三、简答与SQL操作表达1、简述SQL的定义功能。解:SQL语言使用数据定义语言(DataDefinitionLanguage,DDL)实现其数据定义功能,可对数据库基本表、视图和索引等进行定义、修改和撤消(删除)等操作。具体对基本表、视图和索引的定义(创建)、修改和撤消(删除)等操作命令的使用此略。见书P73-792、简述SQL语言支持的三级逻辑结构。解:SQL语言支持关系数据库三级模式结构,如图3.1所示。其中外模式对应于视图(View)和部分基本表(BaseTable),模式对应于基本表,内模式对应于存储文件。图3.1数据库三级模式结构基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一些基本表对应一个存储文件,一个表可以有若干索引,索引也存放在存储文件中。图3.2关系数据库三级模式结构示意图视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。存储文件的物理结构及存储方式等组成了关系数据库的内模式。对于不同数据库管理系统,其存储文件的物理结构及存储方式等往往是不同的,一般也是不公开的。视图和基本表是SQL语言的主要操作对象,用户可以用SQL语言对视图和基本表进行各种操作。在用户眼中,视图和基本表都是关系表,而存储文件对用户是透明的。关系数据库三级模式结构直观示意图如图3.2所示。3、解释本章所涉及的有关基本概念的定义:基本表、导出表、视图、索引、聚集、系统特权、对象特权、角色,并说明视图、索引、聚集、角色的作用。解:1)基本表:基本表是本身独立存在的表,在SQL中一个关系就对应一个表。导出表:在若基本表上定义的查询表。视图:视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。索引:在现实生活中我们经常借用索引的手段实现快速查找,例如图书目录、词典索引等。同样道理,数据库中的索引是为了加速对表中元组(或记录)的检索而创建的一种分散存储结构(如B+树数据结构),它实际上是记录的关键字与其相应地址的对应表。索引是对表或视图而建立的,由索引页面组成。聚集:按照索引记录的存放位置可分为聚集索引与非聚集索引两类。聚集索引是指索引项的顺序与表中记录的物理顺序一致的索引组织;非聚集索引按照索引的字段排列记录,但是排列的结果并不会与表记录顺序一致,而是另外组织存储。在检索记录时,聚集索引会比非聚集索引速度快,一个表中只能有一个聚集索引,而非聚集索引可以有多个。系统特权:即系统权限,是指数据库系统级的权限,而不是依附于某数据库对象的权限。如创建数据库表的权限:CREATETABLE。 对象特权:数据库管理员拥有系统权限,而作为数据库的普通用户,只对自己建的基本表、视图等数据库对象拥有对象权限。所谓对象权限即是指依附于数据库对象如表、视图等的权限。如对某表的添加记录、删除记录、修改记录、查询记录等的权限。角色:角色是对多种权限的集合的一种命名。当要为某一用户同时授予或收回多项权限时,则可以把这些权限定义为一个角色,如此可对此角色内的所有权限进行整体操作。这样就避免了许多重复性的工作,简化了管理数据库用户权限的人的工作。可以把角色授予用户或其它角色。2)以下简单说明视图、索引、聚集、角色的作用。视图:在关系数据库系统中,视图为用户提供了多种看待数据库数据的方法与途径,是关系数据库系统中的一种重要对象。其作用有:(1)视图能够简化用户的操作;(2)视图使用户能以多种角度看待同一数据;(3)增加了数据的安全性;(4)视图对重构数据库提供了一定程度的逻辑独立性。索引:系统将自动使用索引进行查询优化,能明显加快对表数据的查询速度。聚集:聚集是一种数据组织方法,聚集索引是一类索引,由于索引信息与表记录的物理组织存放顺序一致,从而能减少定位索引信息的时间,能更快速地索引查找记录数据。角色:简化了数据库系统管理对权限的管理工作。4、在对数据库进行操作的过程中,设置视图机制有什么优点?它与数据表之间有什么区别?解:1)在关系数据库系统中,视图为用户提供了多种看待数据库数据的方法与途径,是关系数据库系统中的一种重要对象。其优点有:(1)视图能够简化用户的操作;(2)视图使用户能以多种角度看待同一数据;(3)增加了数据的安全性;(4)视图对重构数据库提供了一定程度的逻辑独立性。2)视图在概念上与基本表等同,一经定义,就可以和基本表一样被查询、被删除,我们也可以在一个视图上再定义新的视图,但对视图的更新(插入、删除、修改)操作相对于数据表来说,则有一定的限制。即有些视图逻辑上是肯定不能修改的。5、设有四个关系(只示意性给出一条记录):SSPJSNOSNAMEADDRESSTELSNOPNOJNOQTYSlSN1上海南京路68564345S1PlJ1200PJPNOPNAMESPECCITYCOLORJNOJNAMELEADERBGP1PNl8X8无锡红J1JN1王总10S(SNO,SNAME,ADDRESS,TEL)其中,SNO:供应商代码SNAME:姓名ADDRESS:地址TEL:电话;J(JNO,JNAME,LEADER,BG)其中,JNO:工程代码JNAME:工程名LEADER:负责人BG:预算;P(PNO,PNAME,SPEC,CITY,COLOR)其中,PNO:零件代码PNAME:零件名SPEC:规格CITY:产地COLOR:颜色;SPJ(SNO,JNO,PNO,QTY)其中,SNO:供应商代码JNO:工程代码PNO:零件代码QTY:数量;(1)为每个关系建立相应的表结构,添加若干记录。(2)完成如下查询:1)找出所有供应商的姓名和地址、电话。2)找出所有零件的名称、规格、产地。3)找出使用供应商代码为S1供应零件的工程号。4)找出工程代码为J2的工程使用的所有零件名称、数量。5)找出产地为上海的所有零件代码和规格。6)找出使用上海产的零件的工程名称。7)找出没有使用天津产的零件的工程号。8)求没有使用天津产的红色零件的工程号。9)取出为工程J1和J2提供零件的供应商代号。 10)找出使用供应商S2供应的全部零件的工程号。(3)完成如下更新操作:1)把全部红色零件的颜色改成蓝色;2)由S10供给J4的零件P6改为由S8供应,请作必要的修改。3)从供应商关系中删除S2的记录,并从供应零件关系中删除相应的记录。4)请将(S2,J8,P4,200)插入供应零件关系。5)将工程J2的预算改为40万元。6)删除工程J8订购的S4的零件。(4)请将“零件”和“供应零件”关系的连接定义一个视图,完成下列查询:1)找出工程代码为J2的工程使用的所有零件名称、数量。2)找出使用上海产的零件的工程号。解:(1)CREATETABLES(SNOVARCHAR(5)NOTNULLPRIMARYKEY,SNAMEVARCHAR(20)NOTNULL,ADDRESSNVARCHAR(30),TELVARCHAR(20))INSERTINTOSVALUES(‘S1’,’SN1’,’上海南京路’,’68564345’)……CREATETABLEP(PNOVARCHAR(5)NOTNULLPRIMARYKEY,PNAMEVARCHAR(20)NOTNULL,SPECVARCHAR(20),CITYNVARCHAR(20);COLORNVARCHAR(2))INSERTINTOPVALUES(‘P1’,’PN1’,’8x8’,’无锡’,’红’)……CREATETABLEJ(JNOVARCHAR(5)NOTNULLPRIMARYKEY,JNAMEVARCHAR(20)NOTNULL,LEADERVARCHAR(10),BGINT)INSERTINTOJVALUES(‘J1’,’JN1’,’王总’,10)……CREATETABLESPJ(SNOVARCHAR(5)NOTNULL,PNOVARCHAR(5)NOTNULL,JNOVARCHAR(5)NOTNULL,QTYINT,CONSTRAINTPR_SPJPRIMARYKEY(SNO,SPNO,JNO))INSERTINTOSPJVALUES(‘S1’,’P1’,’J1’,200)……(2)1)找出所有供应商的姓名和地址、电话。SELECTSNAME,ADDRESS,TELFROMS2)找出所有零件的名称、规格、产地。SELECTONAME,SPEC,CITYFROMP 3)找出使用供应商代码为S1供应零件的工程号。SELECTDISTINCTJNOFROMSPJWHERESNO=’S1’4)找出工程代码为J2的工程使用的所有零件名称、数量。SELECTPNAME,QTYFROMSPJ,PWHERESPJ.PNO=P.PNOANDJNO=’J2’5)找出产地为上海的所有零件代码和规格。SELECTPNO,SPECFROMPWHERECITY=’上海’6)找出使用上海产的零件的工程名称。SELECTJNOFROMFROMP,SPJ,JWHEREP.CITY=’上海’ANDP.PNO=SPJ.PNOANDSPJ.JNO=J.JNO7)找出没有使用天津产的零件的工程号。SELECTJNOFROMJWHEREJNONOTIN(SELECTJNOFROMSPJ,PWHERESPJ.PNO=P.PNOANDP.CITY=’天津’)8)求没有使用天津产的红色零件的工程号。SELECTJNOFROMJWHEREJNONOTIN(SELECTJNOFROMSPJ,PWHERESPJ.PNO=P.PNOANDP.CITY=’天津’ANDP.COLOR=’红’)9)取出为工程J1和J2提供零件的供应商代号。SELECTSNOFROMSPJWHEREJNO=’J1’ORJNO=’J2’10)找出使用供应商S2供应的全部零件的工程号。SELECTJNOFROMJWHERENOTEXISTS(SELECT*FROMSPJXWHEREX.SNO=’S1’ANDNOTEXISTS(SELECT*FROMSPJYWHEREY.JNO=J.JNOANDY.PNO=X.PNO))(3)1)把全部红色零件的颜色改成蓝色;UPDATEPSETCOLOR=’蓝’WHERECOLOR=’红’2)由S10供给J4的零件P6改为由S8供应,请作必要的修改。UPDATESPJSETSNO=’S8’WHERESNO=’S10’ANDPNO=’P6’ANDJNO=’J4’ 若不能直接修改主码,则可如下操作:先添加新记录,再删除老记录Insertintospjselect’S8’,jno,pno,qtyfromspjwhereSNO=’S10’ANDPNO=’P6’ANDJNO=’J4’deletefromspjwhereSNO=’S10’ANDPNO=’P6’ANDJNO=’J4’3)从供应商关系中删除S2的记录,并从供应零件关系中删除相应的记录。Deletefromspjwheresno=’s2’Deletefromswheresno=’s2’4)请将(S2,J8,P4,200)插入供应零件关系。Insertintospjvalues(’S2’,’J8’,’P4’,200)5)将工程J2的预算改为40万元。UpdateJSETBG=40WHEREJNO=’J2’6)删除工程J8订购的S4的零件。题意为:删除工程J8订购的S4提供零件的供应关系记录。DELETEFROMSPJWHEREJNO=’J8’ANDSNO=’S4’(4)CREATEVIEWP_SPJ_VIEWASSELECTP.*,SPJ.SNO,SPJ.JNO,QTYFROMP,SPJWHEREP.PNO=SPJ.PNO1)找出工程代码为J2的工程使用的所有零件名称、数量。SELECTPNAME,QTYFROMP_SPJ_VIEWWHEREJNO=’J2’2)找出使用上海产的零件的工程号。SELECTJNOFROMP_SPJ_VIEWWHERECITY=’上海’6、在嵌入式SQL中如何区分SQL语句和主语句的?举例说明。解:在嵌入式SQL中,为了能够区分SQL语句与主语言语句,所有SQL语句都必须加前缀EXECSQL。SQL语句的结束标志则随主语言的不同而不同,例如在PL/1和C中以分号(;)结束,在COBOL中以END-EXEC结束。这样,以C或PL/1作为主语言的嵌入式SQL语句的一般形式为:EXECSQL;举例:如下一条交互形式的SQL语句:DROPTABLES嵌入到C程序中,应写作:EXECSQLDROPTABLES7、在嵌入式SQL中如何解决数据库工作单元与程序工作单元之间沟通的?解:嵌入式SQL语句中可以使用主语言的程序变量来输入或输出数据。把SQL语句中使用的主语言程序变量称为主变量(HostVariable),主变量在数据库工作单元与程序工作单元之间起相互信息或数据沟通作用。主变量在宿主语言程序与数据库之间的作用可参阅图3.5。图3.5主变量的通信与传递数据的作用示意图主变量根据其作用的不同,分为输入主变量、输出主变量和指示主变量。输入主变量由应用程序对其赋值,SQL语句引用;输出主变量由SQL语句对其赋值或设置状态信息,返回给应用程序;一个主变量可以附带一个任选的指示主变量,指示主变量是一个整型变量,用来“指示”所指主变量的值的情况,指示主变量可以指示输入主变量是否希望设置为空值,可以检测输出主变量是否是空值(指示主变量为负值指示所指主变量为空值)。一个主变量可能既是输入主变量又是输出主变量。在SQL语句中使用这些变量时,需在主变量名前加冒号“:”作为标记,以区别于表中的字段(或属性)名。 SQL语句在应用程序中执行后,系统要反馈给应用程序若干信息,这些信息送到SQL的通信区SQLCA(SQLCommunicationArea)。SQLCA用语句EXECSQLINCLUDE加以定义。SQLCA是一个数据结构(即SQLCA结构中含有能反映不同执行后状况的多个状态变量如:SQLCODE、SQLERRD1、SQLERRMC、SQLWARN、SQLERRM等),SQLCA中有一个存放每次执行SQL语句后返回代码的状态变量SQLCODE。当SQLCODE为零时,表示SQL语句执行成功,否则返回一个错误代码(负值)或警告信息(正值),一般程序员应该在每个SQL语句之后测试SQLCODE的值。以便根据当前SQL命令执行情况决定后续的处理。8、SQL的集合处理方式与宿主语言的单记录处理方式之间如何协调?解:我们知道一个SQL语句一般能处理一组记录,而主语言一次只能处理一个记录,为此必须协调两种处理方式,使它们相互协调地处理。嵌入式SQL中是引入游标(Cursor)机制来解决这个问题的。游标是系统为用户开设的一个数据内存缓冲区,用来存放SQL语句的执行结果,每个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋给主变量,再由主语言程序作进一步处理。与游标有关的SQL语句有下列4个:(1)游标定义语句DECLARE。游标是与某个查询结果相联系的符号名,用SQL的DECLARE语句定义,它是说明性语句,定义时游标定义中的SELECT语句并不马上执行。(情况与视图的定义相似)(2)游标打开语句OPEN。此时执行游标定义中的SELECT语句,同时游标缓冲区中含有SELECT语句执行后对应的所有记录,游标也处于活动状态。游标指针指向游标中记录结果第一行之前。(3)游标推进语句FETCH。此时执行游标向前推进一行。并把游标指针指向的当前记录读出,放到FETCH语句中指定的对应主变量中。FETCH语句常置于主语言程序的循环结构中,通过循环逐一处理游标中的一个个记录。(4)游标关闭语句CLOSE。关闭游标,使它不再和原来的查询结果相联系,同时释放游标占用的资源。关闭的游标可以再次打开、得到新的游标记录后再使用游标、再关闭。在游标处于活动状态时,可以修改和删除游标指针指向的当前记录。9、对于简易教学管理数据库有如下3个基本表:S(SNO,SN,AGE,SEX)、SC(SNO,CNO,SCORE)、C(CNO,CN,TH),其含义为SNO(学号),SN(姓名),AGE(年龄),SEX(性别),SCORE(成绩),CNO(课程号),CN(课程名),TH(教师名)。试用SQL语言表达如下查询及操作:(1)检索年龄大于16岁的女学生的学号和姓名。(2)检索姓刘的学生选修的所有课程名与教师名。(3)检索没有选修数据库课程的学生的学号与姓名。(4)检索至少选修两门课程的学生的学号与姓名。(5)检索选修课程包含姓张老师所授全部课程的学生的学号与姓名。(6)把王非同学的学生信息及其选课情况等全部删除。(7)在课程表中添加一门新课程,其信息为:("C8","信息系统概论","孙力")。(8)在选修关系表SC中添加所有学生对"C8"课程的选修关系记录,成绩暂定为60,请用一条命令完成本批量添加任务。(9)把选“信息系统概论”课程的男学生的成绩暂全部初始化重新设置为0。(1)SELECTSNO,SNFROMSWHEREAGE>16ANDSEX="女";(2)方法一(联接查询方式):SELECTCN,THFROMS,SC,CWHERES.SNO=SC.SNOANDSC.CNO=C.CNOANDSNlike"刘%";方法二(嵌套查询方式): SELECTCN,THFROMCWHERECNOIN(SELECTCNOFROMSCWHERESNOIN(SELECTSNOFROMSWHERESNlike"刘%"));(3)SELECTSNO,SNFROMSWHERESNONOTIN(SELECTSNOFROMSWHERESNOIN(SELECTSNOFROMSCWHERECNOIN(SELECTCNOFROMCWHERECN="数据库")));或SELECTSNO,SNFROMSWHERESNONOTIN(SELECTSNOFROMS,SC,CWHERES.SNO=SC.SNOANDSC.CNO=C.CNOANDCN="数据库");(4)方法一:SELECTDISTINCTX.SNOFROMSCXWHERESNOIN(SELECTSNOFROMSCYWHEREX.SNO=Y.SNOANDX.CNO<>Y.CNO);方法二:SELECTDISTINCTX.SNOFROMSCX,SCYWHEREX.SNO=Y.SNOANDX.CNO<>Y.CNO);方法三:SELECTSNOFROMSCGROUPBYSNOHAVINGCOUNT(*)>=2;(5)SELECTDISTINCTSX.SNO,SNFROMSCX,SSXWHERENOTEXISTS(SELECT*FROMCWHERETHLIKE"张%" ANDNOTEXISTS(SELECT*FROMSCYWHEREX.SNO=Y.SNOANDC.CNO=Y.CNO))ANDX.SNO=SX.SNO;或SELECTDISTINCTX.SNO,X.SNFROMSXWHERENOTEXISTS(SELECT*FROMCWHERETHLIKE"张%"ANDNOTEXISTS(SELECT*FROMSCYWHEREX.SNO=Y.SNOANDC.CNO=Y.CNO));(6)DELETEFROMSCWHERESNO=(SELECTSNOFROMSWHERESN="王非");DELETEFROMSWHERESN="王非";(7)INSERTINTOCVALUES("C8","信息系统概论","孙力")(8)INSERTINTOSC(SNO,CNO,SCORE)SELECTSNO,"C8",60FROMS(9)UPDATESCSETSCORE=0WHERECNO="C8"ANDSNOIN(SELECTSNOFROMSWHERESEX="男")或UPDATESCSETSCORE=0WHERECNO="C8"AND"男"=(SELECTSEXFROMSWHERESNO=SC.SNO)或--最好为如下表示UPDATESCSETSCORE=0WHERESNOIN(SELECTSNOFROMSWHERESEX="男")ANDCNOIN(SELECTCNO FROMCWHERECN="数据库")或UPDATESCSETSCORE=0WHERE"男"=(SELECTSEXFROMSWHERESNO=SC.SNO)AND"数据库"=(SELECTCNFROMCWHERECNO=SC.CNO)第4章关系数据库设计理论一、选择题1、C2、B3、C4、C5、A6、B7、A8、B9、D10、B1、关系模式中数据依赖问题的存在,可能会导致库中数据插入异常,这是指()。A.插入了不该插入的数据  B.数据插入后导致数据库处于不一致状态C.该插入的数据不能实现插入 D.以上都不对2、若属性X函数依赖于属性Y时,则属性X与属性Y之间具有()的联系。A.一对一  B.一对多  C.多对一  D.多对多3、关系模式中的候选键()。A.有且仅有一个 B.必然有多个 C.可以有一或多个 D.以上都不对4、规范化的关系模式中,所有属性都必须是()。A.相互关联的  B.互不相关的  C.不可分解的  D.长度可变的5、设关系模式R{A,B,C,D,E},其上函数依赖集F={AB→C,DC→E,D→B},则可导出的函数依赖是()。A.AD→E  B.BC→E  C.DC→AB  D.DB→A6、设关系模式R属于第一范式,若在R中消除了部分函数依赖,则R至少属于()。A.第一范式  B.第二范式  C.第三范式  D.第四范式7、若关系模式R中的属性都是主属性,则R至少属于()。A.第三范式  B.BC范式  C.第四范式  D.第五范式8、下列关于函数依赖的叙述中,哪一个是不正确的。A.由X→Y,X→Z,有X→YZB.由XY→Z,有X→Z或X→ZC.由X→Y,WY→Z,有XW→ZD.由X→Y及ZY,有X→Z9、在关系模式R(A,B,C)中,有函数依赖集F={AB→C,BC→A},则R最高达到()。A.第一范式  B.第二范式  C.第三范式  D.BC范式 10、设有关系模式R(A,B,C),其函数依赖集F={A→B,B→C},则关系R最高达到()。A.1NFB.2NFC.3NFD.BCNF二、填空题1、数据依赖主要包括_函数_依赖、_多值_依赖和连接依赖。2、一个不好的关系模式会存在_插入异常_、_删除异常_和__修改复杂_等弊端。3、设X→Y为R上的一个函数依赖,若_对任意X的真子集X’,均无X’→Y存在__,则称Y完全函数依赖于X。4、设关系模式R上有函数依赖X→Y和Y→Z成立,若_Y不包含于X_且_Y→X不成立_,则称Z传递函数依赖于X。5、设关系模式R的属性集为U,K为U的子集,若_K→U为完全函数依赖_,则称K为R的候选键。6、包含R中全部属性的候选键称_主属性_。不在任何候选键中的属性称__非主属性_。7、Armstrong公理系统是_有效__的和_完备__的。8、第三范式是基于_函数_依赖的范式,第四范式是基于_多值_依赖的范式。9、关系数据库中的关系模式至少应属于_第一_范式。10、规范化过程,是通过投影分解,把_一个范式级别较低的_的关系模式“分解”为_若干个范式级别较高__的关系模式。三、简答题1、解释下列术语的含义:函数依赖、平凡函数依赖、非平凡函数依赖、部分函数依赖、完全函数依赖、传递函数依赖、范式、无损连接性、依赖保持性。解:函数依赖:设关系模式R(U,F),U是属性全集,F是U上的函数依赖集,X和Y是U的子集,如果对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体的值与之对应,则称X函数决定Y,或Y函数依赖于X,记X→Y。我们称X为决定因素,Y为依赖因素。当Y不函数依赖于X时,记作:XY。当X→Y且Y→X时,则记作:XY。平凡函数依赖:当属性集Y是属性集X的子集时,则必然存在着函数依赖X→Y,这种类型的函数依赖称为平凡的函数依赖。非平凡函数依赖:如果Y不是X子集,则称X→Y为非平凡的函数依赖。完全函数依赖与部分函数依赖:设有关系模式R(U),U是属性全集,X和Y是U的子集,X→Y,并且对于X的任何一个真子集X",都有X"Y,则称Y对X完全函数依赖(FullFunctionalDependency),记作XY。如果对X的某个真子集X",有X"→Y,则称Y对X部分函数依赖(PartialFunctionalDependency),记作XY。传递函数依赖:设有关系模式R(U),U是属性全集,X,Y,Z是U的子集,若X→Y(YX),但YX,又Y→Z,则称Z对X传递函数依赖(TransitiveFunctionalDependency),记作:XZ。范式:在关系数据库的规范化过程中,为不同程度的规范化要求设立的不同的标准或准则称为范式(NormalForm)。满足最低要求的叫第一范式,简称1NF。在第一范式中满足进一步要求的为第二范式(2NF),其余以此类推。R为第几范式就可以写成R∈xNF(x表示某范式名)。当把某范式看成是满足该范式的所有关系模式的集合时,各个范式之间的集合关系可以表示为:5NF4NFBCNF3NF2NF1NF。一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。无损连接性:设R(X,Y,Z),X、Y、Z为不相交的属性集合,如果有X→Y、X→Z,则有R(X,Y,Z)=R[X,Y]∞R[X,Z],其中R[X,Y]表示关系R在属性(X,Y)上的投影,即R等于两个分别含决定因素X的投影关系(分别是R[X,Y]与R[X,Z])在X上的自然连接,这样便保证了关系R分解后不会丢失原有的信息,这称作关系分解的无损连接性。 依赖保持性:设有关系模式R(U,F),Z⊆U,则Z所涉及到的F中所有函数依赖为F在Z上的投影,记为∏Z(F),有∏Z(F)={X→Y|(X→Y)∈F+且XY⊆Z}为函数依赖集F在Z上的投影。设R(U,F)的一个分解ρ={R1,R2,…,Rk},如果F等价于∏R1(F)∪∏R2(F)∪…∪∏Rk(F),则称分解ρ具有函数依赖保持性。检验一个分解是否具有依赖保持性,实际上是检验∏R1(F)∪∏R2(F)∪…∪∏Rk(F)是否覆盖F。2、给出2NF、3NF、BCNF的形式化定义,并说明它们之间的区别和联系。解:1)2NF如果关系模式R∈1NF,R(U,F)中的所有非主属性都完全函数依赖于任意一个候选关键字,则称关系R是属于第二范式(SecondNormalForm),简称2NF,记作R∈2NF。2)3NF如果关系模式R∈2NF,R(U,F)中所有非主属性对任何候选关键字都不存在传递函数依赖,则称R是属于第三范式(ThirdNormalForm),简称3NF,记作R∈3NF。3)BCNF如果关系模式R∈1NF,且所有的函数依赖X→Y(Y不包含于X,即YX),决定因素X都包含了R的一个候选码,则称R属于BC范式(Boyce-CoddNormalForm),记作R∈BCNF。4)区别和联系(1)BCNF3NF2NF(2)BCNF、3NF与2NF均是针对函数依赖而定义划分的。2NF、3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除异常。3、什么叫关系模式分解?为什么要做关系模式分解?模式分解要遵循什么准则?解:1)关系模式分解:一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫关系模式分解又叫关系模式规范化。2)做关系模式分解是因为:不好的关系往往内容“包罗万象”,内容太杂了。实现了信息的某种程度的分离,必须把“包罗万象”的关系模式,分解为若干内容单一,结合紧密的关系模式,才能使关系表现出更好的操作性能,避免出现各种异常问题的产生。3)模式分解要按需遵循模式分解的无损连接性或模式分解的依赖保持性。4、试证明全码的关系必是3NF,也必是BCNF。证明:1)设有关系R(U,F),因为R含全码,所以U中的属性均为主属性,即R不含任何非主属性。根据3NF的定义,R中没有非主属性对码有传递函数依赖存在。根据定义可下结论:R∈3NF。证毕。2)采用反证法,假设RBCNF。则按照定义R中必含有X→Y(YX),其中XU,Y包含于U,X不含码。在X→Y的两边同时并上U-Y,得:X(U-Y)→U。显然X(U-Y)¹U或X(U-Y)U。这与题中已知条件关系R为全码相矛盾。假设RBCNF不成立,本题得证。5、要建立关于系、学生、班级、研究会等信息的一个关系数据库。规定:一个系有若干专业、每个专业每年只招一个班,每个班有若干学生,一个系的学生住在同一个宿舍区。每个学生可参加若干研究会,每个研究会有若干学生。学生参加某研究会,有一个入会年份。描述学生的属性有:学号、姓名、出生年月、系名、班号、宿舍区。描述班级的属性有:班号、专业名、系名、人数、入校年份。描述系的属性有:系号、系名、系办公室地点、人数。 描述研究会的属性有:研究会名、成立年份、地点、人数。试给出上述数据库的关系模式;写出每个关系的最小依赖集(即基本的函数依赖集,不是导出的函数依赖);指出是否存在传递函数依赖;对于函数依赖左部是多属性的情况,讨论其函数依赖是完全函数依赖还是部分函数依赖,指出各关系的候选键、外部键。解:1)关系模式为:系({系号,系名,系办公室地点,宿舍区,人数},{系号→系名,系号→系办公室地点,系名→系办公室地点,系号→宿舍区})班级({班号,专业名,系号,人数,入校年份},{班号→专业名,班号→系号,班号→入校年份,(专业名,入校年份)→班号})学生({学号,姓名,出生年月,系号,班号},{学号→姓名,学号→出生年月,学号→系号,学号→班号,学号→宿舍区,班号→系号,})入会({学号,研究会名,入会年份},{(学号,研究会名)→入会年份})研究会({研究会名,成立年份,地点,人数},{研究会名→成立年份,研究会名→地点})说明:人数可以不作为属性,能统计得到;宿舍区应作为系的属性;学生关系中的系号可由班号属性通过班级关系得到,冗余可去。2)传递函数依赖有:系号→系办公室地点;学号→宿舍区;3)以上关系模式中没有部分函数依赖。系关系中候选键为:系号;外部键为:无班级关系中候选键为:班号、(专业名,入校年份);外部键为:系号学生关系中候选键为:学号;外部键为:班号入会关系中候选键为:(学号,研究会名)外部键为:学号或研究会名研究会关系中候选键为:研究会名;外部键为:无6、设有关系模式R(A,B,C,D,E,F),函数依赖集F={(A,B)→E,(A,C)→F,(A,D)→B,B→C,C→D},求出R的所有候选关键字。解:R的候选关键字有:(A、C)、(A、B)、(A、D)具体:经分析候选码中必含有A属性,要分别考察(A,B)、(A,C)、(A,D)、(A,E)、(A,F),先考察(A,B)∵(A,B)→B,B→C,∴(A,B)→C①∵(A,B)→A,(A,B)→C,∴(A,B)→(A,C)又∵(A,C)→F∴(A,B)→F②∵(A,B)→C,C→D,∴(A,B)→D③已知(A,B)→E④并显然有(A,B)→(A,B)⑤由①②③④⑤得,(A,B)→(A,B,C,D,E,F),∴(A,B)为候选码。∵(A,C)→C,C→D∴(A,C)→D∵(A,C)→A,(A,C)→D∴(A,C)→(A,D)∵(A,C)→(A,D),(A,D)→B∴(A,C)→B∵(A,C)→A,(A,C)→B∴(A,C)→(A,B)∵(A,B)→(A,B,C,D,E,F)∴(A,C)→(A,B,C,D,E,F),∴(A,C)为候选码。∵(A,D)→A,(A,D)→B∴(A,D)→(A,B)∵(A,B)→(A,B,C,D,E,F)∴(A,D)→(A,B,C,D,E,F),∴(A,D)为候选码。显然(A,E)、(A,F)不能函数决定(A,B,C,D,E,F)∴候选码有(A,B)、(A,C)、(A,D) 7、设有关系模式R(X,Y,Z),函数依赖集为F={(X,Y)→Z}。请确定SC的范式等级,并证明。解:R的候选关键字有:(X,Y)R达到BCNF范式等级,按BCNF定义判定即可,具体略。8、设有关系模式R(A,B,C,D,E,F),函数依赖集F={A→(B,C),(B,C)→A,(B,C,D)→(E,F),E→C}。试问:关系模式R是否为BCNF范式,并证明结论。解:R达不到BCNF范式。R的候选关键字有:(A,D)、(B,C,D)、(B,E,D)按BCNF定义判定即可,具体略。具体:经分析候选码中必含有D属性,要分别考察(A,D)、(B,D)、(C,D)、(E,D)、(F,D),先考察(A,D)∵(A,D)→A,A→(B,C),∴(A,D)→(B,C)∵(A,D)→D,∴(A,D)→(B,C,D)①∵(B,C,D)→(E,F),∴(A,D)→(E,F)②∵(A,D)→(A,D)③由①②③得,(A,D)→(A,B,C,D,E,F),∴(A,D)为候选码。经分析显然(B,D)、(C,D)、(E,D)、(F,D)不能函数决定(A,B,C,D,E,F)∴两属性组合的候选码有(A,D)下面要考察含D的三个属性组合看是否能完全函数决定(A,B,C,D,E,F),它们是(B,C,D)、(B,E,D)、(B,F,D)、(C,E,D)、(C,F,D)、(E,F,D)考察(B,C,D)∵(B,C,D)→(B,C,D),(B,C,D)→(E,F)∴(B,C,D)→(E,F)①∵(B,C,D)→(B,C),(B,C)→A∴(B,C,D)→A②∵(B,C,D)→(B,C,D)③由①②③得,(B,C,D)→(A,B,C,D,E,F),∴(B,C,D)为候选码。考察(B,E,D)∵(B,E,D)→E,E→C∴(B,E,D)→C①∵(B,E,D)→(B,D)②由①②得,(B,E,D)→(B,C,D)∵(B,C,D)→(A,B,C,D,E,F)∴(B,E,D)→(A,B,C,D,E,F),∴(B,E,D)为候选码。显然(B,F,D)、(C,E,D)、(C,F,D)、(E,F,D)不能函数决定(A,B,C,D,E,F)∴候选码有(A,D)、(B,C,D)、(B,E,D)9、设有关系模式R(E,F,G,H),函数依赖F={E→G,G→E,F→(E,G),H→(E,G),(F,H)→E}(1)求出R的所有候选关键字;(2)根据函数依赖关系,确定关系模式R属于第几范式;(3)将R分解为3NF,并保持无损连接性和函数依赖保持性;(4)求出F的最小函数依赖集。解:(1)R的候选关键字为:(F,H)经分析候选码中必含有(F,H)属性,考察(F,H)∵(F,H)→F,F→(E,G),∴(F,H)→(E,G)①∵(F,H)→(F,H)②由①②得,(F,H)→(E,F,G,H),∴(F,H)为候选码。 候选码就只有(F,H)(2)R为:1NF具体说明略(3)分解为:({E,G},{E→G,G→E})、({F,E},{F→E})、({H,G},{H→G})、({F,H},{})(4)最小函数依赖集为:{E→G,G→E,F→G,H→G}按定理4.3,求最小函数依赖集步骤:F={E→G,G→E,F→(E,G),H→(E,G),(F,H)→E}={E→G,G→E,F→G,H→E,H→G,(F,H)→E}={E→G,G→E,F→G,H→G}10、试问下列关系模式最高属于第几范式,并解释其原因。(1)R(A,B,C,D),F={B→D,AB→C}。(2)R(A,B,C,D,E),F={AB→CE,E→AB,C→D}。(3)R(A,B,C,D),F={B→D,D→B,AB→C}。(4)R(A,B,C),F={A→B,B→A,A→C}。(5)R(A,B,C),F={A→B,B→A,C→A}。(6)R(A,B,C,D),F={A→C,D→B}。(7)R(A,B,C,D),F={A→C,CD→B}。解:只依次写出候选关键字与范式等级(范式按定义判定,具体略)(1)AB1NF(2)AB,E2NF(3)AB,AD3NF(4)A,BBCNF(5)C2NF(6)AD1NF(7)AD1NF具体解答为:(1)R(A,B,C,D),F={B→D,AB→C}。经分析候选码中必含有AB属性,考察AB∵AB→B,B→D,∴AB→D①∵AB→AB②已知AB→C③由①②③得,AB→ABCD,∴AB为候选码。候选码就只有AB显然,A、B为主属性,C、D为非主属性。对非主属性D来说,∵有B→D,∴AB→D为部分函数依赖,∴R不属于2NF∴R最高属于1NF(2)R(A,B,C,D,E),F={AB→CE,E→AB,C→D}。经分析所有属性均出现在被决定因素位置,则从考察各决定因素出发来找寻候选码。先考察AB∵AB→CE,CE→C,∴AB→C①∵AB→C,C→D,∴AB→D②∵AB→AB③ 已知AB→CE④由①②③④得,AB→ABCDE,∴AB为候选码。再考察E∵E→AB,AB→ABCDE,∴E→ABCDE,∴E为候选码。再考察C显然C不能决定所有属性。∴候选码就有AB、E两个。显然,A、B、E为主属性,C、D为非主属性。非主属性C、D对候选码AB、E来说均为完全函数决定,∴R达到2NF但因为有AB→C,C→D,∴AB→D为传递函数依赖,∴R不属于3NF∴R最高属于2NF(3)R(A,B,C,D),F={B→D,D→B,AB→C}。经分析候选码中必含有A属性,要考察AB,AC,AD先考察AB∵AB→B,B→D,∴AB→D①∵AB→AB②已知AB→C③由①②③得,AB→ABCD,∴AB为候选码。再考察AD∵AD→D,D→B,∴AD→B∵AD→A∴AD→AB∵AB→ABCD,∴AD→ABCD∴AD为候选码。显然,AC不能决定所有属性。∴候选码就有AB、AD两个。显然,A、B、D为主属性,C为非主属性。对非主属性C来说,对候选码AB、AD均为完全并为直接函数依赖∴R属于3NF但因为有B→D或D→B,而B或D不为候选码∴R不属于BCNF∴R最高属于3NF(4)R(A,B,C),F={A→B,B→A,A→C}。经分析所有属性均出现在被决定因素位置,则从考察各决定因素出发来找寻候选码。先考察A∵A→B,A→C,A→A,∴A→ABC∴A为候选码。∵B→A,A→C∴B→C∵B→A,B→B,∴B→ABC∴B为候选码。候选码就只有A或B两个显然,A、B为主属性,C为非主属性。对F中的每个函数依赖考察,可知其每个函数依赖的决定因素均为候选码,∴根据定义R属于BCNF(5)R(A,B,C),F={A→B,B→A,C→A}。经分析候选码中必含有C属性,考察C∵C→A,A→B,∴C→B① ∵C→A②C→C③由①②③得,C→ABC,∴C为候选码。候选码只有C显然,C为主属性,A、B为非主属性。非主属性A、B对C均为完全函数依赖,∴R属于2NF但∵有C→A,A→B,∴C→B为传递函数依赖,∴R不属于3NF∴R最高属于2NF(6)R(A,B,C,D),F={A→C,D→B}。经分析候选码中必含有AD属性,考察AD∵A→C,D→B,∴AD→BC①∵AD→AD②由①②得,AD→ABCD,∴AD为候选码。候选码就只有AD显然,A、D为主属性,B、C为非主属性。对非主属性B来说,∵有D→B,∴AD→B为部分函数依赖,∴R不属于2NF∴R最高属于1NF(7)R(A,B,C,D),F={A→C,CD→B}。经分析候选码中必含有AD属性,考察AD∵AD→A,A→C,∴AD→C∵AD→D,AD→C∴AD→CD①已知CD→B∴AD→B②∵AD→AD③由①②③得,AD→ABCD,∴AD为候选码。候选码就只有AD显然,A、D为主属性,B、C为非主属性。对非主属性C来说,∵有A→C,∴AD→C为部分函数依赖,∴R不属于2NF∴R最高属于1NF11、设有关系模式R(A,B,C,D,E),F={AB→C,C→E,A→CD}为R上的函数依赖集,试将R分解成3NF模式集,要求分解具有无损连接性和保持函数依赖性。算法4.4设有关系模式R,U为R的属性集,F为R上的函数依赖集。①令模式分解ρ=φ;②若存在函数依赖X→Y∈F,满足X∪Y=U,则令ρ={R},转步骤⑥;③令U0=φ,对U中的每个属性Ai,如果Ai既不出现在F中任一函数依赖的左端,也不出现在F中任一函数依赖的右端,则令U0=U0∪{Ai};以U0为属性集,构造关系模式R0,并令ρ=ρ∪{R0},U=U-U0;④若F中存在左端相同的函数依赖X→Y1,X→Y2,…,X→Yn,则对这些函数依赖进行合并,即令F=(F-{X→Y1,X→Y2,…,X→Yn})∪{X→(Y1∪Y2∪…∪Yn)};重复执行步骤④,直至F中不存在左端相同的函数依赖;⑤对F中的每个函数依赖Xi→Yi,令Ui=Xi∪Yi,以Ui为属性集构造关系模式Ri,再令ρ=ρ∪{Ri};⑥算法终止。算法4.5设有关系模式R,U为R的属性集,F为R上的函数依赖集。①用算法4.4对关系模式R进行分解,生成具有函数依赖保持性的模式分解ρ,此时ρ中的每个关系模式都属于3NF;②设X是R的一个候选键,以X为属性集构造关系模式RX,令ρ=ρ∪{RX};③ρ为R的一个既具有无损连接性又具有函数依赖保持性的模式分解,且ρ中的每个关系模式都属于3NF,算法终止。按第4章算法4.4有:按⑤,可把R分解为:R(U,F)=R1({A,B,C},{AB→C})∪R2({C,E},{C→E})∪R3({A,C,D},{A→CD})容易判断R的候选键为:AB 再按第4章算法4.5有:可把R分解为:R(U,F)=R1({A,B,C},{AB→C})∪R2({C,E},{C→E})∪R3({A,C,D},{A→CD})∪R4({A,B},{})则以上分解既具有无损连接性,又能保持函数依赖性,并各关系模式均达到3NF。12、设有关系模式R(A,B,C,D,E),F为R上的函数依赖集,试将R分解成3NF模式集,要求分解具有无损连接性和保持函数依赖性。(1)F={A→D,D→B};按第4章算法4.4有:按③,可把R分解为:R(U,F)=R1({C,E},{})∪R2({A,B,D},{A→D,D→B})按⑤,可把R分解为:R(U,F)=R1({C,E},{})∪R21({A,D},{A→D})∪R22({D,B},{D→B})容易判断R的候选键为:ACE再按第4章算法4.5有:可把R分解为:R(U,F)=R1({C,E},{})∪R21({A,D},{A→D})∪R22({D,B},{D→B})∪R3({A,C,E},{})R1与R3可合并,合并后为:R(U,F)=R21({A,D},{A→D})∪R22({D,B},{D→B})∪R3({A,C,E},{})则以上分解既具有无损连接性,又能保持函数依赖性,并各关系模式均达到3NF。(2)F={AB→C,E→BD,C→DE};按第4章算法4.4有:按按⑤,可把R分解为:R(U,F)=R1({A,B,C},{AB→C})∪R2({B,D,E},{E→BD})∪R3({C,D,E},{C→DE})容易判断R的候选键为:AB、AC、AE再按第4章算法4.5有:可把R分解为:R(U,F)=R1({A,B,C},{AB→C})∪R2({B,D,E},{E→BD})∪R3({C,D,E},{C→DE})∪R4({A,E},{})则以上分解既具有无损连接性,又能保持函数依赖性,并各关系模式均达到3NF。(3)F={B→C,D→E,B→ED}。按第4章算法4.4有:按③,可把R分解为:R(U,F)=R1({A},{})∪R2({B,C,D,E},{B→C,D→E,B→ED})按④,可把R分解为:R(U,F)=R1({A},{})∪R2({B,C,D,E},{B→CDE,D→E})按⑤,可把R分解为:R(U,F)=R1({A},{})∪R2({B,C,D,E},{B→CDE}∪R3({D,E},{D→E})容易判断R的候选键为:AB再按第4章算法4.5有:可把R分解为:R(U,F)=R1({A},{})∪R2({B,C,D,E},{B→CDE}∪R3({D,E},{D→E})∪R4({A,B},{})R1与R4可合并,合并后为:R(U,F)=R2({B,C,D,E},{B→CDE}∪R3({D,E},{D→E})∪R4({A,B},{})则以上分解既具有无损连接性,又能保持函数依赖性,并各关系模式均达到3NF。13、设有关系模式R(A,B,C,D,E),F={A→BC,B→D,D→E}为R上的函数依赖集,试将R分解成BCNF模式集,要求分解具有无损连接性。⑶分解到BCNF,具有无损连接性的模式分解算法算法4.6设有关系模式R,U是R的属性集,F为R上的函数依赖集。①令ρ={R};②如果ρ中各关系模式都属于BCNF,则转步骤④,否则继续;③任选ρ中不属于BCNF的关系模式Ri,设Ri的属性集为Ui,F在Ui上的投影为Fi,由于Ri不属于BCNF,则必存在函数依赖X→Y∈Fi+,其中X不是Ri的候选键,且Y⊈X。分别以属性集Ui-Y和X∪Y构造关系模式Ri’和Ri”,令ρ=(ρ-{Ri})∪{Ri’,Ri”},转步骤②;④算法终止。按第4章算法4.6有:按①,ρ=R({A,B,C,D,E},{A→BC,B→D,D→E}) ∵R的候选码为:A,有B→D,而B不为候选码,∴R不属于BCNF。按③,1)若取B→D,则R分为R1({B,D},{B→D})∪R2({A,B,C,E},{A→CE,B→E})其中R2不属于BCNF,继续按③处理,则R分为R1({B,D},{B→D})∪R21({A,C,E},{A→CE})∪R22({A,B},{})已均为BCNF或R分为R1({B,D},{B→D})∪R21({B,E},{B→E})∪R22({A,B,C},{A→C})已均为BCNF2)若取D→E,则R分为R1({D,E},{D→E})∪R2({A,B,C,E},{A→BC,B→E})其中R2不属于BCNF,继续按③处理,则R分为R1({D,E},{D→E})∪R21({A,B,C},{A→BC})∪R22({A,E},{A→E})已均为BCNF或R分为R1({D,E},{D→E})∪R21({B,E},{B→E})∪R22({A,B,C},{A→BC})已均为BCNF14、设有关系模式R(A,B,C,D,E),F为R上的函数依赖集,试将R分解成BCNF模式集,要求分解具有无损连接性。(1)F={AC→D,D→B,A→E};按第4章算法4.6有:按①,ρ=R({A,B,C,D,E},{AC→D,D→B,A→E})∵R的候选码为:AC,有D→B,而D不为候选码,∴R不属于BCNF。按③,1)若取D→B,则R分为R1({D,B},{D→B})∪R2({A,C,D,E},{AC→D,A→E})其中R2不属于BCNF,继续按③处理,则R分为R1({D,B},{D→B})∪R21({A,E},{A→E})∪R22({A,C,D},{AC→D})已均为BCNF2)若取A→E,则R分为R1({A,E},{A→E})∪R2({A,B,C,D},{AC→BD,D→B})其中R2不属于BCNF,继续按③处理,则R分为R1({A,E},{A→E})∪R21({B,D},{D→B})∪R22({A,C,D},{AC→D})已均为BCNF(2)F={A→E,E→BC,B→D,B→A};按第4章算法4.6有:按①,ρ=R({A,B,C,D,E},{A→E,E→BC,B→D,B→A})∵R的候选码为:A,E,B,∴R已属于BCNF。转步骤④,算法终止。不需分解。(3)F={B→A,D→E,C→DB}。按第4章算法4.6有:按①,ρ=R({A,B,C,D,E},{B→A,D→E,C→DB})∵R的候选码为:C,∴R不属于BCNF。按③,1)若取B→A,则R分为R1({A,B},{B→A})∪R2({B,C,D,E},{D→E,C→DB})其中R2不属于BCNF,继续按③处理,则R分为R1({A,B},{B→A})∪R21({D,E},{D→E})∪R22({B,C,D},{C→DB})已均为BCNF2)若取D→E,则R分为R1({D,E},{D→E})∪R2({A,B,C,D},{B→A,C→DB})其中R2不属于BCNF,继续按③处理,则R分为R1({D,E},{D→E})∪R21({A,B},{B→A})∪R22({B,C,D},{C→DB})已均为BCNF。结果同上。15、设有关系模式R(A,B,C,D,E),其函数依赖集F={A→BC,BCD→E,B→D,A→D,E→A}。(1)试找出关系模式R中的所有候选关键字。(2)该关系模式最高能够满足第几范式?(3)若该关系模式未达到BCNF,试对其进行分解,使其最终满足BCNF范式(保持函数依赖性)。解:1、经过分析所有属性在被决定因素上都出现过。为此要分别考察A、BCD、E、B:先考察A 已知A→BC,A→D,∴A→BCD①∵A→BCD,BCD→E,∴A→E②显然有A→A③由①②③得,A->ABCDE⑥∴A为候选码。∵E→A,∴E->ABCDE∴E也为候选码。∵BCD→E,∴BCD->ABCDE(并为完全函数依赖)∴BCD也为候选码。显然,没有B->ABCDE,∴B不是候选码。2、显然主属性为{A,B,C,D,E},非主属性为空。∵没有非主属性对任候选码有部分或传递函数依赖存在,∴R属于3NF又有B→D而决定因素B不包含码∴R不属于BCNF∴R最高达到3NF。3、下面是对R的一种可能分解,分解后的关系模式都满足BCNF范式。A→BC,BCD→E,B→D,A→D,E→AR1({A,B,C,D},{A→BCD})R2({B,C,D,E},{BCD→E})R3({B,D},{B→D})R4({E,A},{E→A})如此R1、R2、R3、R4均达到了BCNF。另一分解按第4章算法4.6有:按①,ρ=R({A,B,C,D,E},{A→BC,BCD→E,B→D,A→D,E→A})∵R的候选码为:A,E,BCD,∴R不属于BCNF。按③,1)若取B→D,则R分为R1({B,D},{B→D})∪R2({A,B,C,D,E},{A→BC,BCD→E,A→D,E→A})已均为BCNF。第5章数据库安全保护*一、选择题1、A2、A3、B4、D5、B6、A7、A8、C9、A10、B1、对用户访问数据库的权限加以限定是为了保护数据库的()。A.安全性  B.完整性  C.一致性  D.并发性2、数据库的()是指数据的正确性和相容性。A.完整性  B.安全性  C.并发控制  D.系统恢复3、在数据库系统中,定义用户可以对哪些数据对象进行何种操作被称为()。A.审计  B.授权  C.定义  D.视图4、脏数据是指()。 A.不健康的数据  B.缺损的数据  C.多余的数据D.被撤消的事务曾写入库中的数据5、设对并发事务T1、T2的交叉并行执行如下,执行过程中()。TlT2①READ(A)②READ(A)A=A+10写回③READ(A)A.有丢失修改问题  B.有不能重复读问题C.有读脏数据问题  D.没有任何问题6、若事务T1已经给数据A加了共享锁,则事务T2()。A.只能再对A加共享锁  B.只能再对A加排它锁C.可以对A加共享锁,也可以对A加排它锁 D.不能再给A加任何锁7、用于数据库恢复的重要文件是()。A.日志文件  B.索引文件  C.数据库文件  D.备注文件8、若事务T1已经给数据对象A加了排它锁,则T1对A()。A.只读不写 B.只写不读 C.可读可写 D.可以修改,但不能删除9、数据库恢复的基本原理是()。A.冗余  B.审计  C.授权  D.视图10、数据备份可只复制自上次备份以来更新过的数据,这种备份方法称为()。A.海量备份  B.增量备份  C.动态备份  D.静态备份二、填空题1、对数据库的保护一般包括__安全性__、_完整性_、_并发控制_和_数据恢复_四个方面的内容。2、对数据库_安全_性的保护就是指要采取措施,防止库中数据被非法访问、修改,甚至恶意破坏。3、安全性控制的一般方法有_用户标识和鉴别__、_用户存取权限控制_、_视图机制_、_数据加密_和__审计_五种。4、用户鉴定机制包括_用户标识定义_和_用户身份验证__两个部分。5、每个数据均需指明其数据类型和取值范围,这是数据_完整性_约束所必需的。6、在SQL中,_COMMIT_语句用于提交事务,_ROLLBACK_语句用于回滚事务。7、加锁对象的大小被称为加锁的_粒度_。8、对死锁的处理主要有两类方法,一是_预防死锁的发生__,二是_检测死锁发现后予以消除死锁_。9、解除死锁最常用的方法是_撤消一些陷入死锁的事务__。10、基于日志的恢复方法需要使用两种冗余数据,即_后备数据库__和_日志文件_。三、简单题1、简述数据库保护的主要内容。解:对数据库的保护一般包括4个方面的内容,一是对数据库完整性的保护,即保证库中的数据是正确的和相容的,符合完整性约束条件的;二是对数据库安全性的保护,即防止库中数据被非法访问、修改,甚至恶意破坏;三是对并发的事务进行控制,保证数据库的一致性;四是在发生故障后,对数据库进行恢复,尽量减少故障造成的损失。2、什么是数据库的安全性?简述DBMS提供的安全性控制功能包括哪些内容。解:1)数据库的安全性是指保护数据库,以防止非法使用所造成数据的泄露、更改或破坏。 2)为保证数据库的安全,防止库中数据被非法存取,甚至恶意破坏,需要针对非法用户可能采取的各种手段,分级逐层采取安全保障措施。在数据库系统层常采取的安全保护措施有用户鉴定、存取控制、视图保护、审计和数据加密等。(1)用户鉴定:用户鉴定是数据库系统提供的最外层的安全保障措施,可以重复多次。用户鉴定机制包括用户标识的定义和验证两个部分。用户标识的定义就是为合法用户在用户标识库中建立起相应的标识记录的过程。验证方法中常用的有密码验证和计算结果验证等。(2)存取控制:存取控制机制包括用户权限的定义和检查两个部分。用户权限的定义也称为授权,就是要指定用户可以对库中的哪些数据对象进行何种类型的操作,这些定义要用数据库管理系统提供的数据定义语言进行描述,经编译后保存在数据字典中,称为授权规则。当用户发出数据操作请求后,数据库管理系统将根据授权规则进行权限检查,若超出了允许的权限,则予以拒绝。存取控制方法按其对用户权限控制程度的不同可分为自主存取控制方法和强制存取控制方法。(3)视图保护:为不同的用户定义不同的视图,可以把要保密的数据对无权存取的用户隐藏起来,从而为数据库提供一定程度的安全保护。(4)审计:审计就是将各个用户对数据库的所有操作自动记录到审计文件中,一旦发现问题,可以根据审计文件的记载,分析导致该问题出现的操作,查找应对此负责的用户。审计是一项比较费时的工作,审计文件的存储也需占用较多的外存空间,是否需要进行审计应根据实际情况确定。(5)数据加密:数据加密就是利用加密算法对原始数据进行转换后再存储,这样非法用户即使取得了数据,也不能正确地读出数据,而合法用户在处理数据时则需先对其进行解密。数据的加密与解密也是比较费时的操作,应根据实际情况选用。3、什么是授权?什么是授权规则?关系数据库系统中用户可以有哪些权限?解:1)在数据库系统中,定义用户存取权限称为授权(Authorization)。2)授权定义经过编译后以一张授权表的形式存放在数据字典中。授权表主要有三个属性,用户标识、数据对象和操作类型。用户标识不但可以是用户个人,也可以是团体、程序和终端。在非关系系统中,存取控制的数据对象仅限于数据本身。而关系系统中,存取控制的数据对象不仅有基本表、属性列等数据本身,还有内模式、外模式、模式等数据字典中的内容。对于授权表,一个衡量授权机制的重要指标就是授权粒度,即可以定义的数据对象的范围,在关系数据库中,授权粒度包括关系、记录或属性。一般来说,授权定义中粒度越细,授权子系统就越灵活衡量授权机制的另一个重要方面就是授权表中权限表示能力的强弱。有的数据库系统的授权表不但可以对属性列授权,还可以提供与数值有关的授权,即可以对关系中的一组满足存取谓词的记录授权。可见授权粒度越细,授权子系统就越灵活,能够提供的安全性就越完善。但另一方面,如果用户比较多,数据库比较大,授权表将很大,而且每次数据库访问都要用到这张表做授权检查,这将影响数据库的性能。3)有两种权限:系统权限和对象权限。系统权限是由DBA授予某些数据库用户,只有得到系统权限,才能成为数据库用户。对象权限可以由DBA授予,也可以由数据对象的创建者授予,使数据库用户具有对某些数据对象进行某些操作的权限。在系统初始化时,系统中至少有一个具有DBA权限的用户,DBA可以通过GRANT语句将系统权限或对象权限授予其他用户。对于已授权的用户可以通过REVOKE语句收回所授予的权限。4、什么是数据库的完整性?DBMS提供哪些完整性规则,简述其内容。解: 1)数据库的完整性是指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。2)DBMS提供实体完整性规则、参照完整性规则及用户自定义完整性规则。三类完整性规则详细内容见第二章,此略。为保障数据库的完整性,数据库管理系统应提供完整性约束的定义机制和检查机制。(1)完整性约束条件完整性约束条件可分为由数据模型决定的约束条件和由应用决定的约束条件,也可按作用时机的不同分为静态约束条件和动态约束条件,还可按其所约束的数据对象的不同进行分类。(2)完整性检查数据库管理系统提供完整性检查机制对用户的数据库操作进行检查,一旦发现有违反完整性约束条件的情况出现,就要及时采取措施。完整性检查可以在一个数据库操作执行完毕后立即进行,也可以在一个事务中的全部数据库操作执行完毕,操作结果提交之前进行,前者称立即执行约束,后者称延迟执行约束。5、数据库的安全性保护和完整性保护有何主要区别?解:数据库的完整性和安全性是数据库保护的两个不同的方面。安全性是保护数据库,以防止非法使用所造成数据的泄露、更改或破坏,安全性措施的防范对象是非法用户和非法操作;完整性是防止合法用户使用数据库时向数据库中加入不符合语义的数据,完整性措施的防范对象是不合语义的数据,即不正确的数据。但从数据库的安全保护角度来讲,安全性和完整性又是密切相关的。6、什么是事务?简述事务的ACID特性,事务的提交和回滚是什么意思?解:1)事务是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列组成。一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按照缺省规定自动划分事务。在SQL语言中,定义事务的语句有三条:BEGINTRANSACTION;COMMIT;ROLLBACK。BEGINTRANSACTION表示事务的开始;COMMIT表示事务的提交;ROLLBACK表示事务的回滚。2)事务是由有限的数据库操作序列组成,但并不是任意的数据库操作序列都能成为事务,为了保护数据的完整性,一般要求事务具有以下四个特征:(1)原子性(Atomicity):一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”(nothingorall)的原则,即不允许事务部分的完成。即使因为故障而使事务未能完成,它执行的部分操作要被取消。(2)一致性(Consistency):事务对数据库的操作使数据库从一个一致状态转变到另一个一致状态。所谓数据库的一致状态是指事务操作后数据库中的数据要满足各种完整性约束要求。事务操作要么全做,要么全不做,否则就不能成为事务。可见事务的一致性与原子性是密切相关的。(3)隔离性(Isolation):如果多个事务并发地执行,应像各个事务独立执行一样,一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。并发控制就是为了保证事务间的隔离性。(4)持久性(Durability):指一个事务一旦提交,它对数据库中数据的改变就应该是持久的,即使数据库因故障而受到破坏,DBMS也应该能够恢复。 事务上述四个性质的英文术语的第一个字母分别为A、C、I、D。因此,这四个性质也称为事务的ACID准则。3)COMMIT表示事务的提交,即将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,此时事务正常结束;ROLLBACK表示事务的回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,再回滚到事务开始时的状态。7、数据库管理系统中为什么要有并发控制机制?解:每个用户在存取数据库中的数据时,可能是串行执行,即每个时刻只有一个用户程序运行,也可能是多个用户并行地存取数据库。数据库的最大特点之一就是数据资源是共享的,串行执行意味着一个用户在运行程序时,其他用户程序必须等到这个用户程序结束才能对数据库进行存取,这样数据库系统的利用率会极低。因此,为了充分利用数据库资源,很多时候数据库用户都是对数据库系统并行存取数据,但这样就会发生多个用户并发存取同一数据块的情况,如果对并发操作不加控制可能会产生操作冲突,破坏数据的完整性。即发生所谓的丢失更新、污读、不可重读等现象。数据库的并发控制机制能很好地解决这些并发问题,以保持数据库中数据在多用户并发操作时的一致性、正确性。8、在数据库操作中不加控制的并发操作会带来什么样的后果?如何解决?解:1)在数据库操作中不加控制的并发操作会破坏数据的完整性。带来丢失更新、污读、不可重读等现象。2)实现并发控制的方法主要有两种:封锁(Lock)技术和时标(Timestamping)技术。封锁可以保证合理的进行并发控制,保证数据的一致性。实际上,锁是一个控制块,其中包括被加锁记录的标识符及持有锁的事务的标识符等。在封锁时,要考虑一定的封锁规则,例如,何时开始封锁、封锁多长时间、何时释放等,这些封锁规则称为封锁协议。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。封锁协议在不同程序上对正确控制并发操作提供了一定的保证。并发操作所带来的丢失更新、污读和不可重读等数据不一致性问题,可以通过三级封锁协议在不同程度上给予解决。详细略,可见书5.3.4一节。9、什么是封锁?封锁的基本类型有哪几种?含义是什么?解:1)所谓封锁就是当一个事务在对某个数据对象(可以是数据项、记录、数据集、以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。2)基本的封锁类型有两种:排它锁和共享锁。(1)排它锁(ExclusiveLock):排它锁又称写锁,简称为X锁,其采用的原理是禁止并发操作。当事务T对某个数据对象R实现X封锁后,其他事务要等T解除X封锁以后,才能对R进行封锁。这就保证了其他事务在T释放R上的锁之前,不能再对R进行操作。(2)共享锁(ShareLock):共享锁又称读锁,,简称为S锁,其采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。当事务T对某个数据对象R实现S封锁后,其他事务只能对R加S锁,而不能加X锁,直到T释放R上的S锁。这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。10、简述共享锁和排它锁的基本使用方法。 解:共享锁和排它锁的基本使用方法请参见上一题。11、什么是活锁?如何处理?解:1)封锁技术可有效解决并行操作引起的数据不一致性问题,但也可产生新的问题,即可能产生活锁和死锁问题。活锁(Livelock):当某个事务请求对某一数据的排它性封锁时,由于其他事务一直优先得到对该数据的封锁与操作而使这个事务一直处于等待状态,这种状态形成活锁。2)避免活锁的简单方法是采用先来先服务的策略,按照请求封锁的次序对事务排队,一旦记录上的锁释放,就使申请队列中的第一个事务获得锁。12、什么是死锁?消除死锁的常用方法有哪些?请简述之。解:1)在同时处于等待状态的两个或多个事务中,每个事务都在等待其中另一个事务解除封锁,它才能继续执行下去,结果造成任何一个事务都无法继续执行,这种状态称为死锁。例如,事务T1在对数据R1封锁后,又要求对数据R2封锁,而事务T2已获得对数据R2的封锁,又要求对数据R1封锁,这样两个事务由于都不能得到全部所需封锁而处于等待状态,发生了死锁。2)发生死锁的必要条件有以下四条:①互斥条件:一个数据对象一次只能被一个事务所使用,即对数据的封锁采用排它式;②不可抢占条件:一个数据对象只能被占有它的事务所释放,而不能被别的事务强行抢占;③部分分配条件:一个事务已经封锁分给它的数据对象,但仍然要求封锁其他数据;④循环等待条件:允许等待其他事务释放数据对象,系统处于加锁请求相互等待的状态。死锁一旦发生,系统效率将会大大下降,因而要尽量避免死锁的发生。要想预防死锁的产生,就得破坏形成死锁的条件。在数据库环境下,常用的方法有以下3种:①一次加锁法一次加锁法是每个事物必须将所有要使用的数据对象全部依次加锁,并要求加锁成功,只要一个加锁不成功,表示本次加锁失败,则应该立即释放所有已加锁成功的数据对象,然后重新开始从头加锁。②顺序加锁法顺序加锁法是预先对所有可加锁的数据对象规定一个加锁顺序,每个事务都需要按此顺序加锁,在释放时,按逆序进行。③在数据库系统中,还有一种解决死锁的办法,即可以允许发生死锁,但在死锁发生后可以由系统及时自动诊断并解除已发生的死锁,从而避免事务自身不可解决的资源争用问题。13、简述常见的死锁检测方法。解:图5.3事务依赖图数据库系统中诊断死锁的方法与操作系统类似。可以利用事务信赖图的形式来测试系统中是否存在死锁。例如在图5.3中,事务T1需要数据R1,但R1已经被事务T2封锁,那么从T1到T2划一个箭头,事务T2需要数据R2,但R2已经被事务T1封锁,那么从T2到T1划一个箭头。如果在事务依赖图中沿着箭头方向存在一个循环(真如图5.3所示),那么死锁的条件就形成了,系统就出现死锁了。如果已经发现死锁,DBA从依赖相同资源的事务中抽出某个事务作为牺牲品,将它撤销,并释放此事务占用的所有数据资源,分配给其他事务,使其他事务得以继续运行下去,这样就有可能消除死锁。 在解除死锁的过程中,抽取牺牲事务的标准是根据系统状态及其应用的实际情况来确定的,通常采用的方法之一是选择一个处理死锁代价最小的事务,将其撤销;或从用户等级角度考虑,取消等级低的用户事务,释放其封锁的资源给其它需要的事务。14、数据库运行过程中可能产生的故障有哪几类?各类故障如何恢复?解:1)数据库运行过程中可能会出现各种各样的故障,这些故障可分为以下三类:事务故障、系统故障和介质故障。2)根据故障类型的不同,应该采取不同的恢复策略。(1)事务故障及其恢复事务故障表示由非预期的、不正常的程序结束所造成的故障。造成程序非正常结束的原因包括输入数据错误、运算溢出、违反存储保护、并行事务发生死锁等。发生事务故障时,被迫中断的事务可能已对数据库进行了修改,为了消除该事务对数据库的影响,要利用日志文件中所记载的信息,强行回滚该事务,将数据库恢复到修改前的初始状态。为此,要检查日志文件中由这些事务所引起的发生变化的记录,取消这些没有完成的事务所做的一切改变。这类恢复操作称为事务撤消,具体做法如下:①反向扫描日志文件,查找该事务的更新操作。②对该事务的更新操作执行反操作,即对已经插入的新记录进行删除操作,对已删除的记录进行插入操作,对修改的数据恢复旧值,用旧值代替新值。这样由后向前逐个扫描该事务己做所有更新操作,并做同样处理,直到扫描到此事务的开始标记,事务故障恢复完毕。因此,一个事务是一个工作单位,也是一个恢复单位。一个事务越短,越便于对它进行UNDO操作。如果一个应用程序运行时间较长,则应该把该应用程序分成多个事务,用明确的COMMIT语句结束各个事务。(2)系统故障及其恢复系统故障是指系统在运行过程中,由于某种原因,造成系统停止运转,致使所有正在运行的事务都以非正常方式终止,要求系统重新启动。引起系统故障的原因可能有:硬件错误如CPU故障、操作系统或DBMS代码错误、突然断电等。这时,内存中数据库缓冲区的内容全部丢失,存储在外部存储设备上的数据库并未破坏,但内容不可靠了。系统故障发生后,对数据库的影响有两种情况:一种情况是一些未完成事务对数据库的更新已写入数据库,这样在系统重新启动后,要强行撤消(UNDO)所有未完成事务,清除这些事务对数据库所做的修改。这些未完成事务在日志文件中只有BEGINTRANSCATION标记,而无COMMIT标记。另一种情况是有些己提交的事务对数据库的更新结果还保留在缓冲区中,尚未写到磁盘上的物理数据库中,这也使数据库处于不一致状态,因此应将这些事务己提交的结果重新写入数据库。这类恢复操作称为事务的重做。这种己提交事务在日志文件中既有BEGINTRANSCATION标记,也有COMMIT标记。因此,系统故障的恢复要完成两方面的工作,既要撤消所有未完成的事务,还需要重做所有己提交的事务,这样才能将数据库真正恢复到一致的状态。具体做法如下:①正向扫描日志文件,查找尚未提交的事务,将其事务标识记入撤消队列。同时查找已经提交的事务,将其事务标识记入重做队列。②对撤消队列中的各个事务进行撤消处理。方法同事务故障中所介绍的撤消方法。③对重做队列中的各个事务进行重做处理。进行重做处理的方法是:正向扫描日志文件,按照日志文件中所登记的操作内容,重新执行操作,使数据库恢复到最近某个可用状态。系统发生故障后,由于无法确定哪些未完成的事务己更新过数据库,哪些事务的提交结果尚未写入数据库,这样系统重新启动后,就要撤消所有的未完成事务,重做所有的已经提交的事务。 但是,在故障发生前已经运行完毕的事务有些是正常结束的,有些是异常结束的。所以无需把它们全部撤消或重做。通常采用设立检查点的方法来判断事务是否正常结束。每隔一段时间,比如说5分钟,系统就产生一个检查点,做下面一些事情:1)把仍保留在日志缓冲区中的内容写到日志文件中;2)在日志文件中写一个“检查点记录”;3)把数据库缓冲区中的内容写到数据库中,即把更新的内容写到物理数据库中;4)把日志文件中检查点记录的地址写到“重新启动文件”中。每个检查点记录包含的信息有:在检查点时间的所有活动事务一览表,每个事务最近日志记录的地址。在重新启动时,恢复管理程序先从“重新启动文件”中获得检查点记录的地址,从日志文件中找到该检查点记录的内容,通过日志往回找,就能决定哪些事务需要撤消,恢复到初始的状态,哪些事务需要重做。为此利用检查点信息能做到及时、有效、正确的完成恢复工作。(3)介质故障及其恢复介质故障是指系统在运行过程中,由于辅助存储器介质受到破坏,使存储在外存中的数据部分丢失或全部丢失。这类故障比事务故障和系统故障发生的可能性要小,但这是最严重的一种故障,破坏性很大,磁盘上的物理数据和日志文件可能被破坏,这需要装入发生介质故障前最新的后备数据库副本,然后利用日志文件重做该副本后所运行的所有事务。具体方法如下:①装入最新的数据库副本,使数据库恢复到最近一次转储时的可用状态。②装入最新的日志文件副本,根据日志文件中的内容重做已完成的事务。首先扫描日志文件,找出故障发生时已提交的事务,将其记入重做队列。然后正向扫描日志文件,对重做队列中的各个事务进行重做处理,方法是:正向扫描日志文件,对每个重做事务重新执行登记的操作,即将日志记录中“更新后的值”写入数据库。这样就可以将数据库恢复至故障前某一时刻的一致状态了。15、什么是数据备份?为什么要进行数据备份?解:数据备份就是每隔一定时间将库中数据复制到后备存储介质上保存起来。数据库系统中可能发生各种故障,有些故障会导致数据库被破坏,库中数据丢失,此时就可以利用后备数据库中的数据进行系统恢复。16、什么是日志文件?为什么要在系统中建立日志文件?解:数据库恢复的基本原理十分简单,就是数据的冗余。数据库中任何一部分被破坏的或不正确的数据都可以利用存储在系统其他地方的冗余数据来修复。因此恢复系统应该提供两种类型的功能:一种是生成冗余数据,即对可能发生的故障作某些准备;另一种是冗余重建,即利用这些冗余数据恢复数据库。生成冗余数据最常用的技术是登记日志文件和数据转储,在实际应用中,这两种方法常常结合起来一起使用。1、日志文件是用来记录事务对数据库的更新操作的文件。对数据库的每次修改,都将把被修改项目的旧值和新值写在一个叫做运行日志的文件中,目的是为数据库的恢复保留依据。典型的日志文件主要包含以下内容:1)更新数据库的事务标识(标明是哪个事务);2)操作的类型(插入、删除或修改);3)操作对象;4)更新前数据的旧值(对于插入操作而言,没有旧值);5)更新后数据的新值(对于删除操作而言,没有新值);6)事务处理中的各个关键时刻(事务的开始、结束及其真正回写的时间)。日志文件是系统运行的历史记载,必须高度可靠。所以一般都是双副本的,并且独立地写在两个不同类型的设备上。日志的信息量很大,一般保存在海量存储器上。在对数据库修改时,在运行日志中要写入一个表示这个修改的运行记录。为了防止在这两个操作之间发生故障后,运行日志中没有记录下这个修改,以后也无法撤消这个修改。为保证数据库是可恢复的,登记日志文件必须遵循两条原则(称为“先写日志文件”原则):1)登记的次序严格并发事务执行的时间次序;2)必须先写日志文件,后写数据库。 2、系统为什么需要建立日志文件呢?这从日志文件中含有的内容可得到回答。日志文件是用来记录事务对数据库的更新操作,也即数据库数据的所有变化,日志文件中都记录清楚,都能一一呈现。为此在需要时能利用它来恢复数据库中的数据。只有数据库某一时刻数据的转储,当故障发生时,系统是没有办法恢复到尽可能近的正确状态的。只有备用副本加上日志文件才能把数据库恢复到故障点或尽可能接近故障点的时刻。第6章数据库设计一、选择题1、C2、A3、D4、C5、B6、A7、D8、A9、A10、C1、下列对数据库应用系统设计的说法中正确的是()。A.必须先完成数据库的设计,才能开始对数据处理的设计B.应用系统用户不必参与设计过程C.应用程序员可以不必参与数据库的概念结构设计 D.以上都不对2、在需求分析阶段,常用()描述用户单位的业务流程。A.数据流图  B.E-R图  C.程序流图  D.判定表3、下列对E-R图设计的说法中错误的是()。A.设计局部E-R图中,能作为属性处理的客观事物应尽量作为属性处理B.局部E-R图中的属性均应为原子属性,即不能再细分为子属性的组合C.对局部E-R图集成时既可以一次实现全部集成,也可以两两集成,逐步进行D.集成后所得的E-R图中可能存在冗余数据和冗余联系,应予以全部清除4、下列属于逻辑结构设计阶段任务的是()。A.生成数据字典  B.集成局部E-R图C.将E-R图转换为一组关系模式  D.确定数据存取方法5、将一个一对多联系型转换为一个独立关系模式时,应取()为关键字。A.一端实体型的关键属性  B.多端实体型的关键属性C.两个实体型的关键属性的组合  D.联系型的全体属性6、将一个M对N(M>N)的联系型转换成关系模式时,应()。A.转换为一个独立的关系模式  B.与M端的实体型所对应的关系模式合并C.与N端的实体型所对应的关系模式合并  D.以上都可以7、在从E-R图到关系模式的转化过程中,下列说法错误的是()。A.一个一对一的联系型可以转换为一个独立的关系模式B.一个涉及三个以上实体的多元联系也可以转换为一个独立的关系模式C.对关系模型优化时有些模式可能要进一步分解,有些模式可能要合并D.关系模式的规范化程度越高,查询的效率就越高8、对数据库的物理设计优劣评价的重点是()。 A.时空效率B.动态和静态性能C.用户界面的友好性D.成本和效益9、下列不属于数据库物理结构设计阶段任务的是()。A.确定选用的DBMS  B.确定数据的存放位置C.确定数据的存取方法  D.初步确定系统配置10、确定数据的存储结构和存取方法时,下列策略中()不利于提高查询效率。A.使用索引  B.建立聚簇  C.将表和索引存储在同一磁盘上D.将存取频率高的数据与存取频率低的数据存储在不同磁盘上二、填空题1、在设计分E-R图时,由于各个子系统分别面向不同的应用,所以各个分E-R图之间难免存在冲突,这些冲突主要包括_命名冲突_、_属性冲突_和_结构冲突_三类。2、数据字典中的_数据项_是不可再分的数据单位。3、若在两个局部E-R图中都有实体“零件”的“重量”属性,而所用重量单位分别为公斤和克,则称这两个E-R图存在_属性_冲突。4、设有E-R图如图6.18,其中实体“学生”的关键属性是“学号”,实体“课程”的关键属性是“课程编码”,设将其中联系“选修”转换为关系模式R,则R的关键字应为属性集_学号与课程编码__。图6.18E-R图5、确定数据库的物理结构主要包括三方面内容,即:_确定数据存放位置和存储结构_、_确定数据存取方法_和_系统配置_。6、将关系R中在属性A上具有相同值的元组集中存放在连续的物理块上,称为对关系R基于属性A进行_聚簇_。7、数据库设计的重要特点之一要把_结构(数据)_设计和__行为(处理)_设计密切结合起来,并以_结构(数据)_为核心而展开。8、数据库设计一般分为如下六个阶段:需求分析、__概念结构设计__、__逻辑结构设计__、数据库物理设计、数据库实施、数据库运行与维护。9、概念设计的结果是得到一个与__计算机与DBMS__无关的模型。10、在数据库设计中,__数据字典__是系统各类数据的描述的集合。三、简答题1、数据库设计分为哪几个了阶段?每个阶段的主要工作是什么?解:1)按照规范化的设计方法,以及数据库应用系统开发过程,数据库的设计过程可分为以下六个设计阶段需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施、数据库运行和维护。2)以下是数据库设计六个步骤的具体内容:1、需求分析阶段需求分析是指准确了解和分析用户的需求,这是最困难、最费时、最复杂的一步,但也是最重要的一步。它决定了以后各步设计的速度和质量。需求分析做得不好,可能会导致整个数据库设计返工重做。2、概念结构设计阶段概念结构设计是指对用户的需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,是整个数据库设计的关键。3、逻辑结构设计阶段逻辑结构设计是指将概念模型转换成某个DBMS所支持的数据模型,并对其进行优化。4、物理设计阶段物理设计是指为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。 5、数据库实施阶段数据库实施是指建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。6、数据库运行与维护阶段数据库运行与维护是指对数据库系统实际正常运行使用,并时时进行评价、调整与修改。2、在数据库设计中,需求分析阶段的设计目标是什么?调查的内容主要包括哪几个方面?解:1)需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),通过充分对原系统的工作概况的了解,明确用户的各种需求(数据需求、完整性约束条件、事物处理、和安全性要求等),然后在此基础上确定新系统的功能,新系统必须充分考虑到今后可能的扩充和变化,不能只是仅仅按当前应用需求来设计数据库及其功能要求。数据库需求分析的任务主要包括“数据或信息”和“处理”两个方面:(1)信息要求:指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出各种数据要求。(2)处理要求:指用户有什么处理要求(如响应时间、处理方式等),最终要实现什么处理功能。2)进行需求分析首先是调查清楚用户的实际需求,与用户达成共识。以确定这个目标的功能域和数据域。具体的做法是:(1)调查组织机构情况。包括了解该组织的部门组成情况、各部门的职责等,为分析信息流程做准备。(2)调查各部门的业务活动情况,包括了解各部门输入和使用什么数据,如何加工处理这些数据?输出什么信息?输出到什么部门?输出结果的格式是什么?这是调查的重点。(3)在熟悉业务的基础上,明确用户对新系统的各种要求,如信息要求,处理要求,完全性和完整性要求。因为,用户可能缺少计算机方面的知识,不知道计算机能做什么,不能做什么,从而不能准确的表达自己的需求,另外,数据库设计人员不熟悉用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求,因此设计人员必须不断与用户深入交流,才能完全得到用户的真正要求。(4)确定系统边界。即确定那些活动由计算机和将来由计算机来完成,哪些只能由人工来完成。由计算机完成的功能是新系统应该实现的功能。3、数据库设计的特点是什么?解:数据库设计既是一项涉及多学科的综合性技术,又是一项庞大的工程项目,具有如下特点:(1)数据库建设是硬件、软件和干件(技术和管理的界面)的结合。(2)数据库设计应该与应用系统设计相结合,也就是说要把行为设计和结构设计密切结合起来是一种“反复探寻,逐步求精的过程”。首先从数据模型开始设计,以数据模型为核心进行展开,将数据库设计和应用设计相结合,建立一个完整、独立、共享、冗余小和安全有效的数据库系统。用户通过应用程序访问和操作数据库,用户的行为是和数据库紧密相关的。显然数据库结构设计和行为设计两者必须紧密结合、相互参照进行。4、什么是数据库的概念结构?试述概念结构设计的步骤解:1)将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计,它是整个数据库设计的关键。概念结构设计以用户能理解的形式表达信息为目标,这种表达与数据库系统的具体细节无关,它所涉及的数据独立于DBMS和计算机硬件,可以在任何DBMS和计算机硬件系统中实现。人们提出了许多概念模型,其中最著名、最简单实用的一种是E-R模型,它将现实世界的信息结构统一用属性、实体型以及实体型间的联系来描述。2) 对于自底向上的设计方法来说,概念结构的步骤分为两步(如图6.8所示)①进行数据抽象,设计局部E-R模型②集成各局部E-R模型,形成全局E-R模型图6.8自底向上方法的概念结构设计的步骤以上两步的具体内容略。5、什么是E-R图?构成E-R图的基本要素是什么?解:1)E-R图即是实体-联系图,是信息世界概念模型的一种。2)E-R图提供了表示实体型、属性和联系的方法。实体型:用矩形表示,矩形框内写明实体名。属性:用椭圆表示,椭圆形内写明属性名。并用无向边将其与相应的实体连接起来。联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n)。6、用E-R图表示概念模式有什么好处?解:概念模式是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象。将概念结构设计从设计过程中独立出来,可以带来以下好处:(1)任务相对单一化,设计复杂程度大大降低,便于管理。(2)概念模式不受具体的DBMS的限制,也独立于存储安排和效率方面的考虑,因此,更稳定。(3)概念模型不含具体DBMS所附加的技术细节,更容易被用户理解,因而更能准确的反映用户的信息需求。7、局部E-R图的集成主要解决什么问题?解:局部E-R图的集成主要解决的问题有:1)生成初步E-R图这个步骤将所有的局部E-R图综合成全局概念结构。全局概念结构不仅要支持所有的局部E-R模型,而且必须合理地完成一个完整、一致的数据库概念结构。合并分E-R图时并不能简单地将各个分E-R图画到一起,而是必须着力消除各个分E-R图中不一致的地方,以形成一个能为全系统中所有用户共同理解和接受的统一概念模型。合理消除各分E-R图的冲突是合并局部E-R图的主要工作与关键所在。E-R图中的冲突有3种:属性冲突,命名冲突与结构冲突。(具体不再展开)2)消除不必要的冗余,设计基本E-R图在初步的E-R图中,可能存在冗余的数据和冗余的实体间联系,冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。8、一个图书馆理系统中有如下信息:图书:书号、书名、数量、位置借书人:借书证号、姓名、单位出版社:出版社名、邮编、地址、电话、E-mail其中约定:任何人可以借多种书,任何一种书可以被多个人借,借书和还书时,要登记相应的借书日期和还书日期;一个出版社可以出版多种书籍,同一本书仅为一个出版社所出版,出版社名具有惟一性。根据以上情况,完成如下设计:(1)设计系统的E-R图;(2)将E-R图转换为关系模式; (3)指出转换后的每个关系模式的关系键。解:1)2)与3)(带下划线的为主码)借书人(借书证号,姓名,单位)借阅(借书证号,书号,借书日期,还书日期)图书(书号,书名,数量,位置)出版(书号,出版社名)出版社(出版社名,邮编,地址,电话,E-mail)9、有如下运动队和运动会两个方面的实体:(1)运动队方面运动队:队名、教练姓名、队员姓名。队员:队名、队员姓名、性别、项名。其中,一个运动队有多个队员,一个队员仅属于一个运动队,一个队有一个教练。(2)运动会方面运动队:队编号、队名、教练姓名。项目:项目名、参加运动队编号、队员姓名、性别、比赛场地。其中,一个项目可由多个队参加,一个运动员可参加多个项目,一个项目一个比赛场地。请完成如下设计:①分别设计运动队和运动会两个局部E-R图。②将它们合并为一个全局E-R图③合并时存在什么冲突,你是如何解决这些冲突的?1、局部E-R图1)2)2、全局E-R图或不恰当(不正确的):3、解决的冲突等1)2)合成为:10、设一个海军基地要建立一个舰队管理信息系统,它包括如下两个方面的信息:1)舰队方面信息有:①舰队:舰队名称、基地地点、舰艇数量等;②舰艇:编号、舰艇名称、舰队名称、舰艇编入舰队日期等。2)舰艇方面信息有:①舰艇:舰艇编号、舰艇名、武器名称等;②武器:武器编号、武器名称、武器生产日期、武器被装备日期、武器被使用的舰艇编号等;③ 官兵:官兵证号、姓名、性别、入伍日期、所属舰艇编号、编入舰艇日期、舰艇官兵数量(数量>=10)等。其中,一个舰队有多艘舰艇,一艘舰艇属于一个舰队;一艘舰艇安装多种武器,一种武器可安装于多艘舰艇上;一个官兵只属于一艘舰艇。补充说明:舰艇编队、武器装备是会按形势变化而有所重新调整的。请完成如下设计:(1)综合两方面的信息,设计系统的全局E-R图(含属性),注明联系类型;(2)将全局E-R图转换为关系模式(每个关系模式写成R(U,F)形式,其中R为关系名属性集,U为属性集,F为函数依赖集),要求满足3NF范式以上;(3)指出转换后的每个关系模式的关系键。说明:表名、属性名等均可使用汉字来标识,请多注意属性的确定。答案:(以下解答中红色部分为可选部分,因为其可统计得到)(0)分别设计舰队和舰艇两个局部E-R图武器武器名称武器生产日期舰艇舰艇名舰艇编号官兵官兵证号入伍日期姓名mnm1装备编制 性别编入日期官兵数量装备日期装器编号(1)将上述两个局部E-R图合并为一个全局E-R图,合并时是否存在冲突?如何处理?装器编号装备日期合并时存在冲突,表现在:1)“舰艇编号”和“编号”存在异名同义,合并时统一为“舰艇编号”2)“舰艇名”和“舰艇名称”存在异名同义,合并时统一为“舰艇名称”(2)与(3)将该全局E-R图转换为关系模式(带下划线蓝色标示的为关键字)舰队({舰队名称,基地地点,舰艇数量},{舰队名称→基地地点,舰队名称→舰艇数量})舰艇({舰艇编号,舰艇名称,官兵数量,舰队名称,编队日期},{舰艇编号→(舰艇名称,官兵数量,舰队名称,编队日期)})官兵({官兵证号,姓名,性别,入伍日期,舰艇编号,编入日期},{官兵证号→(姓名,性别,入伍日期,舰艇编号,编入日期)})武器({武器编号,武器名称,武器生产日期},{武器编号→武器名称,武器编号→武器生产日期})装备({舰艇编号,武器编号,装备日期},{(舰艇编号,武器编号)→装备日期})第7章SQLServer2000&2005数据库管理系统本章习题主要为操作题,请参照相应本章各节中介绍的操作方法与操作命令尝试完成习题操作(这里只给出部分参考解答)。操作内容还可以以《数据库原理及应用实验指导》(北邮出版)一书为主。1.计算下列表达式的值。①ABS(-5.5)+SQRT(16)*SQUARE(2)②ROUND(456.789,2)-ROUND(345.678,-2)③SUBSTRING(REPLACE("北京大学","北京","清华"),3,2)④计算今天距离2018年8月1日,还有多少年,多少月,多少日?①21.5②156.790 ③大学④命令为:selectgetdate()as当前日期--获取当前日期selectyear(cast("2018-8-1"asdatetime))-year(getdate())as年数select(year(cast("2018-8-1"asdatetime))-year(getdate()))*12+month(cast("2018-8-1"asdatetime))-month(getdate())as月数SELECTDATEDIFF(day,getdate(),cast("2018-8-1"asdatetime))as天数运行结果为:2.使用WHILE语句求1-100之间的累加和,并输出结果。代码:declare@iinteger,@SMINTEGERSET@i=1SELECT@SM=0WHILE@i<=100BEGINSET@SM=@SM+@iSET@i=@i+1ENDSELECT@SM结果:50503.用T-SQL流程控制语句编写程序,求两个数的最大公约数和最小公倍数。代码为:declare@iinteger,@jINTEGER,@nINTEGER,@mINTEGERdeclare@maxcdinteger,@mincmINTEGERSET@n=36--设一数为SELECT@m=24--设另一数为if@n<@mset@i=@nelseset@i=@mset@maxcd=1set@mincm=@n*@mset@j=1WHILE@j<=@iBEGINif@n%@j=0and@m%@j=0SET@maxcd=@jSET@j=@j+1ENDSELECT@maxcdas最大公约数SELECT@mincm=@mincm/@maxcdSELECT@mincmas最小公倍数结果为:4.用T-SQL流程控制语句编写程序,求斐波那契数列中小于100的所有数(斐波那契数列1,2,3,5,8,13,…)。 代码为:declare@iinteger,@nINTEGER,@mINTEGERdeclare@cstrvarchar(100)SET@n=1--设一数为SELECT@m=2--设另一数为select@nset@cstr=cast(@nasvarchar(2))select@mset@cstr=@cstr+""+cast(@masvarchar(2))WHILE@m+@n<100BEGINset@i=@mset@m=@n+@mset@n=@iselect@mset@cstr=@cstr+""+cast(@masvarchar(2))ENDselect@cstr--显示在一行上结果为:1235813213455895.定义一个用户标量函数,用以实现判断并返回三个数中的最大数。代码为:declare@iinteger,@jINTEGER,@kINTEGER,@maxINTEGERSET@i=rand()*1000--随机产生小于的正整数select@ias"数"SET@j=rand()*1000--随机产生小于的正整数select@jas"数"SET@k=rand()*1000--随机产生小于的正整数select@kas"数"if@i<@jset@max=@jelseset@max=@iif@max<@kset@max=@kselect"最大值为:"as" ",@maxas""结果为:6.请写出实现下面查询操作的T-SQL语句:从SQLServer2005实例数据库AdventureWorks中,查询出销售商品编号(ProductNumber)为BK-M68B-42的雇员的姓名(LastName和FirstName)(模仿7.2.11一节中的游标程序实现本操作)。代码为:UseAdventureWorks;SETNOCOUNTON;DECLARE@FirstNamenvarchar(50),@LastNamenvarchar(50),@iinteger;PRINT"销售BK-M68B-42产品的销售人员有:";set@i=0DECLAREsalesname_cursorCURSORFOR SELECTC.FirstName,C.LastNameFROMPerson.ContactC,Sales.SalesOrderHeaderS,Production.ProductP,Sales.SalesOrderDetailSSwhereP.ProductNumber="BK-M68B-42"andC.ContactID=S.SalesPersonIDandP.ProductID=SS.ProductIDands.SalesOrderID=ss.SalesOrderIDOPENsalesname_cursorFETCHNEXTFROMsalesname_cursorINTO@FirstName,@LastNameIF@@FETCH_STATUS<>0PRINT"<>"WHILE@@FETCH_STATUS=0--若提取成功循环BEGINset@i=@i+1PRINTcast(@iaschar(4))+@FirstName+""+@LastName;FETCHNEXTFROMsalesname_cursorINTO@FirstName,@LastNameENDCLOSEsalesname_cursor;DEALLOCATEsalesname_cursor结果为:有563人,具体略。7.请分别使用交互方式和T-SQL语句创建数据库Student,要创建的数据库的要求如下所示:数据库名称为Student,包含3个20MB的数据库文件,2个10MB的日志文件,创建使用一个自定义文件组,主文件为第一个文件,主文件的后缀名为.mdf,次要文件的后缀名为.ndf;要明确地定义日志文件,日志文件的后缀名为.ldf;自定义文件组包含后两个数据文件,所有的文件都放在目录“C:DATA”中。解:交互方式操作略T-SQL创建命令语句为:CREATEDATABASEstudentONPRIMARY(NAME=student1_dat,FILENAME="C:datastudent1_dat.mdf",SIZE=20,MAXSIZE=50,FILEGROWTH=10%),FILEGROUPstudentGroup1(NAME=studentg2_dat,FILENAME="C:datastudentg2_dat.ndf",SIZE=20,MAXSIZE=50,FILEGROWTH=5),(NAME=studentg3_dat,FILENAME="C:datastudentg3_dat.ndf",SIZE=20,MAXSIZE=50,FILEGROWTH=5)LOGON(NAME="student_log1",FILENAME="C:datastudentlog1.ldf",SIZE=10MB,MAXSIZE=25MB,FILEGROWTH=10%),(NAME="student_log2",FILENAME="C:datastudentlog2.ldf",SIZE=10MB,MAXSIZE=25MB,FILEGROWTH=2MB)8.请使用交互方式完成对某用户数据库的分离与附加操作。解:略9.在JXGL数据库中,创建一个名称为Select_S的存储过程,该存储过程的功能是从数据表S中查询所有女同学的信息,并执行该存储过程。usejxgl--以下略本命令CREATEPROCEDURESelect_SAS SELECT*FROMSWHEREsex="女"GOExecuteSelect_S--执行该存储过程10.定义具有参数的存储过程。在JXGL数据库中,创建一个名称为InsRecToS的存储过程,该存储过程的功能是向S表中插入一条记录,新记录的值由参数提供,如果未提供值给@sex时,由参数的默认值代替。CREATEPROCEDUREInsRecToS(@snochar(5),@snvarchar(8),@sexchar(2)="男",@ageint,@deptvarchar(20))ASINSERTINTOSVALUES(@sno,@sn,@sex,@age,@dept)GOExecuteInsRecToS@sno="S8",@sn="罗兵",@age=18,@dept="信息"--执行该存储过程11.定义能够返回值的存储过程。在JXGL数据库中创建一个名称为Query_S的存储过程。该存储过程的功能是从数据表S中根据学号查询某一学生的姓名和年龄,并返回。CREATEPROCEDUREQuery_S(@Snochar(5),@SNvarchar(8)OUTPUT,@AgesmallintOUTPUT)ASSELECT@sn=sn,@age=ageFROMSWHERESno=@Sno12.对表S创建update触发器TR_S_Age_update,当对表S做update操作时,会自动触发TR_S_Age_update触发器,若入学日期与出生日期年份之差小于8则,取消该次修改操作。--表S中要含有rxrq(入学日期)、csrq(出生日期)createtriggerTR_S_Age_updateonSforupdateasdeclare@iAgeint;select@iAge=year(rxrq)-year(csrq)frominsertedif@iAge<8beginraiserror("入学日期与出生日期年份之差小于8,日期输入可能有误",16,1)rollbacktransactionendcreatetriggerTR_S_Age_update2onSforupdateasdeclare@iAgeint;select@iAge=agefrominsertedif@iAge<8or@iAge>45beginraiserror("学生年龄应该大于等于8,并小于等于45",16,1)rollbacktransactionend13.创建一个触发器,当向S表中更新一条记录时,自动显示S表中的记录。CREATETRIGGERChange_S_SelONSFORINSERT,UPDATE,DELETEASSELECT*FROMS14.请问如下两个触发器的功能。createtriggerTR_C_insertonCforinsertasdeclare@iCTint;select@iCT=CTfrominsertedif@iCT<1or@iCT>10begin raiserror("课程学分应大于等于1,小于等于10。",16,1)rollbacktransactionend功能:对课程表C做添加操作时,若学分小于1或大于10,则说明学分输入有误,该取消该添加或修改操作createtriggerTR_S_deleteonSfordeleteasdeclare@icountintselect@icount=count(*)fromdeleted,scwheredeleted.sno=sc.snoif@icount>=1beginraiserror("该学生在表SC中被引用,暂不能被删除!",16,1)rollbacktransactionend功能:对学生课程S做删除操作时,若该学生还有选修记录存在,则说明还不能做删除操作,应取消该删除操作15.创建数据库COMPANY和数据表(项目数据表和员工数据表)。请使用企业管理器创建下面两个数据表:表B1是项目数据表,表B2是员工数据表,并根据表C1、C2给出的具体内容,进一步对表的结构修改和约束设置。最后向两表中添加数据。数据如表C1、C2所示。表B1项目数据表表B2员工数据表字段名数据类型注释项目编号INT主键名称VARCHAR长度为50负责人INT客户INT开始日期DATETIME结束日期DATETIME字段名数据类型注释编号INT主键姓名VARCHAR长度为50性别CHAR长度为2所属部门VARCHAR长度为50工资MONEY长度为8C1项目数据表项目编号名称负责人客户开始日期结束日期1SIS7106/12/200209/01/20042SIS项目29104/06/200006/12/20023PET19209/01/200404/18/20054PET项目27206/17/200512/21/20055CCH8303/21/200308/01/20046CCH—LXF7301/23/200409/01/20047CCH-ZHS19404/18/200510/17/20058CCH-LY9508/01/200404/18/2005 9PETER4607/11/200405/21/200510NBA4603/06/200509/04/2005C2员工数据表编号姓名性别所属部门工资1成有朋男项目部20002张小青女项目部30003孙晓风男录入部10004慕容雪男检验部15005陈秋平女检验部10006王理冰男检验部20007周晴晴女办公室30008杨亭亭女项目部25009马明宇男项目部400010刘燕女项目部3000解:CREATETABLE项目数据表(项目编号INTPRIMARYKEY,名称VARCHAR(50),负责人INT,客户INT,开始日期DATETIME,结束日期DATETIME)CREATETABLE员工数据表(编号INTPRIMARYKEY,姓名VARCHAR(50),性别CHAR(2),所属部门VARCHAR(50),工资MONEY)根据表数据,进一步对表的结构修改和约束设置后创建两表的命令可为:CREATETABLE项目数据表(项目编号INTIDENTITY(1,1)PRIMARYKEY,名称VARCHAR(50)notnull,--员工数据表中还需补上负责人员工记录负责人INTFOREIGNKEYreferences员工数据表(编号),--假设有客户数据表,并有客户编号属性客户INTFOREIGNKEYreferences客户数据表(客户编号),开始日期DATETIME,结束日期DATETIME,Constraintdate_ccheck(结束日期>开始日期)) CREATETABLE员工数据表(编号INTIDENTITY(1,1)PRIMARYKEY,姓名VARCHAR(50)notnull,性别CHAR(2)notnullcheck(性别IN("男","女")),所属部门VARCHAR(50),工资MONEYcheck(工资>=1000))16.在建立的数据库COMPANY中,基于表“项目数据表”和“员工数据表”创建视图,要求为:1)视图名为“员工项目”;2)包含字段“编号”,“姓名”,“名称”和“开始日期”;3)字段别名分别是“员工编号“,“员工姓名”,“项目名称”,“项目开始日期”;4)使用INSERT语句通过视图向员工数据表中添加一条记录,要求“姓名”字段值为“马中新”;5)执行系统存储过程将视图更名为EMPLOYEEVIEW。解:--本视图两表缺少关联,视图欠佳CREATEVIEW员工项目(员工编号,员工姓名,项目名称,项目开始日期)ASSELECT编号,姓名,名称,开始日期FROM员工数据表,项目数据表INSERTINTO员工项目(员工姓名)VALUES("马中新")--执行可能有问题,视图应含有性别属性execsp_rename"员工项目","EMPLOYEEVIEW","VIEW"--本命令暂不支持修改视图名可,删除—重建来完成,即:DROPVIEW员工项目GOCREATEVIEWEMPLOYEEVIEW(员工编号,员工姓名,项目名称,项目开始日期)ASSELECT编号,姓名,名称,开始日期FROM员工数据表,项目数据表GO17.在“员工数据表”中基于“姓名”创建索引,要求索引名为IDX_NAME,索引为非聚集索引。解:CREATENONCLUSTEREDINDEXIDX_NAMEON员工数据表(姓名)18.在数据库COMPANY中创建存储过程procedure_salarybydept,要求返回某一特定部门所有员工的工资总和,特定部门的名称以存储过程的输入参数进行传递。解:CREATEPROCEDUREprocedure_salarybydept(@deptVARCHAR(50))ASSELECTsum(工资)FROM员工数据表WHERE所属部门=@dept19.表“员工数据表”创建INSERT触发器trigger_newemployeesalary,将插入员工的工资额限制在5000以内。解:CREATETRIGGERtrigger_newemployeesalaryON员工数据表FORinsertASIF(SELECTsum(工资)FROMINSERTEDWHERE工资>5000)>5000BEGINROLLBACKTRANSACTIONPRINT"你输入的员工记录,其工资太高了!."END20.使用企业管理器备份和还原COMPANY数据库。21.利用所学的数据库后台知识,结合以前学习的前台开发工具,创建一个小型的数据库系统,来操作与管理COMPANY数据库。 22.在自己的计算机上安装SQLServer2000或2005或2008的某个版本。23.安装SQLServer2005的示例数据库和示例。24.操作并认识SQLServerManagementStudio窗体界面。25.请用几种不同的方法实现注册数据库服务器与对象资源管理器的连接。26.把“已注册服务器”或“对象资源管理器”组件窗口尽可能多地移到SQLServerManagementStudio的不同区域,并最后恢复原来状态。27.针对不同的数据库建立新查询编辑器文档窗口。28.在SQLServer2005中脱机编写代码,然后连接到不同SQLServer服务器的不同数据库上,尝试执行编写的代码。29.使用模板创建数据库JXGL,查询编辑器连接到数据库JXGL,对另一数据库的某表编写CREATE脚本,把产生的脚本复制到连接到数据库JXGL的查询编辑器中,并执行脚本,完成在数据库JXGL中创建新表的操作(相当于复制了一个新表)。30.认识并操作SQLServer2005配置管理器管理。31.认识并操作SQLServer2005外围应用配置器。32.认识并操作SQLServerProfiler。33.认识并操作数据库引擎优化顾问。34.通过SQLServer2005联机丛书查阅SQLServer2005具有的新特点与新功能。'