问答题
阅读以下关于项目工作管理系统的数据库设计说明,根据要求回答问题1~问题4。
[说明]
某软件开发公司,决定结合自身工作的需求开发设计本公司的项目工作管理系统,由郭工程师承担数据库的设计工作。公司项目管理的需求分析如下。
1.组织机构。该公司有多个部门,每个部门有多个职员、多个办公室,每个办公室有一部电话。当部门变更时更换新的部门代码。职员辞职后,若再次被聘用仍使用辞职前的代码。被聘用职员担任某职务,职务用职务代码来标识。职务分为:工程师、高级工程师、经理助理、经理等。职员的工资根据等级区分,共分为S、A、B、C、D 5个等级。一个职务对应某个等级,一个等级对应多个职务。职员月工资等于职员月工作时间(小时)乘以小时工资。职员的人事变动及职位变更(升级、降级)在月初进行。
2.项目管理。项目用项目代码标识,使用过的项目代码不能重复使用。一个部门可承担多个项目,但一个项目仅由一个部门承担。一个项目有一名项目主管和多个职员;一个职员可参加多个项目。项目代码由系统自动生成,一旦项目建立,项目名、部门代码及起始年月日不能再变更。
3.项目的工作管理流程为:项目工作计划输入(初始计划)→工作业绩输入→业绩生成(每月一次)→计划修正(每月一次)。
①项目工作计划输入。项目主管使用如图1-9所示的计划输入界面,输入项目代码、职员代码、职员参加某个项目的月工作时间(计划)。图中空白区域为可输入项。
{{B}}项目代码{{/B}}
{{B}}123456{{/B}}
{{B}}项目名{{/B}}
{{B}}ABCD{{/B}}
{{B}}部门代码{{/B}}
{{B}}03{{/B}}
{{B}}部门名{{/B}}
{{B}}开发部{{/B}}
{{B}}起始年月日{{/B}}
{{B}}2007-06-11{{/B}}
{{B}}结束年月日{{/B}}
{{B}}2007-11-31{{/B}}
{{B}}登陆时间{{/B}}
{{B}}2007-05-28{{/B}}
{{B}}职员代码{{/B}}
{{B}}职员名{{/B}}
6月
7月
8月
9月
10月
11月
12月
1月
2月
3月
4月
5月
合计
0302
小郭
120
180
180
180
180
180
1020
0316
小谢
120
180
180
150
150
150
930
0309
张三
90
150
150
180
180
180
930
0328
李四
120
180
180
120
120
90
870
0321
王五
90
150
150
150
150
90
810
  ②工作业绩输入。输入职员每天参加各个项目的工作时间。如图1-10所示为工作业绩输入界面,图中空白区域为可输入项。其中,出勤时间由考勤系统管理,指定项目代码的顺序可以不同,并且一天可以输入多个项目代码,但同一个项目代码不能重复输入。
{{B}}职工代号{{/B}}
{{B}}0302{{/B}}
{{B}}职员名{{/B}}
{{B}}小郭{{/B}}
{{B}}输入年月{{/B}}
{{B}}2007{{/B}}
{{B}}6月{{/B}}
{{B}}年月日{{/B}}
{{B}}星期{{/B}}
{{B}}出勤时间{{/B}}
{{B}}每个项目的工作时间{{/B}}
{{B}}项目代码{{/B}}
{{B}}工作时间{{/B}}
{{B}}项目代码{{/B}}
{{B}}工作时间{{/B}}
{{B}}备注{{/B}}
2007-06-11
12.0
123456
8.0
345678
4.0
2007-06-12

15.0

123456
10.0
345678
5.0
2007-06-13
18.0
123456
15.0
345678
3.0
2007-06-14
15.0
123456
15.0
2007-06-15
18.0
123456
18.0
2007-06-16
10.0
123456
10.0
2007-06-17
0.0
③业绩生成。月底汇总职员的当月工作业绩,生成月工作业绩表。
④计划修正。项目主管根据项目进度修改以后的工作计划。
郭工程师根据公司的项目需求将数据库关系模式设计如下:
部门(部门代码,部门名,起始年月,终止年月,办公室,办公电话);
职务(职务代码,职务名);
等级(等级代码,等级名,年月,小时工资);
职员(职员代码,职员名,部门代码,职务代码,任职时间);
项目(项目代码,项目名,部门代码,起始年月日,结束年月日,项目主管);
工作计划(项目代码,职员代码,年月,工作时间)。
问答题
[问题1]
请使用“关系模式标记规则”(见本题附内容,全书同),给出“部门”、“等级”、“项目”和“工作计划”关系模式的主键和外键。
【正确答案】
【答案解析】[问题1] 这是一道要求读者根据题目给定的关系模式,以及属性间的函数依赖关系和给定的关系实例,并结合 E-R图向关系模式的转换方法来确定各关系模式主键和外键的综合分析题。本试题的解答思路如下。 ①设K为R(U,F)中的属性的组合,若K→U,且对于K的任何一个真子集K',都有K'不能决定U,则K为R的候选码(候选关键字),若有多个候选码,则选一个作为主码(主键)。 ②部门关系模式的主键和外键。 由题干中给出的关键信息“该公司有多个部门,每个部门有多个职员、多个办公室”可知,部门代码多值决定办公室,如果仅用(部门代码)作为主键,则无法唯一区分部门关系中的每一个元组(记录)。如果用(部门代码,办公室)作为主键,则可以唯一区分部门关系中的每一个元组,因此,部门关系模式的主键如下。 部门({{U}}部门代码{{/U}},部门名,起始年月,终止年月,{{U}}办公室{{/U}},办公电话) ③等级关系模式的主键和外键。 由题干中给出的关键信息“一个职务对应某个等级,一个等级对应多个职务”,“职员月工资等于职员月工作时间(小时)乘以小时工资”,“职员的人事变动及职位变更(升级、降级)在月初进行”可知,如果仅用“等级代码”作为主键,则无法唯一区分等级关系中的每一个元组,这是因为对于同一个等级在不同的时期小时工资值不一定一样。例如,等级1在2007年6月小时工资为10元,可能到2007年10月小时工资为15元。可见用(等级代码,年月)作为主键,可以唯一区分等级关系中的每一个元组。因此等级关系模式的主键如下。 等级({{U}}等级代码{{/U}},等级名,{{U}}年月{{/U}},小时工资) ④项目关系模式的主键和外键。 由题干中给出的关键信息“项目用项目代码标识,使用过的项目代码不能重复使用”可知,项目代码可以决定项目关系中的全属性,因此,项目关系模式的主键是“项目代码”。在项目关系模式中,由于部门代码是部门关系的主键,因此“部门代码”应为项目关系模式的外键。同时考虑到项目主管应该来自职员,所以“项目主管”也是项目关系模式的外键。最后可得项目关系模式的主键、外键如下。 项目({{U}}项目代码{{/U}},项目名,,起始年月日,结束年月日,
问答题
[问题2]
请将以下关系模式中的(1)和(2)空缺处填入属性名称(要求使用题干说明中已有的属性名称)。
(1)郭工程师设计的关系模式不能管理职务和等级之间的关系,可以通过修改“职务”关系模式来实现。修改后的关系模式为:
职务({{U}} (1) {{/U}})
(2)为了管理公司职员参加各项目每天的工作业绩,需设计工作业绩关系模式为:
工作业绩({{U}} (2) {{/U}})
【正确答案】
【答案解析】[问题2] 郭工程师所设计的关系模式不能管理职务和等级之间的关系,为此可以在“职务”关系模式中增加属性“等级代码”来实现,修改后的关系模式如下。 职务({{U}}职务代码{{/U}},职务名,{{U}}等级代码{{/U}}) 为了管理公司职员参加各项目每天的工作业绩,需设计工作业绩的关系模式。根据图1-10所给出的工作业绩输入界面实例分析,可得工作业绩关系模式如下。 工作业绩({{U}}项目代码,职员代码,年月日{{/U}},工作时间)
问答题
[问题3]
郭工程师设计的“部门”关系模式中存在什么问题?请用100字以内的文字简要说明理由。为了解决这个问题可将关系模式分解,请给出分解后的关系模式(分解后的关系模式的关系名可依次取“部门_A”、“部门_B”、……)。
【正确答案】
【答案解析】[问题3] 郭工程师设计的“部门”关系模式中存在的主要问题是数据冗余,因为部门关系模式属于2范式(或 2NF)。“部门”关系模式的基本函数依赖集F1为: F1={部门代码→(部门名,起始年月,终止年月),部门代码→办公室,办公室→办公电话) 例如,假设某个部门有10个办公室,部门代码、部门名、起始年月、终止年月就要被重复10次。为了解决这个问题可将关系模式分解,分解后的关系模式如下。 部门_A({{U}}部门代码{{/U}},部门名,起始年月,终止年月) 部门_B(部门代码,{{U}}办公室{{/U}},办公电话)
问答题
[问题4]
假定月工作业绩关系模式为:月工作业绩(职员代码,年月,工作时间),请将以下“查询职员代码、职员名、年月、月工资”SQL语句中(3)~(5)空缺处的内容填写完整。
SELECT{{U}} (3) {{/U}}
FROM{{U}} (4) {{/U}}
WHERE {{U}}(5) {{/U}}
[附]
关系模式的标记规则如下:
关系名(属性名1,属性名2,…,属性名n)
其中:
①若该属性仅为主键属性时,则该属性名下画实下画线;
②若该属性仅为外键属性时,则该属性名下画虚下画线;
③若该属性既是主键属性,又是外键属性时,则在该属性名下画实下画线和虚下画线;
④若该属性既不是主键属性,又不是外键属性时,则在该属性名下不做标记。
【正确答案】
【答案解析】[问题4] 假定月工作业绩关系模式为:月工作业绩(职员代码,年月,工作时间),那么“查询职员代码、职员名、年月、月工资”的SQL语句如下。