数据库原理及应用(MySQL版)-微课视频版
习题参考答案
习 题一
一.选择题
1、D 2、C 3、C 4、B 5、D
6、B 7、A 8、B 9、C 10、A
11、B 12、C 13、①A②B③C 14、①E②B 15、①B②C③B
16、B 17、A 18、D
二.填空题
1、文件系统 操作系统 2、转换 3、概念 逻辑
4、数据 5、外模式 内模式 模式
三.简答题
1.这4种模型的特点和区别如下表所示。
模型 | 反映何种观点的何种结构 | 独立性 | 使用者 | 范例 |
---|---|---|---|---|
概念模型 | 反映了用户观点的数据库整体逻辑结构 | 硬件独立软件独立 | 企业管理人员数据库设计者 | E-R模型 |
逻辑模型 | 反映了计算机实现观点的数据库整体逻辑结构 | 硬件独立软件依赖 | 数据库设计者DBA | 层次、网状、关系模型 |
外部模型 | 反映了用户具体使用观点的数据库局部逻辑结构 | 硬件独立软件依赖 | 用户 | 与用户有关 |
内部模型 | 反映了计算机实现观点的数据库物理结构 | 硬件依赖软件依赖 | 数据库设计者DBA | 与硬件、DBMS有关 |
2.DB的三级模式结构描述了数据库的数据结构。数据结构分成3个级别。由于三级结构之间有差异,因此存在着两级映射。这5个概念描述了如下内容。
① 外模式:描述用户的局部逻辑结构。
② 外模式/模式映射:描述外模式和概念模式间数据结构的对应性。
③ 概念模式:描述DB的整体逻辑结构。
④ 模式/内模式映射:描述概念模式和内模式间数据结构的对应性。
⑤ 内模式:描述DB的物理结构。
3.在用户访问数据的过程中,DBMS起着核心的作用,实现“数据三级结构转换”的工作。
4.在数据库的三级模式结构中,数据按外模式的描述提供给用户,按内模式的描述存储在磁盘中,而概念模式提供了连接这两级的相对稳定的中间观点,而且两级中任何一级的改变都不受另一级的牵制。
5.物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是独立的。物理独立性通过模式/内模式映射来实现的。
逻辑独立性是指用户的应用程序与逻辑结构是相互独立的。逻辑独立性是通过外模式/模式映射来实现的。
习 题二
一.选择题
1、C 2、C 3、C 4、B 5、D
6、D 7、D 8、C 9、C 10、D
11、B 12、C 13、A 14、C 15、B
二.设计题
1.解答:
(1)SELECT E#,ENAME FROM EMP
WHERE AGE>50 AND SEX='M';
(2)SELECT E#,COUNT(*) NUM,SUM(SALARY) SUM_SALARY FROM WORKS
GROUP BY E#;
(3)SELECT A.E#,ENAME
FROM EMP A,WORKS B,COMP C
WHERE A.E#=B.E# AND B.C#=C.C# AND CNAME='联华公司'
AND SALARY<(SELECT AVG(SALARY) FROM WORKS,COMP
WHERE WORKS.C#=COMP.C# AND CNAME='联华公司');
(4)SELECT C.C#,CNAME FROM WORKS B,COMP C
WHERE B.C#=C.C#
GROUP BY C.C#,CNAME
HAVING COUNT(*)>=ALL(SELECT SUM(SALARY) FROM WORKS GROUP BY C#);
(5)SELECT C.C#,CNAME FROM WORKS B,COMP C
WHERE B.C#=C.C#
GROUP BY C.C#,CNAME
HAVING AVG(SALARY)>(SELECT AVG(SALARY) FROM WORKS B,COMP C
WHERE B.C#=C.C# AND CNAME='联华公司');
(6)UPDATE WORKS SET SALARY=SALARY*1.05
WHERE C# IN (SELECT C# FROM COMP
WHERE CNAME='联华公司');
(7)DELETE FROM WORKS
WHERE E# IN (SELECT E# FROM EMP WHERE AGE>60);
(8)CREATE VIEW emp_woman
AS SELECT A.E#,ENAME,C.C#,CNAME,SALARY
FROM EMP A,WORKS B,COMP C
WHERE A.E#=B.E# AND B.C#=C.C# AND SEX='F';
SELECT E#,SUM(SALARY) FROM emp_woman
GROUP BY E#;
2.解答:
(1)此问题考查的是查询效率的问题。在涉及相关查询的某些情形中,构造临时关系可以提高查询效率。
① 对于外层的职工关系E中的每一个元组,都要对内层的整个职工关系M进行检索,因此查询效率不高。
② 解答方法一(先把每个部门最高工资的数据存入临时表,再对临时表进行查询):
CREATE TABLE temp
AS SELECT 部门号,MAX(月工资) 最高工资 FROM 职工 GROUP BY 部门号;
SELECT 职工号 FROM 职工,temp
WHERE 职工.部门号=temp.部门号 AND 月工资=最高工资 ;
解答方法二(直接在FROM子句中使用临时表结构)
SELECT 职工号
FROM 职工,( SELECT MAX(月工资) 最高工资,部门号
FROM 职工
GROUP BY 部门号) AS depMax
WHERE 月工资=最高工资 AND 职工.部门号=depMax.部门号
(2)此问主要考察在查询中注意WHERE子句中使用索引的问题,既可以完成相同功能又可以提高查询效率的SQL语句如下:
(SELECT 姓名,年龄,月工资 FROM 职工 WHERE 年龄>45)
UNION
(SELECT 姓名,年龄,月工资 FROM 职工 WHERE 工资<1000)
习 题 三
一.选择题
1、C 2、A 3、C 4、C 5、B 6、C
7、D 8、B 9、B 10、C 11、C 12、C
二.简答题
1、存储过程和函数在本质上都是存储程序。函数只能通过return语句返回单个值;而存储过程不允许执行return,但是可以通过out参数返回多个值。函数可以嵌入在SQL语句中使用,可以在SELECT语句中作为查询语句的一个部分调用;而存储过程一般是作为一个独立的部分来执行。
2、目前,MySQL还不提供对已存在的存储过程代码的修改,如果必须要修改存储过程,必须使用DROP语句删除之后,再重新编写代码,或者创建一个新的存储过程。
3、存储过程是包含用户定义的SQL语句集合,可以使用CALL语句调用存储过程,当然在存储过程中也可以使用CALL语句调用其他存储过程,但是不能使用DROP语句删除其它存储过程。
习 题 四
1、
(1)∏S#,SNAME(ðage<17∧sex=’女’(S))
(2)∏C#,CNAME(ðsex=’男’(S ∞ SC ∞ C))
(3)∏T#,TNAME(ðsex=’男’(S ∞ SC ∞ C ∞ T))
(4)∏1(ð1=4∧2≠5(SC×SC))
(5)∏2(ð1=‘S2’∧4=’S4’∧2=5(SC×SC))
或∏S#,C#(SC)÷{’S2’,’S4’}
(6)∏C#(C)-∏C#(ðsname=’WANG’(S ∞ SC))
(7)∏C#,CNAME(C ∞ (∏S#,C#(SC) ÷∏S#(S)))
(8)∏S#,C#(SC) ÷∏C#( ðTname=’LIU’(C ∞ T))
2、
(1){t|(u)(SC(u) ∧u[2]=‘k5’ ∧t[1]=u[1] ∧t[2]=u[2])}
(2){t|(u)(v) (S(u) ∧ SC(v) ∧ v[2]=‘k8’ ∧u[1]=v[1] ∧t[1]=u[1] ∧t[2]=u[2])}
(3){t|(u)(v)(w) (S(u) ∧ SC(v) ∧C(w) ∧ w[2]=‘C语言’ ∧u[1]=v[1] ∧v[2]= w[1] ∧ t[1]=u[1] ∧t[2]=u[2])}
(4){t|(u)(SC(u) ∧ (u[2]=‘k1’ ∨u2=‘k5’)∧ t[1]=u[1] )}
(5){t|(u)(v)(w)(S(u) ∧C(v) ∧ SC(w) ∧ (u[1]=w[1] ∧w[2]=v[1] ∧ t[1]=u[2] )}
四.操作题
【问题一】
PRIMARY KEY
FOREIGN KEY(负责人代码) REFERENCES 职工
PRIMARY KEY
FOREIGN KEY(部门号) REFERENCES 部门
月工资 BETWEEN 500 AND 5000
COUNT(*),SUM(月工资),AVG(月工资)
GROUP BY 部门号
【问题二】
(1)和(2)都不能执行,因为使用分组和聚集函数定义的视图是不可更新的。
(3)、(4)、(5)可以执行,因为给出的SQL语句与定义D_S视图的SQL语句合并起来验证有效。
习 题 五
一.选择题
1、A 2、A 3、B 4、B 5、C
二.填空题
1安全性 2用户标识与鉴别、存取控制、视图机制、数据加密、审计
3 CREATE USER 4 角色 5 GRNAT、REVOKE
三.简答题
1.
(1)CREATE USER test_user@localhost IDENTIFIED BY 'test';
(2)GRANT SELECT ON TABLE scott.dept TO test_user@localhost;
(3)GRANT INSERT,DELETE,UPDATE(loc) ON TABLE scott.dept
TO test_user@localhost;
(4)GRANT ALL PRIVILEGES ON TABLE scott.dept
TO test_user@localhost
WITH GRANT OPTION;
(5)REVOKE ALL PRIVILEGES,GRANT OPTION FROM test_user@localhost;
(6)CREATE VIEW scott.view1
AS SELECT * FROM dept WHERE deptno=10;
GRANT SELECT ON TABLE scott.view1 TO test_user@localhost;
(7)CREATE ROLE role1;
GRANT ALL PRIVILEGES ON scott.* TO test_user@localhost;
(8)GRANT role1 TO test_user@localhost;
(9)REVOKE role1 FROM test_user@localhost;
(10)DROP ROLE role1;
2.
(1)
① PRIMARY KEY(仓库号)
② PRIMARY KEY
③ CHAR(4)
④ FOREIGN KEY(仓库号) REFERENCES 仓库(仓库号)
(2)
① 原材料 、
② GROUP BY 仓库号
HAVING SUM(数量)>=ALL(SELECT SUM(数量) FROM 原材料
GROUP BY 仓库号)
(3)
① *
② INSERT,DELETE,UPDATE
③ raws_in_wh01、
④ SELECT
⑤ 原材料
习 题 六
一.选择题
1、①D②C 2、C 3、A 4、B 5、C
6、D 7、CB 8.D 9、D 10、B
二.填空题
1.原子性、隔离性 2.ROLLBACK、COMMIT 3.丢失更新、读脏数据
4.活锁、饿死、死锁
三.操作题
1)出现问题:有一个存款值会丢失,造成数据不一致。
2)代码程序:Xlock(b),R(b),b=b+x,W(b),Unlock(b)
3)不能实现。因为程序中的隔离级别设置为READ UNCOMMITTED
,未实现加锁控制,不能达到串行化调度。
修改方法:改为SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
习 题 七
一.选择题
1、D 2、A 3、A 4、D 5、A 6、C 7、D 8、A 9、B 10、B
二.填空题
1.事务故障、系统故障、介质故障 2.后备数据库、日志文件
3.错误、查询、二进制、慢查询
三.简答题
- (1)需要重做的事务:T1、T2、T3,需要回滚的事务:T4。
(2)需要重做的事务:T1、T2,需要回滚的事务:T3。
(3)需要重做的事务:T1,需要回滚的事务:T2、T3。
(4)需要重做的事务:T1,需要回滚的事务:T2。
- (1)A=8 B=7 C=11
(2)A=10 B=0 C=11
(3)A=10 B=0 C=11
(4)A=10 B=0 C=11
(5)A=10 B=0 C=11
(6)A=0 B=0 C=0
习 题 八
(1)运动队局部E-R图
运动会局部E-R图
(2)
(3)命名冲突:运动队局部E-R图中的属性项目和运动会局部E-R图中的属性项目名异名同义,统一命名为项目名。
结构冲突:项目在两个局部E-R图中,一个作属性,一个作实体,合并统一为实体。
习 题 九
一.选择题
1、C 2、C 3、C 4、B 5、A
6、D 7、B 8、A 9、①A②D 10、B
11、B 12、B 13、D 14、B 15、①C ②C ③A ④B
二.填空题
1、函数 多值 2、插入异常 删除异常 更新异常 3、全码 非主属性
4、函数 多值 5、一个 两个或两个以上 6、范式
7、2NF 8、3NF 9、BCNF
10、无损连接 保持FD
三.简答题
1、(1)R的候选键是AB, R属于BCNF。
(2)R的候选键是AB,R属于BCNF。
(3)R的候选键是AB和BD,R最高属于3NF。
2、至少有(a1,b1,c2) (a1,b1,c3) (a1,b2,c1)
(a1,b2,c3) (a1,b3,c1) (a1,b3,c2)
成立。
3、(1)CE为R的候选关键字。
(2)分解后的模式具有无损连接性,但不能保持原来的函数依赖。
四.设计题
(1)部门 主键:(部门代码,办公室) 外键:无
F1={部门代码→(部门名,起始年月,终止年月),办公室→办公电话}
等级 主键:(等级代码,年月) 外键:无
F2={等级代码→等级名,(等级代码,年月)→小时工资}
项目 主键:项目代码 外键:部门代码、项目主管
F3={项目代码→(项目名,部门代码,起始年月日,结束年月日,项目主管)}
工作计划 主键:(项目代码,职员代码,年月) 外键:项目代码、职员代码
(2)修改后的关系模式如下:
职务(职务代码,职务名,等级代码)
其主键为(职务代码,等级代码) 外键为等级代码
(3)设计的“工作业绩”关系模式如下:
工作业绩(项目代码,职员代码,年月日,工作时间)
其主键为(项目代码,职员代码,年月日)
(4)部门关系模式不属于2NF,只能是1NF。该关系模式存在冗余问题,因为某部门有多少个办公室,则部门代码、部门名、起始年月、终止年月就要重复多少次。
为了解决这个问题,可将模式分解,分解后的关系模式为:
部门_A(部门代码,部门名,起始年月,终止年月)
其主键为部门代码
部门_B(部门代码,办公室,办公电话)
其主键为(部门代码,办公室) 外键为(部门代码)
(5)SQL语句如下:
SELECT 职员代码,职员名,年月,工作时间*小时工资 AS 月工资
FROM 职员,职务,等级,月工作业绩
WHERE 职员.职务代码=职务.职务代码 AND 职务.等级代码=等级.等级代码
AND 等级.年月=月工作业绩.年月 AND 职员.职员代码=月工作业绩.职员代码;
习 题 十
一、选择题
1、B 2、C 3、B 4、D 5、C 6、A 7、B 8、C 9、D 10、B
11、C 12、C 13、A 14、D 15、D
二、填空题
1.系统调查、可行性分析 2.自顶向下逐步细化、自底向上逐步综合
3.把概念模式转换成DBMS能处理的模式 4.DBA
5.DB的转储和恢复、DB的重组织和重构造
三、设计题
(4)此处的“需求”是“岗位”、“企业”和“人才”3个实体之间的联系,而事实上只有人才被聘用之后三者才产生联系。本系统解决的是人才的求职和企业的岗位需求,人才与企业之间没有直接的联系。
(5)建立企业的登录信息表,包含用户名和密码,记录企业的用户名和密码,将对本企业的基本信息的修改权限赋予企业的用户名,企业工作人员通过输入用户名和密码,经过服务器将其与登录信息表中记录的该企业的用户名和密码进行验证后,合法用户才有权修改企业的信息。