数据库原理及应用(MySQL版-李月军)-习题参考答案

数据库原理及应用(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语句删除其它存储过程。

习 题 四

image-20240912190620880

image-20240912190651610

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. (1)需要重做的事务:T1、T2、T3,需要回滚的事务:T4。

(2)需要重做的事务:T1、T2,需要回滚的事务:T3。

(3)需要重做的事务:T1,需要回滚的事务:T2、T3。

(4)需要重做的事务:T1,需要回滚的事务:T2。

  1. (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图

image-20240912184327634

运动会局部E-R图

image-20240912184415543

(2)

image-20240912185144327

(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的重组织和重构造

三、设计题

image-20240912185543969

image-20240912185604340

image-20240912185640905

(4)此处的“需求”是“岗位”、“企业”和“人才”3个实体之间的联系,而事实上只有人才被聘用之后三者才产生联系。本系统解决的是人才的求职和企业的岗位需求,人才与企业之间没有直接的联系。

(5)建立企业的登录信息表,包含用户名和密码,记录企业的用户名和密码,将对本企业的基本信息的修改权限赋予企业的用户名,企业工作人员通过输入用户名和密码,经过服务器将其与登录信息表中记录的该企业的用户名和密码进行验证后,合法用户才有权修改企业的信息。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@杨星辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值