(完整版)07-08(1)数据库原理期末考试试卷A_参考答案
- 格式:doc
- 大小:67.01 KB
- 文档页数:5
《数据库原理》试卷A
参考答案及评分标准
一、单项选择题(本大题共12小题,每题2分,共24分)
在每小题列出的四个备选项中只有一个是符合题目要求的,错选、多选或未选均无分。
(1-5)BCCAD (6-10)DCBAD (11-12)DA
二、填空(每空格1分,共20分)
1、①数据库系统
2、①数据操作②完整性约束(顺序可调)
3、①(商店号,商品号)②商店号,商品号
4、①元组关系演算②域关系演算(顺序可调)
5、① distinct
6、①自主存取控制②强制存取控制(顺序不可调)
7、①Foreign Key ②References
8、①deleted ②inserted(顺序不可调)
9、①用户定义
10、①数据定义②数据控制(顺序可调)
11、①一致性②隔离性(顺序可调)
12、①存在回路
三、判断题(本大题共10小题,每题1分,共10分)
1、√
2、X
3、X
4、√
5、X
6、X
7、X
8、√
9、X 10、√
四、简答题(本大题共2小题,共16分)
1、
(1)不对,属于“丢失修改”的错误,即把甲写回的数据丢失了。
----3分
(2)两种,甲乙或者乙甲,调度的结果均为20。
----3分
2、
(1) R(职工名,项目名,工资,部门号,部门名,部门经理)不是一个好的关系模式,因为:
通过图中关系依赖图可以发现其码为(职工号,项目名)
①插入异常
假设职工号为07102,部门号为S1的职工还未参加项目,因项目名是主属性,因此该学生的信息无法插入R。
②删除异常
假定某个职工本来只参加了项目名为“三建”的一个工程。
现在因某种原因,他连“三建”工程也不参加了。
因项目名是主属性,此操作将导致该学生信息的整个元组都要删除。
③数据冗余度大
如果一个职工参加了10个工程,那么他的部门名称和部门经理的值就要重复存储了10次。
④修改复杂
例如由于某种原因,某职工要改变所参与的项目,在修改此职工元组的项目名的同时,还可能需要修改其部门号,部门名称和部门经理。
如果这个职工参加了K个工程,则必须无遗漏地修改K个元组中全部部门号,部门名称和部门经理信息。
------共5分,可以分开介绍,也可以集中介绍,可以只分析其中的一点或几点。
(2)职工名,项目名,工资,部门号,部门名,部门经理
由于部门名,部门经理部分函数依赖于码,因此该模式只满足第一范式,所以采用投影分解法将一个1NF的关系分解为多个2NF的关系,即:SLC分解为两个关系模式,以消除这些部分函数依赖
R1(职工名,项目名,工资)∈2NF
R2(项目名,部门号,部门名,部门经理)∈2NF
但是2NF关系模式R2中,部门名和部门经理传递函数依赖于项目名,即R2中存在非主属性对码的传递函数依赖。
所以进一步把SL分解为两个关系模式,以消除传递函数依赖:
R2(项目名,部门号)∈3NF
R3(部门号,部门名,部门经理)∈3NF
五、设计题(本大题共2小题,共30分)
1、试用SQL语句完成下列操作:(共16分,其中(1)-(4)每题3分,(5)小题4分)(1)查找供应商S3的名称和所在城市。
ΠSname,City (σsno=‘S3‘(S))
——————3分
(2)找出使用名为“精益”的供应商所供零件的工程号码。
Select distinct Jno
from SPJ
where sno in
(select sno from S
where sname=’精益’)
——————3分
(3)求由供应商S1所供应的工程的预算总额。
Select sum(budget)
from J
where Jno in
(select jno from spj
where sno=’s1’)
——————3分
(4)由S5供给J4的零件P6改为由S3供应,请作必要的修改。
Update spj set sno=’S3’ where sno=’S5’ and Jno=’J4’ and Pno=’P6’——————
3分
(5)找出北京的任何供应商都不供应的零件的零件号。
Select distinct Pno
from spj
where not exists
(select * from S
where sno=spj.sno and city=’北京’)
——————4分
2、(共14分)
要统计数据库原理课程的学生的成绩分布,因此先建立表Rank,其中第一列division 显示成绩分段划分,第二列number 显示的是成绩在该分数段的学生人数。
1)建立Rank 表。
CREATE TABLE Rank(
division CHAR(20),
number INT); (2分)
2)编写存储过程。
CREATE PROCEDURE statistic_mark(@name CHAR(50))
--存储过程带有一个字符型参数值,便于统计不同科目的分数分布情况AS
DECLARE
@less60 INT , --分为五个分数段,并置初始值为0
@b60a70 INT ,
@b70a80 INT,
@b80a90 INT,
@more90 INT,
@curcno CHAR(4); --设字符型变量curcno 存放对应于@name的课程号
(3分)
--并置初始值为0
set @less60=0
set @b60a70=0
set @b70a80=0
set @b80a90=0
set @more90=0
set @curcno=''
SELECT @curcno=cno FROM Course WHERE cname =@name;
--根据课程名称在Course 表中查询查询该课程号
IF @curcno is null --如果不存在用户输入的课程名称,返回错误信息RAISE EXCEPTION '输入错误,没有该课程';
raiserror('输入错误,没有该课程',16,1)
else
begin
SELECT @less60=count(*) FROM sc WHERE cno = @curcno AND grade < 60;
SELECT @b60a70=count(*) FROM sc WHERE cno = @curcno AND grade >= 60 AND
grade < 70;
SELECT @b70a80=count(*) FROM sc WHERE cno = @curcno AND grade >= 70
AND grade < 80;
SELECT @b80a90=count(*) FROM sc WHERE cno = @curcno AND grade >= 80
AND grade < 90;
SELECT @more90=count(*) FROM sc WHERE cno = @curcno AND grade >= 90;
(5分)
--向表Rank 中插入五条记录,显示成绩分布情况
INSERT INTO Rank VALUES('[0,60)',@less60);
INSERT INTO Rank VALUES('[60,70)',@b60a70);
INSERT INTO Rank VALUES('[70,80)',@b70a80);
INSERT INTO Rank VALUES('[80,90)',@b80a90);
INSERT INTO Rank VALUES('[90,100]',@more90);
end;
(2分)
--------------12分
(2)执行存储过程
EXECUTE STATISTIC_MARK @NAME='数据库原理';
SELECT * FROM Rank.。