试题2
阅读以下某工厂信息管理数据库的设计说明,根据要求回答问题1~问题4。(15分)
【说明】
某工厂有多个部门,每个部门有多位职工,每位职工属于并且仅属于一个部门,每个部门有一位负责人,每个办公室有一部电话。每位职工的月工资大致是:800≤月工资≤4 500元。
软件开发公司A为该工厂开发的信息管理数据库的部分关系模式如下所示。
职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)
部门(部门号,部门名,负责人代码,任职时间)
其中“职工”和“部门”的关系示例分别见表8和表9。
表8 “职工”关系示例表
职 工 号 |
姓 名 |
年 龄 |
月 工 资 |
部 门 号 |
电 话 |
办 公 室 |
1001 |
郑俊华 |
26 |
1000 |
1 |
8001234 |
主楼201 |
1002 |
王平 |
27 |
1100 |
1 |
8001234 |
主楼201 |
2001 |
王晓华 |
38 |
1300 |
2 |
8001235 |
1号楼302 |
2002 |
李力 |
24 |
800 |
2 |
8001236 |
1号楼303 |
3001 |
黎运军 |
42 |
1300 |
3 |
8001237 |
主楼202 |
4001 |
李源 |
24 |
800 |
3 |
8001245 |
2号楼102 |
4002 |
李兴民 |
36 |
1200 |
4 |
8001246 |
2号楼103 |
5001 |
赵欣 |
25 |
0 |
Null |
… |
… |
… |
… |
… |
… |
… |
… |
… |
表9 “部门”关系示例表
部 门 号 |
部 门 名 |
负责人代码 |
任 职 时 间 |
1 |
人事处 |
1002 |
2004-8-3 |
2 |
机关 |
2001 |
2004-8-3 |
3 |
销售科 |
|
|
4 |
生产科 |
4002 |
2003-6-1 |
5 |
车间 |
|
|
【问题1】(2分)
请使用“关系模式标记规则”(见本题附录),给出上述各关系模式的主键和外键。
【问题1】答案解析:
这是一道要求考生根据题目给定的关系模式,以及属性间的函数依赖关系和给定的关系实例来确定各关系模式主键和外键的综合分析题。本试题的解答思路如下。
(1)由试题中给出的关键信息“某工厂有多个部门,每个部门有多位职工,每位职工属于并且仅属于一个部门,每个部门有一位负责人,……每位职工的月工资大致是:800≤月工资≤4500元”,可以整理出如表8所示的关系模式主要属性、含义及约束。
表10 主要属性、含义及约束表
属 性 |
含义及约束 |
职工号 |
唯一标识每个职工的编号,每个职工属于并且仅属于一个部门 |
部门号 |
唯一标识每个部门的编号,每个部门有一个负责人,且他也是一位职工 |
月工资 |
f 500≤月工资≤5000元 |
(2)设K为R(U,F)中的属性的组合,若 ,且对于K的任何一个真子集 ,都有 不能决定U,则K为R的候选码(候选关键字)。若有多个候选码,则选一个作为主码(主键)。
(3)部门关系模式的主键和外键。
由题目中给出的关键信息“某工厂有多个部门,……每个部门有一位负责人”,并且结合试题所给出的“部门”关系示例(见表9)可知,仅用“部门号”作为主键,可以唯一区分部门关系中的每一个元组。同时考虑到部门负责人应该来自职员,所以“负责人代码”应为部门关系模式的外键。***可得部门关系模式的主键和外键如下。
部门(部门号,部门名,负责人代码,任职时间)
(4)职工关系模式的主键和外键。
由题干中给出的关键信息“每位职工属于并且仅属于一个部门”可知,仅用“职工号”作为主键,可以唯一区分职工关系中的每一个元组。同时考虑到“部门号”是部门关系模式的主键,所以它应是职工关系模式的外键。***可得职工关系模式的主键和外键如下。
职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)
【问题2】(3分)
对于表8和表9所示的“职工”和“部门”关系,请指出表11中第①、②和③行是否允许插入?请分别用100字以内的文字简要说明理由。
表11 新增“职工”关系示例表
行 号 |
职 工 号 |
姓 名 |
年 龄 |
月 工 资 |
部 门 号 |
电 话 |
办 公 室 |
① |
1001 |
王新军 |
28 |
1000 |
1 |
8001234 |
主楼201 |
② |
2003 |
李力 |
28 |
1000 |
|
|
|
③ |
5802 |
赵晓啸 |
36 |
1500 |
6 |
8001568 |
3号楼503 |
③5802赵晓啸361500680015683号楼503
【问题2】答案解析:
这是一道要求考生掌握完整性定义的约束性的综合分析题。本试题的解答思路如下。
(1)用SQL定义关系模式的一个非常重要的问题是完整性控制。完整性控制应具有①定义功能、②检测功能和③处理功能等3方面的功能。一旦发现违背了完整性约束条件,则应采取相关的动作来保证数据的完整性。数据库中最重要的约束是声明一个或一组属性形成关系的键。键的约束在SQL的CREATE TABLE命令中声明。在关系系统中,最重要的完整性约束条件是:实体完整性和参照完整性。
(2)实体完整性定义。在关系中只能有一个主键。声明主键有以下两种方法:①将PRIMARY KEY保留字加在属性类型之后;②在属性列表中引入一个新元素,该元素包含保留字PRIMARY KEY和用圆括号括起的,形成该键的属性或属性组列表。
(3)参照完整性定义。定义格式如下:
FOREIGN KEY(属性名) REFERENCES 表名(属性名)
[ON DELETE CASCADE | SET NULL]
参照完整性是通过使用保留字“FOREIGN KEY”定义哪些列为外码;REFERENCES用于指明外键对应于哪个表的主键;ON DELETE CASCADE指明删除被参照关系的元组时,同时删除参照关系中的元组;SET NULL表示置为空值方式。
(4)由于在职工表的定义中,职工号主码是唯一标识每个元组(记录)的,而在表11第①行中的职工号是“1001”,在题目给出的表8“职工”关系示例表中已经存在该职主号的记录,为了保证实体的完整性,该条记录不能插入。
(5)表11第②行的元组可以插入到表8“职工”关系表中,尽管部门号、电话和办公室为空,但是它表示该雇员暂时没有分配到某个部门。虽然职工表中部门号是外键,但在定义中也没有约束它不能为空。
(6)表11第③行的元组不能插入到表8“职工”关系表中,部门号是外键,而在部门关系中找不到部门号为“6”的元组,违反了参照完整性,所以不能做插入操作。
【问题3】(5分)
查询每个部门中月工资***的“职工号”的SQL查询语句如下。
Select 职工号 from 职工E
where 月工资=(Select Max(月工资)
from职工as M
where M.部门号=E.部门号)
(1)请用30字以内文字简要说明该查询语句对查询效率的影响。
(2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。
【问题3】答案解析:
这是一道要求考生分析查询效率的综合分析题。通常在涉及相关查询的某些情形中,构造临时关系可以提高查询效率。
(1)试题中所给出的SQL查询语句,对于外层的职工关系E中的每一个元组,都要对内层的整个职工关系M进行检索,因此查询效率不高。
(2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。
解答思路①
改正后的SQL语句使用了临时表。
Select Max(月工资) as ***工资,部门号 into Temp from职工
Group by部门号
Select 职工号 from职工,Temp
where月工资=***工资 and 职工。部门号=Temp.部门号
解答思路②
Select 职工号 from 职工,(Select Max(月工资) as ***工资,部门号 Group by 部门号)
as depMax
where 月工资=***工资 and 职工。部门号=depMax.部门号
【问题4】(2分)
假定分别在“职工”关系中的“年龄”和“月工资”字段上创建了索引,如下的Select查询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的SQL语句。
Select 姓名,年龄,月工资 from 职工
where 年龄>45 or 月工资<1000;
【问题4】答案解析:
本试题所给出的原Select查询语句中使用了条件or,系统在查询的时候将对全表进行扫描,不会促使查询优化器使用索引,从而降低了查询效率。
既可以完成相同功能又可以提高查询效率的SQL语句修改如下。
Select 姓名,年龄,月工资 from 职工
where 年龄>45;
union
Select 姓名,年龄,月工资 from 职工
where 年龄 月工资<1000;
【问题5】(3分)
该数据库系统在设计时,采用了异构数据库技术。请给出目前3种通用的异构数据库查询技术。
【问题5】答案解析:
这是一道要求考生掌握异构数据库的基本概念题。本题所涉及的知识点如下。
异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有各自的DMBS。
异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有各自的应用特性、完整性控制和安全性控制。目前通用的异构数据库查询技术包括公共数据库网关技术、公共协议技术和公共编程接口技术。
【附】
关系模式的标记规则如下。
关系名(属性名1,属性名2,…,属性名n)
其中:①若该属性仅为主键属性时,则该属性名下画实下画线;
②若该属性仅为外键属性时,则该属性名下画虚下画线;
③若该属性既是主键属性,又是外键属性时,则在该属性名下画实下画线和虚下画线;
④若该属性既不是主键属性,又不是外键属性时,则在该属性名下不做标记。
【编辑推荐】