《数据库原理与应用》复习题.docx
二、简答题(每小题5分,共20分)(1)数据库系统主要有哪几方面的特点?数据结构化。数据库系统实现整体的结构化,即在数据库系统中,数据面向全组织,可以支持许多应用;不仅数据内部是结构化的,而且数据之间是具有联系的,整体是结构化的。数据的共享性高,冗余度低,易扩充。数据库的数据可以被多个用户、多个应用,用多种不同的程序设计语言共享使用,而且容易增加新的应用,这就使得数据库系统易于扩充。数据共享可以大大减少数据冗余,节约存储空间,同时还能够避免数据之间的不相容性与不一致性。数据独立性高。数据独立性包括数据的物理独立性和数据的逻辑独立性。数据独立性是指数据和程序相互不依赖。即数据的逻辑结构或物理改变了,程序不会跟着改变。数据由DBMS统一管理和控制。数据库的共享是并发的共享,即多个用户可以同时存取数据,库中的数据甚至可以同时存取数据库中同一个数据。为此,DBMS必须提供统一的数据控制功能,包括:数据的安全性保护、数据的完整性检查、并发控制和数据库恢复。(2)DBMS的主要功能有哪些?数据库定义功能;数据组织、存储和管理功能;数据操纵功能;数据库的事务管理和运行管理;数据库的建立和维护功能;其他功能。(3)数据库系统中有哪三级模式结构?采用这种结构的优点是什么?数据库系统的三级模式结构由外模式、模式和内模式组成。外模式,亦称子模式或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。模式,亦称逻辑模式,是数据库全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式描述的是数据的全局逻辑结构。外模式通常是模式的子集。内模式,亦称存储模式,是数据在数据库系统内部的表示,即对数据的物理结构和存储方式的描述。为了能够在内部实现这三个抽象层次的联系和转换,数据库系统在这三级模式之间提供了两级映像;外模式/模式映像和模式/内模式映像。正是这两级映像保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。(4)试述实现数据库安全性控制的常用方法和技术?用户身份鉴别:系统提供多种方式让用户标识自己的名字或身份。用户要使用数据系统时,由系统进行核对,通过鉴定后才可以使用数据库。多层存取控制:系统提供用户权限定义和合法权限检查功能,用户只有获得某种权限才能访问数据库中的某些数据。视图机制:为不同的用户定义不同的视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动对数据提供一定程度的安全保护。审计一:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中,审计员可以利用审计信息重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。数据加密:对存储和传输的数据进行加密处理,从而使不知道解密算法的人无法获知数据的内容。(5)DBMS的完整性控制机制应具有哪三个方面的功能?定义功能,即提供定义完整性约束条件的机制。检查功能,即检查用户发出的操作请求是否违背了完整性约束条件。违约处理功能:如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。(6)数据库设计的基本步骤通常划分为哪六个阶段?需求分析;概念结构设计;逻辑结构设计数据库物理结构设计数据库实施;数据库运行和维护。(7)简述数据库设计过程中形成的数据库的各级模式?在概念结构设计阶段形成的概念模式,即E-R图。在逻辑结构设计阶段将E-R图转换成数据模型,形成数据库逻辑模式;然后在基本表的基础上再建立必要的视图,形成数据的外模式。在数据库物理结构设计阶段根据DBMS特点和处理的需要进行物理存储安排,建立索引,形成数据的内模式。(8)需求分析阶段的设计目标是什么?调查的内容是什么?需求分析阶段的设计目标是通过详细调杳现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。调查的内容是“数据”和“处理”,即获得用户对数据库的如下要求:信息要求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求。处理要求。指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理。安全性与完整性要求。(9)试述事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性?事务是用户定义的一个数据库操作序列,这些操作要么全做、要么全不做,是个不可分割的工作单位。事务具有4个特性:原子性(Atomicity)、一致性(Consistency)隔离性(Isolation)和持续性(Durability)o这4个特性也简称为ACID特性。原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个致性状态。持续性:持续性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。故障恢复可以保证事务的原子性与持续性。(10)什么是数据库镜像?它有什么用途?数据库镜像即根据DBA的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据复制过去,即DBMS自动保存镜像数据与主数据的一致性。用于数据恢复。当出现介质故障时,镜像磁盘可继续使用,同时DBMS自动利用镜像磁盘数据进行数据库的恢复,不需要关闭和重装数据库副本。提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排他锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。(三)在数据库中为什么要并发控制?并发控制技术能保证事务的哪些特性?数据库是共享资源,通常有多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。并发控制可以保证事务的一致性和隔离性。(12)并发操作可能会产生哪几类数据不一致?试详细说明。用什么方法能避免各种不一致的情况?并发操作带来的数据不一致包括三类:丢失修改两个事务和Z读入同一数据并修改,工提交的结果破坏(覆盖)了提交的结果,导致Tl的修改被丢失。不可重复读不可重复读是指事务Tl读取某一数据后,事务T2对其执行更新操作,使Tl无法再现前一次读取结果。读“脏”数据读“脏”数据是指事务Ti修改某一数据,并将其写回磁盘,事务T2读取同一数据后,3由于某种原因被撤销,这时Tl已修改过的数据恢复原值,Tz读至的数据就与数据库中的数据不一致,则丁2读到的数据就为“脏”数据,即不正确的数据。避免不一致性的方法就是并发控制。(13)什么是封锁?基本的封锁类型有界几种?试述它们的含义。封锁就是事务T在对某个数据对象(表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新或读取此数据对象。基本的封锁类型两种:排他锁(X锁)和共享锁(S锁)排他锁又称写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A0共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对做任何修改。(14)如何用封锁机制保证数据的一致性?DBMS在对数据进行读写之前首先对该数据执行封锁操作。例如图事务Tl在对A进行修改之前先对A加X锁。这样,当T2请求对A加X锁时就被拒绝,T2只能等待11释放A上的锁后才能获得对A的X锁,这时它读到的A是11更新后的值,再按此新值的A进行运算。这样就不会丢失Tl的更新。DBMS按照一定的封锁协议对并发操作进行控制,使得多个并发操作有序地执行,就可以避免丢失修改、不可重复读和读“脏”数据等数据不一致性。三、T-SQL应用题(25分)注意:课本相应的例题、课后习题,请参照下列题复习总结1、有学生一课程关系数据库,各关系表描述如下,并用TSQL语句实现下列问题:StudentCnoCnameTeacherCl操作系统李明C2大学物理赵华C3电子商务周亮SnoCnoGradeS07001Cl76S07002C282S07003C365列名说明数据类型约束Sno学号字符(8)主键Sname姓名字符(12)非空,唯一Ssex性别字符(2)取,男喊,女默认值女Sage年龄短整型取值1623,默认值21Sdept院系字符(20)默认电子系CourseSC(1)用关系代数表达式表示下列问题:1)检索选修了课程号为C5的学生学号、年龄和院系;11学号,斗曲院系(StudentX(11mC5,(SC)或FI学比年龄,院系(3«程号=C5,(SCCXStudent)2)检索选修了教师'李华'所授课程的学生姓名和学号;11<*学号(StudentXI(SCX(6?读数师=+(Course)或¼名,字号(O投瀛BtMi/华,(StudentCXlSCXCOUrSe)(2)用T-SQL语句实现下列问题:1)创建StUdent表;CREATETABLEStudent(SnoCHAR(8)PRIMARYKEY,SnameCHAR(12)NOTNULLUNIQUE,SsexCHR(2)CHECK(SSeXin('男','女')DEFAULT'女',SageINTCHECK(Sage>=16ANDSage<=23)DEFAULT21,SdeptCHAR(20)DEFAULT,电子系');2)检索姓"李"且倒数第2个字为“华”或“涛"字的学生的姓名和学号;SELECTSname,SnoFROMStudentWHERESnameLIKE'李华涛_;3)向StUdent表中插入元组“S07060,王梅”,并写出该记录的详细信息。INSERTINTOStudent(Sno,Sname)VALUES(飞07060,'王梅,)该记录详细信息如下:S07060王梅女21电子系4)删除选课成绩在45分以下的学生记录。DELETEFROMStudentWHERESNOIN(SELECTSNOFROMSCWHEREGRDE<45);5)把“网络工程”课程成绩提高8%。UPDATESCSETGrade=Grade*1.08WHERECnoIN(SELECTCnoFROMCourseWHERECname='网络工程'):6)求出女同学的每一年龄组(超过4人)有多少人?要求查询结果按人数升序排歹J,人数相同的按年龄降序排列。SELECTSage,COUNT(Sno)FROMStudentWHERESsex='女'GROUPBYSageHAVINGCOUNT(Sno)>47)定义视图S_AVG,其中包括学生学号以及每个学生选修课程的门数(要求成绩非空)和平均成绩。CREATEVIEWS_age(Sno,Cno_num,Avg_grade)ASSELECTSno,COUNT(Cno),AVG(grade)FROMSCWHEREgradeISNOTNULLGROUPBYSno8)在S表中删除院系字段列。ALTERTABLEStudentDROPCLUMNSdept2、有学生一课程关系数据库,各关系表描述如下:Student列名说明数据类型约束Sno学号字符(8)主键Sname姓名字符(8)非空,唯一Ssex性别字符(2)取男'或'女',默认值女Sage年龄整型取值1640,默认值21Sdept院系字符(20)默认,电子系,Course列名说明数据类型约束Cno课程号字符(8)主键Cname课程名字符(12)非空Teacher教师名字符(10)唯一SC列名说明数据类型约束Sno学号字符(8)主键,参照StUdent表,级联更新和删除Cno课程号字符(8)主键,参照CoUrSe表,级联更新,拒绝删除Grade成绩短整型取值。100(1)用关系代数表达式表示下列问题1)检索选修了教师'王敏'所授课程的学生姓名和学号;眺名,学号(StudentX(SCX(邯忸x王除(CoUrSe)或¼名,学号(83收(StudentXSCXlCourse)2)检索选修了课程号为C3或者C5的学生学号和成绩;IkqJMl(ChMw=Cr(SC)(w=*c5,(SC)(2)用T-SQL语句实现下列问题1)创建StUdent表;CREATETABLEStudent(SnoCHAR(8)PRIMARYKEY,SnameCHAR(8)NOTNULLUNIQUE,SsexCHR(2)CHECK(Ssexin('男','女')DEFAULT'女',SageINTCHECK(STage>=16ANDSTage<=40)DEFAULT21,SdeptCHAR(20)DEFAULT,电子系');2)检索姓李且倒数第2个字为华或涛字的学生的姓名和学号;SELECTSname,SnoFROMStudentWHERESnameLIKE'李%华涛_';3)向学生选修课程表中插入元组“学生S6选修课程号C2”。INSERTINTOSC(Sno,Cno)VALUES('S6','C2')4)删除选课成绩在60分以下的学生记录;DELETEFROMStudentWHERESNOIN(SELECTSNOFROMSCWHEREGRADE<60);或DELETEFROMStudentWHEREStudent.SNO=SC.SNOANDSC.GRADE<60;5)把“大学英语”课程成绩提高5%;UPDATESCSETGradC二GradC*1.05WHERECnoIN(SELECTCnoFROMCourseWHERECname=,大学英语')6)求出男同学的每一年龄组(超过4人)有多少人?要求查询结果按人数降序排列,人数相同的按年龄升序排列;SELECTSage,COUNT(Sno)FROMStudentWHERESex='男'GROUPBYSageHAVINGCOUNT(Sno)>4ORDERBY2DESC,SageSC其中ASC也可以省略不写7)定义视图S_age,其中包括学生学号以及每个学生选修课程的门数(要求成绩非空)和平均成绩;CREATEVIEWS_age(Sno,Cno_num,Avggrade)ASSELECTSno,COUNT(Cno),AVG(grade)FROMSCWHEREgradeISNOTNULLGROUPBYSno8)在S表中删除院系字段列。ALTERTABLEStudentDROPCLUMNSdept3、设有学生-课程关系数据库,其数据库关系模式为:学生SC(学号Sn0,姓名SnanIc,所在系SdCPt,年龄Sage,性别SSCX)课程COUrSe(课程号Cno,课程名称Cname,先修课号Cpno,学分Ccredit)学生选课SC(学号Sno,课程号Cno,成绩Grade)1.试用关系代数、SQL语言分别写出下列查询:(9x3分)(1)查询选修了3号或6号课程的学生的学号(2)查询至少选修了一门其直接先行课为8号课程的学生学号与姓名(3)查询选修了全部课程的学生学号、姓名和年龄关系代数:(1) 11sno(cno=*3,Vcno-6(SC)(2) 11Sno,Sname(OCPrK)='8'(CoUrSO)XSeXSudcnt)(3) 11Sno,Sname,Sage(StudentX(11Sno,Cno(SC)÷11Cno(Course)SQL:(1) SELECTsnoFROMSCWHEREcno=,3,orcno=,6,(2) SELECTSno,SnameFROMStudent,SC,CourseHrHERECourse.Cno=SC.CnoANDSC.Sno=Student.SnoANDCourse,cpno=,8,(3)SELECTSno,Sname,SageFROMStudentWHERENOTEXISTS(SELECT*FROMCourseX阳ERENOTEXISTS(SELECT*FROMSCYWHEREY.Cno=X.CnoANDY.Sno=Student.Sno)4.试用SQL语言写出下列查询:(3x4分)(1)查询没有选修2号课程的学生学号与姓名(2)查询选修了3门以上课程并且成绩均及格的学生学号与其平均成绩(3)将计算机科学系(CS)全体学生的所有成绩置为零(1) SELECTsno,snameEROMstudentWHEREstudent,snoNOTIN(SELECTSC.snoFROMSCWheresno=*2,)(2) SELECTSname,AVG(Grage)EROMSCWheregrade>=60GROUPBYSnoHAVINGCOUNT(Cno)>3(3) updateSCsetgrade=OWHERESC.snoIN(SELECTstudent,snoEROMstudentWHERESdePI='CS')5.