数据库系统基础教程第八章答案

合集下载

数据库原理及应用第八章课后习题答案

数据库原理及应用第八章课后习题答案

习题81、什么是数据库的安全性?数据库的安全性是指数据库的任何数据都不允许受到恶意的侵害或未经授权的存取或修改。

主要内涵包括三个方面:①保密性:不允许未经授权的用户存取数据。

②完整性:只允许被授权的用户修改数据。

③可用性:不应拒绝已授权的用户对数据进行存取。

2、什么是数据库的完整性?数据库的完整性是指数据库中数据的正确性和一致性。

数据库的完整性对数据库应用系统非常重要。

3、什么是数据库的完整性约束条件?为了保证数据库中的数据完整性,SQL Server设计了很多数据完整性约束:实体完整性、域完整性、参照完整性、用户定义完整性。

4、DBMS的完整性控制机制应具有哪些功能?1)数据库的完整性约束能够防止合法用户向数据库中添加不合语义的数据。

2)完整性控制机制易于理解,可以降低应用程序的复杂性,提高运行效率。

3)合理的数据完整性设计,能够兼顾数据库的完整性和系统的性能。

完善的数据库完整性,有助于尽早发现应用程序的错误。

5、DBMS在实现参照完整性时需要考虑哪些方面?强制参照完整性时,SQL Server将防止用户执行下列操作:1)在主表中没有关联的记录时,将记录添加或更改到相关表中。

2)更改主表中的值,导致相关表中生成孤立记录。

3)从主表中删除记录,但仍存在于该记录匹配的相关记录。

6、在关系系统中,当操作违反实体完整性、参照完整性和用户定义完整性约束条件时,一般是如何处理的?系统可以采用以下的策略加以处理:1)拒绝(NO ACTION)执行:不允许该操作执行,该策略一般为默认策略。

2)级联(CASCADE)操作:当删除或修改被参照表的一个元组造成了与参照表不一致,则删除或修改参照表中的所有造成不一致的元组。

3)设置为空值(SET-NULL):当删除或修改被参照表的一个元组造成了与参照表不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

7、数据库安全性和计算机系统的安全性有什么关系?计算机系统中,安全措施是一级一级层层设置。

数据库系统概论习题集第八章数据库并发控制

数据库系统概论习题集第八章数据库并发控制

数据库系统概论习题集第⼋章数据库并发控制第⼋章数据库并发控制 ⼀、选择题 1.为了防⽌⼀个⽤户的⼯作不适当地影响另⼀个⽤户,应该采取()。

A. 完整性控制B. 访问控制C. 安全性控制D. 并发控制 2. 解决并发操作带来的数据不⼀致问题普遍采⽤()技术。

A. 封锁B. 存取控制C. 恢复D. 协商 3.下列不属于并发操作带来的问题是()。

A. 丢失修改B. 不可重复读C. 死锁D. 脏读 4. DBMS普遍采⽤()⽅法来保证调度的正确性。

A. 索引B. 授权C. 封锁D. ⽇志 5.事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,这是()。

A. ⼀级封锁协议B. ⼆级封锁协议C. 三级封锁协议D. 零级封锁协议 6.如果事务T获得了数据项Q上的排他锁,则T对Q()。

A. 只能读不能写B. 只能写不能读C. 既可读⼜可写D. 不能读也不能写 7.设事务T1和T2,对数据库中地数据A进⾏操作,可能有如下⼏种情况,请问哪⼀种不会发⽣冲突操作()。

A. T1正在写A,T2要读A B. T1正在写A,T2也要写A C. T1正在读A,T2要写A D. T1正在读A,T2也要读A 8.如果有两个事务,同时对数据库中同⼀数据进⾏操作,不会引起冲突的操作是()。

A. ⼀个是DELETE,⼀个是SELECT B. ⼀个是SELECT,⼀个是DELETE C. 两个都是UPDATE D. 两个都是SELECT 9.在数据库系统中,死锁属于()。

A. 系统故障B. 事务故障C. 介质故障D. 程序故障 选择题答案: (1) D (2) A (3) C (4) C (5) A (6) C (7) D (8) D (9) B ⼆、简答题 1. 在数据库中为什么要并发控制? 答:数据库是共享资源,通常有许多个事务同时在运⾏。

当多个事务并发地存取数据库时就会产⽣同时读取和/或修改同⼀数据的情况。

若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的⼀致性。

数据库第8章习题参考答案

数据库第8章习题参考答案

第8章习题参考答案2.求程序的运行结果(1)Public Sub 习题8_2_1()Dim i As IntegerDebug.Print Tab(10); "*"For i = 1 To 5Debug.Print Tab(10 - i); "*"; Spc(i - 1); "*"; Spc(i - 1); "*"Next iFor i = 4 To 1 Step -1Debug.Print Tab(10 - i); "*"; Spc(i - 1); "*"; Spc(i - 1); "*"Next iDebug.Print Tab(10); "*"End Subrun:***** * ** * ** * ** * ** * ** * ** * *****(2)Public Sub 习题4_2_2()Dim x, y, i As Doublex = 0: y = 0For i = 1 To 8If i Mod 2 <> 0 Thenx = x - iElsey = y + iEnd IfNextDebug.Print "i="; iDebug.Print "x="; xDebug.Print "y="; yEnd Subrun:x=-16y= 20(3)Public Sub习题4_2_3()Dim m, s, k As Doublem = 28s = 0k = 1Do While k <= Int(m / 2)If Int(m / k) = m / k ThenDebug.Print ks = s + kEnd Ifk = k + 1LoopDebug.Print "s="; sEnd Subrun:124714s= 28(4)Public Sub 习题8_2_4()Dim n, a1, a2, a3, i As Doublen = Val(InputBox("请输入n,要求n>=3"))If n <= 2 ThenExit SubEnd Ifa1 = 1a2 = 1Debug.Print a1; a2For i = 2 To n - 1a3 = a1 + a2a1 = a2a2 = a3Debug.Print a3NextEnd Sub1 12353.改错题(1)Public Sub 改错8_3_1()Dim i, n, s As Doublen = Val(InputBox("请输入n"))i = 2: s = 1Do While i <= ns = s + ii = i + 1LoopDebug.Print "S="; sEnd Sub(2)Public Sub 改错8_3_2_求分式多项和()Dim nm, n, k ,p As integerDim y As Doublenm = Val(InputBox("请输入计算公式1后面的项目数目个数")) n = 1: p = 1: y = 1Do While n <= nmk = 2 * n + 1p = p * (k - 1) * ky = y + ((-1) ^ n) / pn = n + 1LoopDebug.Print "y="; yEnd Sub4.编程题(1)用if……else语句编程Public Sub分段函数1()Dim x, y, z As Doublex = Val(InputBox("请输入x的值:"))y = Val(InputBox("请输入y的值:"))If x > y And y <> 0 Thenz = x / yElseIf x = y Thenz = x * y * Sgn(y)Elsez = x + yEnd IfDebug.Print "x="; xDebug.Print "y="; yDebug.Print "z="; zEnd Sub(1)用select case语句结构编程Public Sub分段函数2()Dim x, y, z, a As Doublex = Val(InputBox("请输入x"))y = Val(InputBox("请输入y"))a = y - xSelect Case aCase Is > 0z = x + yDebug.Print zCase 0z = x * y * Sgn(y)Debug.Print zCase ElseIf y <> 0 Thenz = x / yDebug.Print zElseDebug.Print "z没有值"End IfEnd SelectEnd Sub(2)Public Sub 求解一元二次方程()Dim a, b, c As IntegerDim d, x1, x2, x3, x4 As Doublea = Val(InputBox("请输入a的整型数:"))b = Val(InputBox("请输入b的整型数:"))c = Val(InputBox("请输入c的整型数:"))d = b * b - 4 * a * cIf d > 0 Thenx1 = (-b + Sqr(d)) / (2 * a)x2 = (-b - Sqr(d)) / (2 * a)Debug.Print "x1="; x1, "x2="; x2Else if d=0 thenx3 = -b / (2 * a)x4 = -b/ (2 * a)Debug.Print "x3=";x3Debug.Print "x4=";x4ElseDebug.Print "方程没有实数解"End IfEnd Sub(3--1)用无条件转向语句GOTO编程Public Sub 数字与星期的转换1()Dim num As Integer10 num = Val(InputBox("请输入整数值:")) If num = 0 ThenDebug.Print "这是星期日"ElseIf num = 1 ThenDebug.Print "这是星期一"ElseIf num = 2 ThenDebug.Print "这是星期二"ElseIf num = 3 ThenDebug.Print "这是星期三"ElseIf num = 4 ThenDebug.Print "这是星期四"ElseIf num = 5 ThenDebug.Print "这是星期五"ElseIf num = 6 ThenDebug.Print "这是星期六"ElseIf num = -1 ThenDebug.Print "程序运行结束"EndElseDebug.Print "输入数据错误!"GoTo 10End IfEnd Sub(3--2)Public Sub数字与星期的转换2 ()Dim x As IntegerDo While Truex = Val(InputBox("请输入数字"))If x = 0 ThenDebug.Print "这是星期日"Exit DoElseIf x >= 1 And x <= 6 ThenDebug.Print "这是星期" + Str(x)Exit DoElseIf x = -1 ThenExit DoElseMsgBox ("输入数据错误!")End IfLoopEnd Sub(4)Public Sub 行李重量计费()Dim an, cn, weight, s_w, distance, fee As Doublean = Val(InputBox("请输入成年人数量"))cn = Val(InputBox("请输入未成年人数量"))weight = Val(InputBox("请输入行李重量"))distance = Val(InputBox("请输入距离"))s_w = weight - 20 * an - 10 * cnIf s_w <= 0 Thenfee = 0ElseIf distance / 100 = Int(distance / 100) Thenfee = 0.2 * s_w * (distance / 100)Elsefee = 0.2 * s_w * (Int(distance / 100) + 1) End IfEnd IfDebug.Print feeEnd Sub(5)Public Sub 求自然数的多项式和()Dim n, s As Integers = 0For n = 1 To 10s = s + (s + n)NextDebug.Print "S=1+(1+2)+(1+2+3)+...+1+2+3+...+10)="; s End SubRun:S=1+(1+2)+(1+2+3)+...+1+2+3+...+10)= 2036Public Sub 求多项自然数阶乘的和()Dim s, t As SingleDim n As Integert = 1s = 0For n = 1 To 20t = t * ns = s + tNextDebug.Print "1!+2!+3!+...+20!="; sEnd SubRun:1!+2!+3!+...+20!= 2.561327E+18(6)Public Sub 既能被3整除又能被5整除正整数个数() Dim i, x As Integerx = 0For i =100 To 200If i / 3 = Int(i / 3) And i / 5 = Int(i / 5) ThenDebug.Print ix = x + 1End IfNextDebug.Print "x="; xEnd SubRun:120135150165180195x= 7(7)Public Sub 输出直角三角形图案1()Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextFor i = 1 To 4Debug.Print Tab(20); "*";For j = 1 To (2 * i - 2)Debug.Print "*";NextDebug.PrintNextEnd SubRun:****************Public Sub 输出直角三角形图案2() Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextDebug.Print Tab(20); "*";For i = 1 To 4Debug.Print Tab(19 - i); "*";For j = 1 To (i + 1)Debug.Print "*";NextDebug.PrintNextEnd SubRun:*******************Public Sub 输出平行四边形图案() Dim i, j As IntegerFor i = 1 To 9Debug.PrintNextFor i = 1 To 5Debug.Print Tab(21 - i);For j = 1 To 6Debug.Print "*";NextDebug.PrintNextEnd SubRun:******************************(8)Public Sub 求选手获得的平均分()Dim score(1 To 11), minno, maxno, sum, aver As Single Dim i As Integerminno = 1maxno = 1sum = 0For i = 1 To 10score(i) = Val(InputBox("请输入选手的成绩值:")) Debug.Print score(i)NextFor i = 2 To 10If score(i) < score(minno) Thenminno = iEnd IfIf score(i) > score(maxno) Thenmaxno = iEnd IfNext iFor i = 1 To 10sum = sum + score(i)Next isum = sum - score(minno) - score(maxno)aver = sum / 8Debug.Print "该选手的平均分是:"; averEnd Sub(9)关于素数的求解(9-1)求100之内的所有素数Public Sub 求所有素数之和()Dim s, w, n As Integers = 0For w = 2 To 99 Step 2For n = 2 To Sqr(w)If w Mod n = 0 ThenExit ForEnd IfNextIf n > Sqr(w) Thens = s + wEnd IfDebug.Print "S="; sNextEnd Sub(9-2)Public Sub 求200以内的所有素数()Dim w, n As IntegerDebug.Print "200 以内的所有素数是:" For w = 2 To 199For n = 2 To Sqr(w)If w Mod n = 0 ThenExit ForEnd IfNext nIf n > Sqr(w) ThenDebug.Print w;End IfNextDebug.PrintEnd Sub(10)Public Sub 求水仙花数1()Dim i, j, k, n As IntegerDebug.Print "水仙花数是:"For i = 1 To 9For j = 0 To 9For k = 0 To 9n = i * 100 + j * 10 + kIf n = i * i * i + j * j * j + k * k * k ThenDebug.Print n;End IfNext kNext jNext iDebug.PrintEnd SubPublic Sub 求水仙花数2()Dim i, j, k, n As IntegerDebug.Print "水仙花数是:"For n = 150 To 999i = Int(n / 100)j = Int(n / 10 - i * 10)k = n Mod 10If n = i * i * i + j * j * j + k * k * k ThenDebug.Print n;End IfNextDebug.PrintEnd Subrun:水仙花数是:153 370 371 407(11)Public Sub 求分数数列和()Dim i, t, n As IntegerDim a, b, s As Singlen = 20a = 2:b = 1: s = 0For i = 1 To ns = s + a / bt = aa = a + bb = tNextDebug.Print "sum="; s;End Sub(12)Public Sub N年达到的利息()Dim y As IntegerDim interest1,interest As DoubleP=10000y = 0interest = 0Do Until interest >= 1000Interest1 =2*p* 0.0225 *(1-0.2) ‘一期2年整存整取扣税后的利息p=p+interest1 ‘扣税后的利息加上本金成为新一期的本金Interest=p-10000 ‘存款以来实际所的利息y = y + 2Debug.Print interest, yLoopEnd SubRun:360 2732.959999999999 4 1119.34656 6。

数据库原理与应用教程第四版 第八章答案

数据库原理与应用教程第四版 第八章答案

免责声明:私人学习之余整理,如有错漏,概不负责1.简述数据库设计过程。

需求分析、结构设计、行为设计、数据库实施、数据库库运行和维护2.数据库结构设计包含哪几个过程?概念结构、逻辑结构和物理机构3.需求分析中发现事实的方法有哪些?检查文档、面谈、观察业务的运转、研究、问卷调查4.数据库概念结构设计有哪些特点?丰富的语义表达能力、易于交流和理解、易于更改、易于向各种数据模型转换5.什么是数据库的逻辑结构设计?简述其设计步骤。

将概念设计产生的概念模型转换为具体的数据库管理系统支持的组织层数据模型概念结构转换为关系数据模型、对关系数据模型进行优化、设计面向用户的外模式6.把E-R模型转换为关系模式的转换规则有哪些?1)一个实体转换为一个关系模式2)1对1联系可以转换为独立的关系模式,也可以与任意一端对应的关系模式合并3)1对多联系可以转换为独立的关系模式,也可以与多端所对应的关系模式合并4)多对多联系必须转换为独立的关系模式5)三个或三个以上实体间的多元联系可以转换为一个关系模式6)具有相同主码的关系模式可以合并7.数据模型的优化包含哪些方法?1)确定各属性间的函数依赖关系2)对各个关系模式之间的书依赖进行极小化处理,消除冗余联系3)判断每个关系模式的范式,根据实际需要确定最合适的范式4)根据需求分析阶段得到的处理要求,确定是否对某些模式进行分解或合并8.合并为一个E-R图,转为符合第三范式的关系模式,说明主码外码关系模式如下(主码有下划线):职工(职工编号,姓名,性别,年龄,职务,部门)外码:部门部门(部门号,部门名,电话,地点)设备(设备号,名称,规格,价格,部门)外码:部门零件(零件号,零件名,规格,价格)厂商(厂商号,厂商名,电话,地址)生产表(厂商号,零件号,生产日期)外码:厂商号,零件号装备表(设备号,零件号,零件数量)外码:设备号,零件号9.建立描述顾客在商店的购物情况的数据库应用系统,该系统有如下要求:商店和顾客多对多,顾客每次购物有购物金额和购物日期,,每个客户每天在每个商店最多一次购物。

数据库系统原理教程课后习题及答案(第八章)

数据库系统原理教程课后习题及答案(第八章)

第8章关系查询处理和查询优化1 .试述查询优化在关系数据库系统中的重要性和可能性。

答:重要性:关系系统的查询优化既是RDBMS 实现的关键技术又是关系系统的优点所在。

它减轻了用户选择存取路径的负担。

用户只要提出“干什么”,不必指出“怎么干”。

查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化’夕做得更好。

可能性:这是因为:( l )优化器可以从数据字典中获取许多统计信息,例如关系中的元组数、关系中每个属性值的分布情况、这些属性上是否有索引、是什么索引(B +树索引还是HASH 索引或惟一索引或组合索引)等。

优化器可以根据这些信息选择有效的执行计划,而用户程序则难以获得这些信息。

( 2 )如果数据库的物理统计信息改变了,系统可以自动对查询进行重新优化以选择相适应的执行计划。

在非关系系统中必须重写程序,而重写程序在实际应用中往往是不太可能的。

( 3 )优化器可以考虑数十甚至数百种不同的执行计划,从中选出较优的一个,而程序员一般只能考虑有限的几种可能性。

( 4 )优化器中包括了很多复杂的优化技术,这些优化技术往往只有最好的程序员才能掌握。

系统的自动优化相当于使得所有人都拥有这些优化技术。

2 .对学生一课程数据库有如下的查询:SEI 王CT Cn 即ne FROM Student , Cou 拐e , SC WHERE Student . Sno = SC . Sno AND SC . Cllo = Coll 拐e . Cllo AND Stu 击nt . Sdept = ! 15 ! ; 此查询要求信息系学生选修了的所有课程名称。

试画出用关系代数表示的语法树,并用关系代数表达式优化算法对原始的语法树进行优化处理,画出优化后的标准语法树。

答:3 .试述查询优化的一般准则。

答:下面的优化策略一般能提高查询效率:( l )选择运算应尽可能先做;( 2 )把投影运算和选择运算同时进行;( 3 )把投影同其前或其后的双目运算结合起来执行;( 4 )把某些选择同在它前面要执行的笛卡儿积结合起来成为一个连接运算;( 5 )找出公共子表达式;( 6 )选取合适的连接算法。

实用数据库系统开发 第八章 课后习题答案

实用数据库系统开发 第八章 课后习题答案

第八章教材jxsk8.1.1.1CREATE PROCEDURE Pro_Qsinf@Sno_in char(8)=’S2’,@Sname_out char(8) output,@Age_out int output,@Dept_out char(10) outputAs select @Sname_out=Sname,@Age_out=age,@Dept_out=deptFrom Student where sno=@Sno_inGO8.1.1.2USE jxskdeclare @Sno_in char(8),@Sname_out nvarchar(255),@Age_out int,@Dept_out nvarchar(255)exec Pro_Qsinf default,@Sname_out output,@Age_out output,@Dept_out outputprint @Sname_outprint @Age_outprint @Dept_outselect @Sno_in='S4'exec Pro_Qsinf @Sno_in,@Sname_out output,@Age_out output,@Dept_out outputprint @Sname_outprint @Age_outprint @Dept_outGo8.1.2.1USE jxskCREATE Procedure Pro_Qscore@Sname_in nvarchar(255),@Cname_in nvarchar(255),@Score_out float outputAs select @Score_out=Score from Student,Course,SCwhere Student.Sno=SC.Sno and o=o and Sname=@Sname_in and Cname=@Cname_in8.1.2.2USE jxskdeclare @Sname_in nvarchar(255),@Cname_in nvarchar(255),@Score_out floatselect @Sname_in='李思'select @Cname_in='程序设计'exec Pro_Qscore @Sname_in,@Cname_in,@Score_out outputprint Rtrim(@Sname_in)+'='+Ltrim(str(@Score_out))Go8.2.1CREATE PROCEDURE Pro_Qsinf@Sno_in char(2)='S2',@Sname_out char(8) output,@Age_out tinyint output,@Dept_out char(10) outputAs select @Sname_out=Sname,@Age_out=age,@Dept_out=deptfrom Student where sno=@Sno_inGO8.2.2Alter Procedure Pro_Qsinf@Sno_in char(2)='S1',@Sname_out char(8) output,@Sex_out char(2) output,@Dept_out char(10) outputASSelect @Sname_out=Sname,@Sex_out=Sex,@Dept_out=Deptfrom Student where Sno=@Sno_inGo8.3.2USE jxskDrop procedure Pro_QscoreGO习题Jiaoxuedb1.CREATE Procedure Pro_Qstuin@Sname_in char(8),@Cname_out char(8),@Score_out float,@Tname_out char(8) output AS select @Cname_out=Cname,@Score_out=Score,@Tname_out=Tnamefrom Student,Course,SC,Teacherwhere Student.Sno=SC.Sno and o=oand Sname=@Sname_inGO2.Create Procedure Pro_Qexage@Dept_in char(8),@Maxage_out float(8),@Minage_out float(8) outputAS select @Maxage_out=max(Age),@Minage_out=min(Age) from Studentwhere Dept=@Dept_inGO3.CREATE Procedure Pro_Qscore@Sname_in char(8),@Cname_in char(8),@Score_out float outputAs select @Score_out=Score from Student,Course,SCwhere Student.Sno=SC.Sno and o=oand Sname=@Sname_in and Cname=@Cname_inGO4.CREATE Procedure Pro_Qcount@Prof_in char(8),@count_out tinyint outputAs select @count_out=count(Tno) from Teacherwhere Prof=@Prof_ingroup by Profdeclare @Prof_in char(8),@count_out tinyintselect @Prof_in='副教授'exec Pro_Qcount @Prof_in,@count_out outputprint Rtrim(@Prof_in)+'='+Ltrim(str(@count_out))GO5.CREATE Procedure Pro_Qtdata@Prof_in char(8),@count_out tinyint,@Avgage_out int,@Avgsal_out float,@Maxsal_out float outputAs select @count_out=count(Tno),@Avgage_out=avg(Age),@Avgsal_out=avg(Sal),@Maxsal_out=max( Sal) from Teacherwhere Prof=@Prof_ingroup by ProfGO6.CREATE Procedure Pro_Qdept@dept_in char(16) ,@tcount_out int,@tavgage_out int,@scount_out int As select @tcount_out=count(Tno),@tavgage_out=avg(Teacher.Age),@scount_out=count(Sno) from Teacher,Studentwhere Teacher.Dept=@dept_in and Teacher.Dept=Student.Deptgroup by Teacher.DeptGO7.CREATE Procedure Pro_Qsc@Cname_in char(8),@Sname_out char(8),@dept_out char(16),@score_out float As select @Sname_out=Sname,@dept_out=Dept,@score_out=Score from Student,SC,Coursewhere o=o and SC.Sno=Student.Sno and Cname=@Cname_in GOdeclare @Cname_in char(8),@Sname_out char(8),@dept_out char(16),@score_out float select @Cname_in='程序设计'exec Pro_Qsc @Sname_out,@dept_out,@score_outprint Rtrim(@Cname_in)+' '+Ltrim(str(@Sname_out))+' '+Ltrim(str(@dept_out))+' '+Ltrim(str(@score_out))GO8.use jiaoxuedbCREATE Procedure Pro_Qstc@tname_in char(8),@cname_in char(8),@tcname_out char(8),@thour_out int,@ccount_out int,@avgscore_out int,@maxscore_out intas select @cname_out =Cname,@thour_out=sum(Chour),@ccount_out=count(Sno),@avgscore_out=avg(Score),@m axscore=max(Score)from Course,SC,TCwhere Tname=@tname_in,Cname=@cname_ingroup by CnoGOdeclare @tname_in char(8),@cname_in char(8),@tcname_out char(8),@thour_out int,@ccount_out int,@avgscore_out int,@maxscore_out intselect @tname_in='赵策'select @cname_in='计算机网络'exec Pro_Qstc @tname_in, @cname_in, @tcname_out, @thour_out, @ccount_out, @avgscore_out, @maxscore_outprint Rtrim(@tname_in)+' '+Ltrim(@cname_in)+' '+Ltrim(@tcname_out)+' '+Ltrim(@thour_out)+' '+Ltrim(@ccount_out)+' '+Ltrim(@avgscore_out)+''+Ltrim(@maxscore_out)GO8.Drop Procedure Pro_QstuinGO9.Drop Procedure Pro_QscoreDrop Procedure Pro_QcountGO。

数据库系统概论 第七到八章 习题及答案

数据库系统概论  第七到八章 习题及答案

第七、八章习题一、选择题:1.下面哪个不是数据库系统必须提供的数据控制功能____。

A.安全性B.可移植性C.完整性D.并发控制答案:B2.保护数据库,防止未经授权的或不合法的使用造成的数据泄漏、更改破坏。

这是指数据的____。

A.安全性B.完整性C.并发控制D.恢复答案:A3.数据库的____是指数据的正确性和相容性。

A.安全性B.完整性C.并发控制D.恢复答案:B4.在数据系统中,对存取权限的定义称为____。

A.命令B.授权C.定义D.审计答案:B5.数据库管理系统通常提供授权功能来控制不同用户访问数据的权限,这主要是为了实现数据库的____。

A.可靠性B.一致性C.完整性D.安全性答案:D6.授权编译系统和合法性检查机制一起组成了____子系统。

A.安全性B.完整性C.并发控制D.恢复答案:A7.____是DBMS的基本单位,它是用户定义的一组逻辑一致的程序序列。

A.程序B.命令C.事务D.文件答案:C8.事务的原子性是指____。

A.事务中包括的所有操作要么都做,要么都不做B.事务一旦提交,对数据库的改变是永久的C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的D.事务必须是使数据库从一个一致性状态变到另一个一致性状态答案:A9.事务是数据库进行的基本工作单位。

如果一个事务执行成功,则全部更新提交;如果一个事务执行失败,则已做过的更新被恢复原状,好像整个事务从未有过这些更新,这样保持了数据库处于____状态。

A.安全性B.一致性C.完整性D.可靠性答案:B10.事务的一致性是指____。

A.事务中包括的所有操作要么都做,要么都不做B.事务一旦提交,对数据库的改变是永久的C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的D.事务必须是使数据库从一个一致性状态变到另一个一致性状态答案:D11.事务的隔离性是指____。

A.事务中包括的所有操作要么都做,要么都不做B.事务一旦提交,对数据库的改变是永久的C.一个事务内部的操作及使用的数据对并发的其他事务是隔离的D.事务必须是使数据库从一个一致性状态变到另一个一致性状态答案:C12.事务的持续性是指____。

数据库系统原理(2018年版)课后习题参考答案解析

数据库系统原理(2018年版)课后习题参考答案解析
第三代数据库系统必须支持数据管理、对象管理和知识管理
第三代数据库系统必须保持或集成第二代数据库系统技术
第三代数据库系统必须对其他系统开放
2.描述数据仓库粒度的概念P182
粒度是指数据仓库数据单位中保存数据的细化或综合程度
3.描述数据挖掘技术的能P183
概念描述
关联分析
分类与预测
聚类
孤立点检测
趋势和演变分析
视图的内容是由存储在数据库中进行查询操作的SQL语句定义的,它的列数据与行数据均来自于定义视图的查询所引用的基本表。
视图不适宜数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的基本表中的。
视图是用来查看存储在别处的数据的一种虚拟表,本身不存储数据。
第五章 数据库编程
简答题
1.请简述存储过程的概念P125
答:参照完整性约束是指:若属性或属性组F是基本关系R的外码,与基本关系S的主码K相对应,则对于R中每个元组在F上的取值只允许有两种可能,要么是空值,要么与S中某个元组的主码值对应。
3.请简述关系规范化过程。
答:对于存在数据冗余、插入异常、删除异常问题的关系模式,应采取将一个关系模式分解为多个关系模式的方法进行处理。一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式,这就是所谓的规范化过程。
数据库系统是指在计算机中引入数据库技术之后的系统,包括数据库、数据库管理系统及相关实用工具、应用程序、数据库管理员和用户。
2.请简述早数据库管理技术中,与人工管理、文件系统相比,数据库系统的优点。
数据共享性高
数据冗余小
易于保证数据一致性
数据独立性高
可以实施统一管理与控制
减少了应用程序开发与维护的工作量
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Section 1Exercise 8.1.1a)CREATE VIEW RichExec ASSELECT * FROM MovieExec WHERE netWorth >= 10000000;b)CREATE VIEW StudioPres (name, address, cert#) ASSELECT , MovieExec.address, MovieExec.cert# FROM MovieExec, Studio WHERE MovieExec.cert# = Studio.presC#;c)CREATE VIEW ExecutiveStar (name, address, gender, birthdate, cert#, netWorth) AS SELECT , star.address, star.gender, star.birthdate, exec.cert#, WorthFROM MovieStar star, MovieExec exec WHERE = ANDstar.address = exec.address;Exercise 8.1.2a)SELECT name from ExecutiveStar WHERE gender = ‘f’;b)SELECT from RichExec, StudioPres where = ;c)SELECT from ExecutiveStar, StudioPresWHERE Worth >= 50000000 ANDStudioPres.cert# = RichExec.cert#;Section 2Exercise 8.2.1The views RichExec and StudioPres are updatable; however, the StudioPres view needs to be created with a subquery.CREATE VIEW StudioPres (name, address, cert#) ASSELECT , MovieExec.address, MovieExec.cert# FROM MovieExecWHERE MovieExec.cert# IN (SELECT presCt# from Studio);Exercise 8.2.2a) Yes, the view is updatable.b)CREATE TRIGGER DisneyComedyInsertINSTEAD OF INSERT ON DisneyComediesREFERENCING NEW ROW AS NewRowFOR EACH ROWINSERT INTO Movies(title, year, length, studioName, genre)VALUES(NewRow.title, NewRow.year, NewYear.length, ‘Disney’, ‘comedy’);c)CREATE TRIGGER DisneyComedyUpdateINSTEAD OF UPDATE ON DisneyComediesREFERENCING NEW ROW AS NewRowFOR EACH ROWUPDATE Movies SET length NewRow.lengthWHERE title = NewRow.title AND year = NEWROW.year ANDstudionName = ‘Disney’ AND genre = ‘comedy’;Exercise 8.2.3a) No, the view is not updatable since it is constructed from two different relations.b)CREATE TRIGGER NewPCInsertINSTEAD OF INSERT ON NewPCREFERENCING NEW ROW AS NewRowFOR EACH ROW(INSERT INTO Product VALUES(NewRow.maker, NewRow.model, ‘pc’))(INSERT INTO PC VALUES(NewRow.model, NewRow.speed, NewRow.ram, NewRow.hd, NewRow.price));c)CREATE TRIGGER NewPCUpdateINSTEAD OF UPDATE ON NewPCREFERENCING NEW ROW AS NewRowFOR EACH ROWUPDATE PC SET price = NewPC.price where model = NewPC.model;d)CREATE TRIGGER NewPCDeleteINSTEAD OF DELETE ON NeePCREFERENCING OLD ROW AS OldRowFOR EACH ROW(DELETE FROM Product WHERE model = OldRow.model)(DELETE FROM PC where model = OldRow.model);Section 3Exercise 8.3.1a)CREATE INDEX NameIndex on Studio(name);b)CREATE INDEX AddressIndex on MovieExec(address);c)CREATE INDEX GenreIndex on Movies(genre, length);Section 4Exercise 8.4.1Exercise 8.4.2Q1 = SELECT * FROM Ships WHERE name = n;Q2 = SELECT * FROM Ships WHERE class = c;Q3 = SELECT * FROM Ships WHERE launched = y;I = InsertsIndexesNone Name Class Launched Name & Name & Class & ThreeSection 5Exercise 8.5.1Updates to movies that involves title or yearUPDATE MovieProd SET title = ‘newTitle’ where title=’oldTitle’ AND year = oldYear; UPDATE MovieProd SET year = newYear where title=’oldYitle’ AND year = oldYear;Update to MovieExec involving cert#DELETE FROM MovieProdWHERE (title, year) IN (SELECT title, yearFROM Movies, MovieExecWHERE cert# = oldCert# AND cert# = producerC#);INSERT INTO MovieProdSELECT title, year, nameFROM Movies, MovieExecWHERE cert# = newCert# AND cert# = producerC#;Exercise 8.5.2Insertions, deletions, and updates to the base tables Product and PC would require a modification of the materialized view.Insertions into Product with type equal to ‘pc’:INSERT INTO NewPCSELECT maker, model, speed, ram, hd, price FROM Product, PC WHEREProduct.model = newModel and Product.model = PC.model;Insertions into PC:INSERT INTO NewPCSELECT maker, ‘newModel’, ‘newSpeed’, ‘newRam’, ‘newHd’, ‘newPrice’FROM Product WHERE model = ‘newModel’;Deletions from Product with type equal to ‘pc’:DELETE FROM NewPC WHERE maker = ‘deletedMaker’ AND model=’deletedModel’; Deletions from PC:DELETE FROM NewPC WHERE model = ‘deletedModel’;Updates to PC:Update NewPC SET speed=PC.speed, ram=PC.ram, hd=PC.hd, price=PC.price FROM PC where model=pc.model;Update to the attribute ‘model’ needs to be treated as a delete and an insert. Updates to Product:Any changes to a Product tuple whose type is ‘pc’ need to be treated as a delete or an insert, or both.Exercise 8.5.3Modifications to the base tables that would require a modification to the materialized view: inserts and deletes from Ships, deletes from class, updates to a Class’ displacement. Deletions from Ship:UPDATE ShipStats SETdisplacement=((displacement * count) –(SELECT displacementFROM ClasssesWHERE class = ‘DeletedShipClass’)) / (count – 1),count = count – 1WHEREcountry = (SELECT country FROM C lasses WHERE class=’DeletedShipClass’); Insertions into Ship:Update ShipStat SETdisplacement=((displacement*count) +(SELECT displacement FROM ClassesWHERE class=’InsertedShipClass’)) / (count + 1),count = count + 1WHEREcountry = (SELECT country FROM Classes WHERE classes=’InsertedShipClass); Deletes from Classes:NumRowsDeleted = SELECT count(*) FROM ships WHERE class = ‘DeletedClass’; UPDATE ShipStats SETdisplacement = (displacement * count) - (DeletedClassDisplacement *NumRowsDeleted)) / (count – NumRowsDeleted),count = count – NumRowsDeletedWHERE country = ‘DeletedClassCountry’;Update to a Class’ displacement:N = SELECT count(*) FROM Ships where class = ‘UpdatedClass’;UPDATE ShipsStat SETdisplacement = ((displacement * count) + ((oldDisplacement – newDisplacement) * N))/countWHEREc ountry = ‘UpdatedClassCountry’;Exercise 8.5.4Queries that can be rewritten with the materialized view:Names of stars of movies produced by a certain producerSELECT starNameFROM StarsIn, Movies, MovieExecWHERE movieTitle = title AND movieYear = year AND producerC# = cert# AND name = ‘Max Bialystock’;Movies produced by a certain producerSELECT title, yearFROM Movies, MovieExecWhere produce rC# = cert# AND name = ‘George Lucas’;Names of producers that a certain star has worked withSELECT nameFROM Movies, MovieExec, StarsInWhere producerC#=cert# AND title=movieTitle AND year=movieYear AND starName=’Carrie Fisher’;The number of movies produced by given producerSELECT count(*)FROM Movies, MovieExecWHER E producerC#=cert# AND name = ‘George Lucas‘;Names of producers who also starred in their own moviesSELECT nameFROM Movies, StarsIn, MovieExecWHERE producerC#=cert# AND movieTitle = title AND movieYear = year AND = starName;The number of stars that have starred in movies produced by a certain producer SELECT count(DISTINCT starName)FROM Movies, StarsIn, MovieExecWHERE producerC#=cert# AND movieTitle = title AND movieYear = year AND n ame ‘George Lucas’;The number of movies produced by each producerSELECT name, count(*)FROM Movies, MovieExecWHERE producerC#=cert# GROUP BY name。

相关文档
最新文档