数据库概论(AI-2019.12)复习参考答案
一、(单项选择题)红色字体为参考答案
1. 区分不同类型数据库管理系统的依据是………………………………………………(
)
[A] 数据模型
[B] 数据库语言
[C] 数据库厂商
[D] 数据库用户
2. 在关系模型中,约束规则‘First Normal Form Rule’的含义是 ………………(
)
[A] 属性值的原子性
[C] 元组的唯一性
[B] 关键字值的唯一性
[D] 属性值的唯一性
3. 设有两个关系模式 R(A,B,C)和 S(C,D),在下述关系代数表达式中,能够正确运算的是(
)
[A] R∪S
[B] R∩S
[C] R join S
[D] R÷S
4. 在下列关系代数的二元运算中,属于基本运算的是………………………………………(
)
[A] 自然联接
[B] 笛卡尔乘积
[C] θ-联接
[D] 外联接
5. 设有关系模式 R(A, F),A 为关系 R 的属性集合,F 为关系 R 上的函数依赖集。如果 R1(A1,F1)
和 R2(A2,F2)构成关系 R 的一个分解,该分解具有无损联接性的含义是……………(
[A] R = R1 JOIN R2
[D] F+ = (F1 ∪ F2)+
[B] A = A1 ∪ A2
[C] F = F1 ∪ F2
)
6. 在使用游标(cursor)实现数据交换的过程中,获取下一条结果元组的命令是 ………(
)
[A] DECLARE
[B] OPEN
[C] CLOSE
[D] FETCH
7. 在视图(view)定义命令中,在视图对应的子查询中不能使用的是…………………(
)
[A] 统计函数
[B] GROUP BY 子句
[C] HAVING 子句
[D] ORDER BY 子句
8. 在基表创建命令中,如果要定义约束“当存在外键引用关系时,不允许删除主键对应表中的元
组”,则在外键定义子句中需要使用如下的约束定义成分……………………………(
)
[A] ON DELETE ALL
[C] ON DELETE RESTRICT
[B] ON DELETE CASCADE
[D] ON DELETE SET NULL
9. 在扩充实体联系(EER)模型中,如果一个实体 E 必须依赖于另一个实体才能存在,那么实体
E 被称为…………………………………………………………………………………(
[A] 子实体
[D] 组合实体
[B] 超实体
[C] 弱实体
)
10. 用于撤销一个事务的事务控制命令是……………………………………………………(
)
[A] CHECKPOINT
[B] COMMIT
[C] ROLLBACK
[D] SAVEPOINT
二、(多项选择题)红色字体为参考答案,每小题有且仅有 2 个正确选项。
1. 在下述情况中,查询结果集中肯定不会出现重复元组的是…………………(
)
[A] 在 SELECT 子句中使用 DISTINCT 保留字
[C] 多表连接查询
[D] 使用 GROUP BY 子句
[B] 单表查询
[E] 使用 ORDER BY 子句
5-1
2. 在一条不含子查询的 SQL 查询命令中,可以使用 SQL 统计函数的子句是--(
)
[A] SELECT
[B] FROM
[C] WHERE
[D] GROUP BY
(E) HAVING
3. 在 SQL 语言中,与谓词‘IN’相等价的比较运算是 -------------------------------(
)
[A] =SOME
[B] =ALL
[C] =ANY
[D] <>SOME
(E) <>ALL
4. 对关系数据库进行规范化设计的目的是 --------------------------------------------(
)
[A] 减少关系个数
[D] 减少每个关系中的元组个数
(E) 提高数据库系统的安全性
5. 根据关系数据库规范化设计理论,在下列描述中,正确的有------------------(
[B] 降低数据冗余
[C] 消除操作异常
)
[A] 如果关系 R 能够满足 BCNF,那么该关系一定满足 3NF;
[B] 如果关系 R 能够满足 3NF,那么该关系一定满足 BCNF;
[C] 如果关系 R 中的非主属性集为空,那么该关系一定满足 BCNF;
[D] 如果关系 R 中的非主属性集为空,那么该关系一定满足 3NF;
[E] 如果关系 R 中的函数依赖集为空,那么该关系最高只能满足到 1NF;
三、(关系代数)
设有一个公司产品销售数据库,其关系模式如下:
顾 客 C ( 编号 cid, 姓名 cname, 城市 city, 折扣 discnt )
供应商A ( 编号 aid, 名称 aname, 城市 city )
商 品P ( 编号 pid, 名称 pname, 城市 city , 单价 price)
订 单O ( 编号 ordno, 顾客编号 cid, 供应商编号 aid, 商品编号 pid,
订购数量 qty, 销售金额 dols )
其中:可以根据订单编号 ordno 的大小来区分订单的前后,编号小的订单在前。
请用关系代数表示下述的查询操作请求。
1) 查询满足下述条件的商品的编号和名称:被‘南京’市的顾客购买过
((C
where
city
'
'
南京
)[cid]
join
O
join
pname]
P)[pid,
2) 查询满足下述条件的供应商的名字:仅仅向供应商所在城市中的顾客销售过商品
(((O[aid]
(((C
A)
C.city
where
A.city)[ai
d,
cid]
join
)
O)[aid]
join
A)[aname]
3) 查询满足下述条件的供应商的编号和名字:向‘南京’市的所有顾客销售过所有单价超过
1 元的商品
A)[aid,
join
(O
aname,
cid,
pid]
((C
where
city
'
南京
)'
(P
where
price
1))[C.cid,
P.pid]
4) 查询每一个客户的最后一份订单,结果返回客户 cid 及其最后一份订单的 ordno
令 R := O
O[cid,
ordno]
((R
O)
where
R.cid
O.cid
R.ordno
O.ordno)[R
.cid,
R.ordno]
5)查询满足下述条件的供应商的编号和名字:向自己所在城市中的所有顾客都销售过商品
(A
join
(O[aid]
((A
join
C)[aid,
cid]
O[aid,
5-2
cid])[aid]
)
)[aid,
aname]
四、(SQL)
设有一个公司产品销售数据库,其关系模式如下:
顾 客 C ( 编号 cid, 姓名 cname, 城市 city, 折扣 discnt )
供应商 A ( 编号 aid, 名称 aname, 城市 city )
商 品 P ( 编号 pid, 名称 pname, 库存数量 quantity, 单价 price )
订 单 O ( 编号 ordno, 订单日期 orddate, 顾客编号 cid, 供应商编号 aid,
商品编号 pid, 销售数量 qty, 销售金额 dols )
(注:可以用 SQL 函数 YEAR(orddate)返回订单的年份)
1、请用 SQL 语言创建一个用于统计顾客的年度累计购买金额的视图,视图名为 CustSum,视图
中的属性包括:顾客的编号 cid,顾客的姓名 cname, 购买年份,年度累计购买金额 total_dols。
①先创建第一个视图 custyear,将订单中的订单日期转换为年份:
create view custyear(ordno, cid, cyear, dols) as
select ordno, cid, year(orddate), dols from O ;
②再利用视图 custyear 来创建顾客年度累计购买金额视图:
create view custsum(cid, cname, cyear, total_dols) as
select C.cid, C.cname, y.cyear, sum(y.dols)
from C, custyear y
where C.cid=y.cid
group by C.cid, C.cname, y.cyear ;
2、请用 SQL 语言表示下述的查询操作。
1) 查询满足下述条件的供应商的名字:仅仅向供应商自己所在城市中的顾客销售过商品
select aname from A where aid in (select x.aid from O x) and
not exists(select * from O y, C where y.aid=A.aid and y.cid=C.cid and A.city<>C.city);
2) 统计查询每一个供应商的累计销售金额,结果返回供应商编号及其累计销售金额,并按照累计
销售金额从高到低降序输出查询结果。
select aid, sum(dols) from O group by aid order by sum(dols) DESC;
3) 查询在 2019 年度累计购买金额超过 100000 元的顾客的编号和名称。
select C.cid, C.cname from O, C where O.cid=C.cid and year(O.orddate)=2019
group by C.cid, C.cname having sum(O.dols)>100000;
4) 查询满足下述条件的供应商的编号和名字:向‘南京’市的所有顾客销售过所有单价超过 1 元
的商品
select aid, aname from A where not exists(
select * from C, P where C.city=’南京’ and P.price>1 and not exists(
select * from O where O.aid=A.aid and O.cid=C.cid and O.pid=P.pid));
5) 查询每一个顾客的第一份订单和最后一份订单,结果返回顾客的编号、第一份订单的订单编号
和订单日期、最后一份订单的订单编号和订单日期(注:用订单编号的大小区分订单的先后,
不需要返回没有订单的客户,如果一个客户只有唯一一份订单,那么该订单既是其第一份订单
也是最后一份订单)
select x.cid, x.ordno as f_ordno, x.orddate as f_date, y.ordno as l_ordno, y.orddate as l_date
from O x, O y
where x.cid=y.cid and x.ordno<=y.ordno
and
not exists(select * from O where O.cid=x.cid and O.ordnoy.ordno) ;
and
5-3
五、(关系规范化设计)
1. 给定关系模式 R(A,B,C,D,E,F,G)及其上的函数依赖集 S = { ABD→AC, C→BDE,
AD→BF, B→E },请完成以下的规范化设计。
1) 请直接写出与 F 等价的最小函数依赖集。
{ AD→CF, C→BD, B→E }
2) 请直接给出关系模式 R 的所有候选关键字。
两个候选关键字: ACG 和 ADG
3) 请将关系模式 R 直接分解到满足 3NF,并满足无损联接性和依赖保持性。
R1(A,C,D,F)
注:也可以选择关键字 ADG 来构成分解后的关系 R4,即 R4(A, D, G)
R4(A, C, G)
R2(B,C,D)
R3(B, E)
4) 上述的分解是否满足 BCNF?如果不满足,请将其进一步分解到满足 BCNF。
R1 不满足 BCNF,可将 R1 进一步分解为 R11(C, D) 和 R12(A, C, F)
由于 R11 的关系模式是关系 R2 的关系模式的真子集,因此可以将 R11 合并到 R2 中去,
R12 作为分解后新的 R1 关系。最终到 BCNF 的分解结果如下:
关键字
函数依赖集
子关系模式
R1 ( A, C, F )
R2 ( B, C, D )
R3 ( B, E )
R4 ( A, C, G )
AC→F
C→BD
B→E
∕
AC
C
B
ACG
2. 设有一个民用航空飞行实时调度关系 P,其中的属性有:飞机编号 fj_no,航班编号 hb_no,经
停机场的机场编号 jc_no、实际到达时间 arr_time 及实际起飞时间 off_time。
其中:①允许多个航班共享同一架飞机;②一架飞机在飞行过程中可以停靠多个机场,并
记录在机场的实际到达时间和实际起飞时间;③在一个机场,可以同时起飞或降落多架飞机。
1) 请写出该关系上的最小函数依赖集。
hb_no→fj_no
(fj_no, arr_time)→(jc_no, off_time)
(fj_no, off_time)→arr_time
(hb_no, jc_no)→(arr_time, off_time)
注:这里假设每个航班只安排一架飞机,每个航班在每个机场只停靠一次。
2) 关系模式 P 最高能够满足到第几范式?并简单说明理由。
最高满足 1NF。
理由:关系 P 有三个候选关键字:(hb_no, jc_no), (hb_no, arr_time), (hb_no, off_time)
存在非主属性(fj_no)对关键字的部分函数依赖。
5-4
六、(数据库设计)
假设需要建立一个用于学校班车、行驶线路及其停靠站点管理的数据库系统,需要存储的信息
有:班车的车牌号(具有唯一性)和车型;班车驾驶员的工作证编号(具有唯一性),姓名和联系电
话;停靠站点的编号(具有唯一性),名称和地点;行驶线路的编号(具有唯一性)和名称。
其中:1)每一条行驶线路有若干个停靠站点,系统需要记录一条线路上各站点的停靠次序;2)
每条线路每次可以安排一辆或多辆班车;3)每一辆班车每次出行只安排一个驾驶员;4)驾驶员可
以驾驶的班车不固定;5)系统需要记录每一辆班车的每一次运行所安排的行驶路线、车辆、驾驶员、
从车队出发时间和结束回到车队的时间;
1.请画出该数据库系统的 ER 模型图,并标注出实体与联系之间的参与方式。
2.请将上述 ER 模型转换成相应的关系模型。
驾驶员(工作证编号,姓名,电话)
线路(线路编号,名称)
停靠(线路编号,站点编号,停靠顺序)
运行(工作证编号,车牌号,线路编号,出发时间,返回时间)
班车(车牌号,车型)
站点(站点编号,名称,地点)
3.请写出每一个关系上的最小函数依赖集,并判断每一个关系是否满足 BCNF(简单说明理由)。
所有关系都能满足 BCNF!
前五个关系比较容易判断(理由略),只有‘运行’关系中的函数依赖复杂一些,分析如下:
运行(工作证编号,车牌号,线路编号,出发时间,返回时间)
其函数依赖集为:
该关系的关键字有:(车牌号, 出发时间)
(车牌号, 结束时间)
该关系中的所有函数都能满足 BCNF 的定义,所以该关系满足 BCNF。
(工作证编号, 出发时间)
(工作证编号, 结束时间)
5-5