数据库系统系统原理试卷(一)
一、 选择题(20分,每小题2分)
1. 要保证数据库逻辑数据独立性,需要修改的是: C A.模式 B.C.模式与外模式的映射 D.
2.设关系R(A,B,C)和S(A,D),与自然连接R S等价的关系代数表达式是: D
A.σR.A=S.A(R×S) B. R S R.A=S.A
C. ∏R,A ,B.C,D(R×S) D. ∏B,C,S.A,D(σR.A=S.A(R×S))
3. 若某关系R(A, B, C, D)有函数依赖AB→C, C→D, D→A,那么R的所有超键的数量
是: D
A.3 B.4 C.6 D.7
4. 设关系R和S的结构相同,且各有100个元组,那么这两个关系的并操作结果的元组的个数为: B
A.200 B.小于等于200 C.100 D.小于等于100 5. 与操作“AGE NOT BETWEEN 15 AND 20”等价的式子是: D A.AGE >= 15 AND AGE <= 20 B.AGE <= 15 OR AGE >= 20 C.AGE > 15 AND AGE < 20 D.AGE < 15 OR AGE >20
6.关系prodsales(salesman,prodid,prodname,quantity,amount)表示销售员所销售
商品情况:销售员、货号、品名、销售数量及销售金额。一名销售员可销售多种商品,一种商品可由多名销售员销售。该关系违背下列最低范式是: B
A.1NF B.2NF C.3NF D.BCNF
7. 在DB技术,未提交的随后被撤消了的数据,称为: A
A. 脏数据 B. 报废的数据 C.过时的数据 D.撤消的数据
8. 设有关系模式R(A,B,C),F是R上成立的函数依赖集,F={A→B,C→B},将关系R
分解为R1(A,B)和R2(A,C),则分解后的函数依赖集为: D
A.依然保持原有的函数依赖集 B.丢失了A→B
C.丢失了B→C D.丢失了C→B 9.在数据库中,如果有8个不同实体集,它们之间存在着10个不同的二元联系(二元关系是指两个不同实体集间的联系),其中4个1∶N联系,6个M∶N联系,那么根据ER模型转换成关系模型的规则,这个ER结构转换成关系模式个数是: C A.8 B.12 C.14 D.18 10. 下面哪一种指令能撤销用户的授权: B
A Grant B Revoke C Commit D Privilege
二、填空题(10分,每小题2分)
1. 数据按 外模式 的描述提供给用户,按内模式的描述存储在磁盘中,而概念模式
提供了连接这两级的相对稳定的中间观点,并使得两级中任何一级的改变都不受另
1
一级的牵制。
2. 判断一个并发调度是否正确,可用 并发事务的可串行化 概念来衡量。 3. 在SQL语句中,与操作符“IN”等价的操作符是 =SOME 。 4. 缓冲区管理程序是由DBMS的 存储管理程序 实现的。
5. 在DBA给予某用户权限时,为让该用户可向其他用户授权,应加上的授权语句为
WITH GRANT OPTION 。
三、 名词解释(10分,每小题2分)
1.级联:当删除或修改参照表的一个元组造成了与参照表的不一致,则删除或修改参照表中所有造成不一致的元祖。[P.155]
2.属性集的闭包:设F为属性集U上的一组函数依赖,X,Y U, ={A|X→A能由F
根据Armstrong公理导出}, 称为属性集X关于函数依赖集F的闭包。[p.184] 3.最小函数依赖集:每一个函数依赖集F均等价于一个极小函数依赖集Fm。此Fm称为F的最小依赖集。[P.186]
4.外连接:将舍弃的元祖也保存在结果关系中,而在其他属性上填空值(Null),这种连接就叫做外连接。[P.58]
5.事务的持久性:指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
接下来的其它操作或故障不应该对其执行结果有任何影响。[P.279]
四、简答题(20分,前面3小题,每小题4分,最后一小题8分)
1. 设有关系R(A,B,C)和S(C,D,E),其元组如下所示:
计算∏B,E(R S),结果为:
A B C C D E B E 4 7 5 2 4 3 2 5 7 6 6 6 7 8 9 6 5 3 1 8 9 7 8 6 2 图A-1 解:结果如图A-1所示。
2. DBMS的完整性子系统主要功能是什么?
解:DBMS的完整性子系统主要功能有两个
⑴ 监督事务的执行,并测试是否违反了完整性规则。 ⑵ 若有违反则采取恰当的动作,如拒绝、报告违反情况、改正错误等方法来处理。
3. 设教学数据库中有三个基本表:
S(SNO,SNAME, AGE, SEX),其属性分别表示学号、学生姓名、年龄、性别。
2
C(CNO, CNAME, TEACHER),其属性分别表示课程号、课程名、上课教师名。 SC(SNO,CNO,GRADE),其属性分别表示学号、课程号、成绩。
试解释下列SQL语句的语义:
CREATE ASSERTION ASSE8 CHECK (30>=ALL(SELECT COUNT(SC.SNO) FROM S,SC
WHERE S.SNO=SC.SNO AND SEX=’F’ GROUP BY CNO));
解:这是一个断言,表示在关系S和SC中的数据应满足下列条件:
每门课程中的女同学选修人数最多是30人。
(注意:不能写成“每一个女同学选修课程的门数最多是30门”)
4.假设某商业集团数据库中有一关系模式R如下:
R (商店编号,商品编号,数量,部门编号,负责人) 如果规定:(1) 每个商店的每种商品只在一个部门销售; (2) 每个商店的每个部门只有一个负责人; (3) 每个商店的每种商品只有一个库存数量。 试回答下列问题:
(1) 根据上述规定,写出关系模式R的基本函数依赖; (2) 找出关系模式R的候选码;
(3) 试问关系模式R最高已经达到第几范式?为什么? 解:
⑴ R的基本函数依赖为
(商店编号,商品编号) →部门编号
(商店编号,部门编号) →负责人 (商店编号,商品编号) →数量
⑵ R的候选码是 (商店编号,商品编号)
⑶ 因为R中存在着非主属性“负责人”对候选码 (商店编号、商品编号)的传递函
数依赖,所以R属于2NF,R不属于3NF。
五、设计题(24分,每小题3分)
现有关系数据库如下:
学生(学号,姓名,性别,专业,奖学金)
课程(课程号,名称,学分); 学习(学号,课程号,分数) 用关系代数表达式实现下列1—4小题:
1.检索获得奖学金的所有学生所学课程的信息,包括学号、姓名、课程名和分数; 2.检索学习课程号为C2或C4的学生学号和姓名;
3.检索至少学习课程号为C2和C4的学生信息,包括学号、姓名和专业;
3
4.检索具有相同姓名的所有学生的信息,包括学号、姓名和专业。 用SQL语言实现下列5—8小题:
5.检索没有获得奖学金的所有学生所学课程的信息,包括学号、姓名、课程名和分数; 6.检索具有相同姓名的所有学生的信息,包括学号、姓名和专业;
7.对成绩没有不及格的学生,如果已经获得奖学金的,将奖学金再增加5%; 8.定义所学课程包含S3同学所学课程的学生学号的视图AAA。 解:
1.∏学号,姓名,课程名,分数 (σ
2.∏课程号,名称 ( σ
课号
奖学金>0 ( 学生 课程 学习 ) )
= ’C2 ’ OR 课号 = ’C4 ’ ( 学生 学习 ) )
3.∏学号,姓名,专业 ( 学生s1.学号=学生.学号 (σs1.课号 = ’C2’ AND s2.课号 = ’C4’ AND s1.学
号
= s2.学号 ( ρs1 ( 学习 ) × ρs2 ( 学习 ) ) ) )
4.∏学号,姓名,专业 ( σs1.学号<>s2.学号 AND s1.姓名= s1.姓名 ( ρs1 ( 学生 ) ρs2 ( 学
生 ) ) )
5. SELECT学生.学号,姓名,课程,和分数 FROM 学生,学习,课程
WHERE 学生.学号=学习.学号 AND 学习. 课程号=课程.课程号 AND 奖学金>0;
6. SELECT distinct s1.学号, s1.姓名, s1.专业 FROM 学生 as s1,学生 as s2
WHERE s1.学号< s2.学号 and s1.姓名<>s2.姓名
7. UPDATE 学生
SET 奖学金=奖学金*1.05 WHERE 学号not IN (SELECT 学号 FROM 学习
WHERE 分数<60);
8. CREATE VIEW AAA AS
SELECT DISTINCT 学号 FROM 学习 AS X WHERE NOT EXISTS (SELECT *
FROM 学习 AS Y
WHERE Y.SNO=’S3’ AND NOT EXISTS
4
(SELECT *
FROM 学习 AS Z
WHERE Z.SNO=X.SNO AND Z.CNO=Y.CNO))
六、综合题(16分,第1题4分,第2题3分,后面每小题3分)
为某图书发行公司开发一个会员制网上图书订购数据库系统,该系统的基本需求如下:
该公司分为多个下属部门(Department),如“社科部”,“文艺部”,“计算机部”等。每个部门有若干销售员(Salesman),每个销售员有唯一的员工号(如“S0025”)和身份证号,也包含性别、出生日期、电话等信息。一个销售员仅属于一个部门,且每个部门有一个销售员担任部门经理。部门和人员可以动态调整。
1. 管理注册会员(Member):身份证号、姓名、性别、地址、邮编、电话等。可注册新会员(只有会员才能参与订购图书),也可注销旧会员。
2. 管理所有销售的图书(Book):书名(如“数据库系统基础教程”等)、种类(如“计算
机”等)、书号ISBN (如“7-302-03646-2等)、作者(也包括译者,如“史嘉权”)、出版社(如“清华大学出版社”)、定价等。
3. 一个销售订单(Salesorder)表示一笔销售业务。每个订单有一个订单编号和签订日
期,且对应一个会员和一个销售员(作为订单经办人)。一个订单至少销售一种图书,每种图书应确定其销售数量和销售价格(销售价格通常低于定价),以计算销售金额。
按次序回答下列问题:
1. 用若干E/R图建立该系统的数据库模型。为每个实体集确定其键属性,并确定每个
联系的多重性。注意弱实体集的表示。 解:E-R图如下:
empididnonamememidnameidnonameas headerDepartmendeptidworks forSalesmanganderbirthphonememberganderaddressphonesales forsigndateordernoSalesorderBookISBNBNametypeauthorpublishersingle_pricecontainspricelinenoSalesitemquartityunit of
2. 由E/R模型建立该系统的关系模式,并确定每个关系的主键和可能的外键。注意各
5
关系中的函数依赖和多值依赖,并使你的关系能符合更高范式。
解:数据库模式
Dpartment(id,name,head_id,desc)
Salesman(empid,name,idNo,gender,birthdate,phone,dept_id) Menber(memid,name,idno,gander,address,phone) Book(bName,type,ISBN,Author,publisher,price) Sales_order(order#,signdate,sales_id,memid)
Sales_item(order#,line#,ISBN,quantity,single_price)
外键
Dpartment(head_id) →Salesman(empid) Salesman(dept_id) →Dpartment(dept_id) Sales_order(sales_id) →Salesman(empid) Sales_order(memid) →Member(id)
Sales_item(order#) →Sales_order(order#) Sales_item(ISBN) →Book(ISBN)
3. 使用SQL语言完成下面的计算:
1) 计算2001年12月签订的所有订单的订单号、签单日期、销售数量和销售金额,并按销售金额从小到大排列。
2) 计算2001年12月签订的销售金额最大的订单号、销售员姓名和销售金额。(注意
利用已有查询定义视图)
3) 计算2001年12月所有销售员的员工号、姓名及其销售金额。(注意使用外连接,
没有订单的销售员的销售金额应为0)
解:
(1)select Sales_order.order#, signdate,sum(quantity),sum(quantity* single_price) as
cost
from Sales_order inner join Sales_item on Sales_order.order#=Sales_item.order#
where signdate>=’2001-12-01’ and signdate<=’2001-12-31’
group by order.order#, signdate order by cost
(2) create view V1 as
select sales_order. sales_id, order#,sum(quantity*single_price) as COST
from sales_order inner join sales_item on sales_order.order#= Sales_item.order#
where signdate>=’2001-12-01’ and signdate<=’2001-12-31’
group by sales_order, sales_id selectorder#, name, cost
from Salesman inner join V1 on empid= sales_id where cost >=all (select max(cost) from V1)
(3) select empid, name, sum(quantity*single_price) as cost
from Salesman left outer join (sales_order inner join sales_item on sales_order.order#= Sales_item.order#) on empid=sales_id
where signdate>=’2001-12-01’ and signdate<=’2001-12-31’
6