一、填空题(每空1分,共10分)
- 用户与操作系统之间的数据管理软件称为 DBMS(数据库管理系统) 。
- 用二维表表示实体类型和实体间关系的数据模型是 关系数据模型 。
- 关系代数的五种基本查询操作有选择、投影、 并 、差、笛卡尔积。
- 在SELECT语句中使用ORDER BY子句将查询结果排序,其中的 desc 选项表示降序。
- 子查询的条件不依赖于父查询,这类查询称为 嵌套子查询或不相关子查询 。
- 若关系模式R(U,F)中U为全键,则R能够满足的最高范式级别为____3NF_________。
- 对于函数依赖X→Y,如果Y包含于X则称X→Y是 平凡的 的函数依赖。
- 在数据库设计中,E—R图是进行___概念模型___设计的主要方法。
- 避免活锁的最简单的方法是采用 先来先服务 的策略。
- 两段锁协议中,在释放一个封锁以后,规定事务 不能再申请和获取新的封锁 。
二、单项选择题(每小题2分,共40分)
1. DB , DBMS , DBS 之间的关系是 。 ( C )
A.DB包括DBMS和DBS B. DBMS包括DB和DBS
C. DBS包括DBMS和DB D. DBS与DBMS,DBS无关
2. 要保证数据库物理数据独立性,需要修改的是 。 ( B )
A.模式 B.模式与内模式的映射
C.模式与外模式的映射 D.内模式
3. 储蓄所有多个储户,储户可以在多家储蓄所存取款,则储户与储蓄所之间是 ( D )
A.一对一的联系 B.一对多得联系
C.多对一的联系 D.多对多的联系
4. 设R为4元关系R(A,B,C,D),S为3元关系S(B,C,D),则R∞S自然连接构成
的结果集是几元关系。 ( D )
A.4 B.3
C.7 D.6
5.关系代数∏ 对应SQL语句中的哪个子句。 ( A )
A.SELECT B.FROM
C.WHERE D.GROUP BY
6. 实体完整性要求主属性不能取空值,这通常是通过 。 ( C )
A.定义外键来保证 B.用户自定义完整性来保证
C.定义主键来保证 D.关系系统自动保证
7.若用如下的SQL语句创建一个student表:
CREATE TABLE student(NO Char(4) NOT NULL,
NAME Char(8) NOT NULL,
SEX Char(2),
AGE Number(2))
可以插入到student表中的是 。 ( B )
A. (‘1031’, ‘曾华’,男,23) B. (‘1031’,’曾华’,NULL,NULL)
C. (NULL,‘曾华’, ‘男’, ‘23’) D.(‘1031’ , NULL, ‘男’,23)
8. SELECT语句中与HAVING子句同时使用的是哪个子句。 ( C )
A.ORDER BY B.WHERE
C.GROUP BY D.无需配合
9.下列哪种情况不是一个属性列(组)上建立索引的依据。 ( A )
A.该属性列(组)经常需要被更新
B.该属性列经常作为聚集函数的参数
C.该属性列(组)经常在查询条件中出现
D.该属性列(组)经常在连接条件中出现
10.下列哪项操作可能破坏参照完整性。 ( B )
A.被参照表插入元组(不影响) B.被参照表修改主码值
C.参照表删除元组(不影响) D.参照表修改主码值(不影响)
解析:
参照表(破坏参照完整性) | 被参照表(同理) | 其他情况 |
插入元组(参照表新增了一列,导致被参照表没有所对应的新列。) | 删除元组(建立的被参照表被删除一列,造成不符合参照表规则) | 都不变 |
修改外码值(修改参照表本身,破坏参照完整性) | 修改主码值(就是修改被参照表本身属性),一般被参照的表参照的就是主码,主码不能动 |
|
总结:被参照表可以多,但不能少【在参照表不变的情况】,不能动参照的主键列(主码)。
参照表可以少,但不能多【在被参照表不变的情况】,不能动参照表本身属性(外码)。
也就是参照表相当于限制条件,在建表(参照表)的基础上,规则可以少。
同理,在规则已经确定的情况下,必须依照此规则,并且可以多些按照相同规则的属性,但是不能出现某些规则有,但没有符合该规则的属性列。自己慢慢体会,一样的道理!!!
11.关系规范化中的插入异常是指 。 ( C )
A.不应插入的数据被插入 B.不该删除的数据被删除
C.应该插入的数据不能被插入 D.应该删除的数据未被删除
解析:删除异常的指不该删除的数据被删除。
12. 在关系模式R(A,B,C,D)中,有函数依赖集F={B→C,C→D,D→A},则R最高达到第几范式。 ( B )
A.1NF B. 2NF
- 3NF D. 以上三者都不行
解析:存在传递函数依赖,故最高为2NF
13. 在最小依赖集F中,下面叙述不正确的是 。 (B )
A.F中每个FD的右部都是单属性
B.F中每个FD的左部都是单属性
C.F中没有冗余的FD
D.F中每个FD的左部没有冗余的属性
解析:最小函数依赖集条件:(1)F中任一函数依赖右部仅含有一个属性
- F中不存在这样的函数依赖X->A,使得F与F-{X->A}等价。【无多余函数依赖】
- 左部不能再分,无多余属性
14.如果关系R的分解为ρ=(R1,R2),F是R上的一个FD集,那么分解ρ具有无损连接性的充分必要条件是 。 ( A )
(1). (R1∩R2)→(R1-R2) (2). (R1∩R2)→(R2-R1)
(3). (R1∪R2)→(R1-R2) (4). (R1∪R2)→(R2-R1)
供选择的答案:
A. (1)或(2) B. (1)或(3)
C. (3)或(4) D. (2)或(4)
15.数据库系统可能发生的各类故障中,破坏性最大的是 。 ( C )
A.事务故障 B.系统故障
C.介质故障 D.计算机病毒
16. 对基于检查点的恢复技术,下列说法中错误的是 。 ( A )
A. 无论事务在检查点之前还是之后提交,都需执行REDO操作
B. 检查点技术可以提高恢复效率
C. 检查点可以定期建立
D. 能最大限度的减少恢复数据库时根据日志记录所需执行的恢复操作
17.保护数据库,防止未经授权或不合法的使用造成的数据泄漏、非法更改或破坏。这是指数据的 。 ( A )
A. 安全性 B.完整性
C.并发控制 D.恢复
18.在DB恢复时,对已经提交但更新未写入磁盘的事务执行 。 ( B )
A.UNDO处理 B.REDO处理
C.ROLLBACK处理 D.ABORT处理
19. 设有两个事务T1和T2,它们的并发操作如图所示。对于这个并发操作,下列评价正确的是 。 ( A )
| T1 | T2 |
① | 读A=10 |
|
② |
| 读A=10 |
③ | A=A-5写回 |
|
④ |
| A=A-8写回 |
A、该操作丢失了更新 B、该操作不能重复读
C、该操作读脏数据 D、该操作不存在问题
20. 若事务T对数据R已加X锁,则其他事务对数据R 。 ( D )
A.可以加S锁不能加X锁 B.不能加S锁可以加X锁
C.可以加S锁也可以加X锁 D.不能加任何锁
三、简答题(每小题5分,共10分)
1.简单描述连接查询的排序合并算法(sort-merge)。
答:首先按连接属性对表1和表2排序
对表1的第一个元组,从头开始扫描表2,顺序查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。当遇到表2中第一条大于表1连接字段值的元组时,对表2的查询不再继续
找到表1的第二条元组,然后从刚才的中断点处继续顺序扫描表2,查找满足连接条件的元组,找到后就将表1中的第一个元组与该元组拼接起来,形成结果表中一个元组。直到遇到表2中大于表1连接字段值的元组时,对表2的查询不再继续
重复上述操作,直到表1或表2中的全部元组都处理完毕为止
- 什么是事务?什么是事务的ACID属性?
一个数据库操作序列,是数据库应用程序的基本逻辑单元。 这些操作要么都做,要么都不做,是一个不可分割的执行单位。
原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)
四、应用题(每小题3分,共21分)
对于供应商--零件--工程的四个基本表
供应商: S (s#,sname,status,city) /*代码,姓名,状态,供应商所在城市*/
零件表: P (p#,pname,color,weight,city) /*零件代码,零件名,颜色,重量,零件商所在的城市*/
工程项目表: J (j#,jname,city) /*项目代码,项目名,项目所在的城市*/
供应情况表: SPJ (s#,p#,j#,qty) /*供应商代码,零件代码,工程项目代码,供应数量(表示某供应商 供应某种零件 给某工程项目的数量为QTY)*/
试用关系代数表达下列查询
(1)求由’S1’ 供应的工程名称。
(2)没有使用’天津’供应商生产的’红’色零件的工程号J#。
解:(1)s#=S1,求jname。(先从SPJ表中选出供应商代码为s1,然后要求的是jname,jnanme在工程项目表中,需要将两表进行连接,并选出jname的投影)
∏JNAME (σ S#=’S1’ (SPJ∞J));
(2)答案采取的思路是用
∏J#(J)-∏J#(∏S#(σCITY = “天津”)(S)) ∞∏S#,P#,J#(SPJ) ∞ ∏P#(σCOLOR=“红”)(P)))
∏J#(J)-∏J#(σCITY = “天津”^COLOR=“红”(P∞S∞SPJ));
- ∏S#(σCITY = “天津”)(S) 是从S表中选取city=天津,并根据s#供应商代码进行投影。意思就是选出天津供应商的代码。
- ∏S#,P#,J#(SPJ) 是从SPJ表中投影出S#,P#,J#项,意思就是为了方便将供应商表和零件表和工程项目表三个表联立,并为以后选出符合要求的条件提供前提。
- ∏P#(σCOLOR=“红”)(P)) 是从P表中找到颜色为红色的零件代码,先选择,后投影。
将(1)(2)(3)三个部分的部分的语句进行连接,并一起投影出J#。选出了使用
- 天津供应商,红色零件,同时瞒住的工程号J#。最后用再J表中所有的J#项目代码减去不满足条件的工程号,剩下的就是满足题意的工程号J#。
试用SQL语句表达下列操作
(3)查询供应商,零件和工程在同一个城市的所有的供应商号,零件号,项目号。
(4)找出工程项目’J2’使用的各种零件的名称及其总数量。
(5)统计所有项目中供应零件’P1’总数量最大的供应商号。
(6)根据关系代数:∏j#(∏p#(σpname=’TV’(P))∞SPJ)写出SQL语句。
(7)根据S表建立一个视图,要求有s#,sname,city三个属性,并且供应商有供应零件。
(3)SELECT S.S#, P.P#, J.J# FROM S, P, J
WHERE ( S.CITY = P.CITY AND P.CITY = J.CITY )
(4)SELECT PNAME , sum(QTY )
FROM P ,SPJ
WHERE SPJ.J# = ‘J2’ AND SPJ.P# = P.P#
GROUP BY P.PNAME
- Select S# from spj where p#=’p1’ group by s# having sum(qty)=(SELECT max(sum_qty) FROM ( SELECT S# ,sum (QTY ) sum_qty from spj where p#=’p1’group by s#) );
①SELECT S# ,sum (QTY ) sum_qty from spj where p#=’p1’group by s#;
【查询供应商代码,最大供应数量,从spj表中,条件是零件代码是p1,并且按照供应商代码分类】
剩下的还是套娃:②从第一步的查询结果中找到最大供应数量并将其赋值给sum(qty)聚集函数。第一步就是做了个分类。。。。
(6)Select disctinct j# from p,spj where p.p#=spj.p# and pname=’TV’;
(7)Create view sp As Select s#,sname,city from s where s# in (select s# from SPJ)
五、综合题(共9分)
关系R(A,B,C,D,E,P,G,H,I,J)满足下列函数依赖:F={AB→E, ABE→GP, B→PI,C→J,CJ→I,G→H}
(1)该函数依赖集是最小函数依赖集吗?若不是,将其化为最小函数依赖集。(6分)
(2)给出该关系的候选码,并说明R属于几范式。(3分)
解:(1)F不是最小函数依赖集。最小函数依赖集Fm={AB→E,AB→G,B→P,B→I,C→J,C→I,G→H}
详细步骤:①对于AB->E, B->PI [ABPI],AB的闭包不能确定E,所以AB->E不多余
②ABE→GP, 先对其进行分解,ABE->G,ABE->P,然后我们知道E是多余的,然后得到AB->G,AB->P。然后判断AB->G,发现不是多余的,故保留。然后看AB->P,我们可以看到B->P,B->I,可以看出A是多余的,故为B->P保留。
③B->P,B->I,已经有B->P,只需看B->I,发现B的闭包确定不了I,故B->I不多余。
④C→J,C的闭包确定不了J,故C→J保留。
⑤CJ→I,已知C→J,那么J多余,判断C→I是否多余,C的闭包确定不了I,故C→I保留。
⑥G→H,G的闭包确定不了H,故G→H保留。
综上所述,最小函数依赖集Fm={AB→E,AB→G,B→P,B→I,C→J,C→I,G→H}
(2)候选码为ABC,并且R∈1NF
六、数据库设计题(共10分)
设某汽车运输公司数据库中有三个实体集.一是“车队”实体集,属性有车队号、车队名等;二是“车辆”实体集,属性有牌照号、厂家、出厂日期等;三是“司机”实体集,属性有司机编号、姓名、电话等。
设车队与司机之间存在“聘用”联系,每个车队可聘用若干司机,但每个司机只能应聘于一个车队,车队聘用司机有个聘用期属性;车队与车辆之间存在“拥有”联系,每个车队可拥有若干车辆,但每辆车只能属于一个车队;司机与车辆之间存在“使用”联系,司机使用车辆有使用日期和公里数两个属性,每个司机可使用多辆汽车,每辆汽车可被多个司机使用。
- 请画出该运输公司管理系统的E-R图。(5分)
- 设计出满足3NF的关系模式集。(5分)
解:(1)矩形代表实体,椭圆代表属性,菱形框代表关系。
分析:三个实体:车队,车辆,司机
属性:【车队的属性】车队号、车队名,【车辆】牌照号、厂家、出厂日期,【司机】司机编号、姓名、电话。
关系:车队--》聘用--》司机,1对多的关系【司机拥有聘用期属性】。车队和车辆是1对多的关系,并且车队拥有车辆。司机和汽车是多对多,是使用与被使用关系使用车辆
有使用日期和公里数两个属性。
(2)
关系模式:
车队(车队员,车队名)
司机(司机编号,姓名,电话,聘用期,车队号)
车辆(牌照号,厂家,出厂日期,车队号)
使用(司机编号,牌照号,使用日期,公里数)