问答题
[说明] 某软件开发公司决定结合自身工作的需求开发设计本公司的项目工作管理系统,由郭工程师承担数据库的设计工作。公司项目管理的需求分析如下。
(1) 组织机构:该公司有多个部门,每个部门有多个职员和多个办公室,每个办公室有一部电话。当部门变更时更换新的部门代码。职员辞职后,若再次被聘用仍使用辞职前的代码。被聘用职员担任某职务,职务用职务代码来标识。职务分为:工程师、高级工程师、经理助理和经理等。职员的工资根据等级区分,共分为S、A、B、C、D 5个等级。一个职务对应某个等级,一个等级对应多个职务。职员月工资等于职员月工作时间(小时)乘以小时工资。职员的人事变动及职位变更(升级、降级)在月初进行。
(2) 项目管理:项目用项目代码标识,使用过的项目代码不能重复使用。一个部门可承担多个项目,但一个项目仅由一个部门承担。一个项目有一名项目主管和多个职员,一个职员可参加多个项目。项目代码由系统自动生成,一旦项目建立,项目名、部门代码及起始年月日将不能再变更。
(3) 项目的工作管理流程为:项目工作计划输入(初始计划)→工作业绩输入→业绩生成(每月一次)→计划修正(每月一次)。
① 项目工作计划输入:项目主管使用如表8-3所示的计划输入界面,输入项目代码、职员代码,以及职员参加某个项目的月工作时间(计划)。表中空白区域为可输入项。
② 工作业绩输入:输入职员每天参加各个项目的工作时间。如表8-4所示为工作业绩输入界面,表中空白区域为可输入项。其中,出勤时间由考勤系统管理,指定项目代码的顺序可以不同,并且一天可以输入多个项目代码,但同一个项目代码不能重复输入。
问答题
请使用“关系模式标记规则”,给出“部门”、“等级”、“项目”和“工作计划”关系模式的主键和外键。
【正确答案】 部门(部门代码,部门名,起始年月,终止年月,办公室,办公电话) 等级(等级代码,等级名,年月,小时工资) 项目(项目代码,项目名,部门代码,起始年月日,结束年月日,项目主管) 工作计划(项目代码,职员代码,年月,工作时间)
【答案解析】 [解析]
这是一道要求读者根据题目给定的关系模式,以及属性问的函数依赖关系和给定的关系实例,并结合E-R图向关系模式的转换方法来确定各关系模式主键和外键的综合分析题,本试题的解答思路如下。
(1) 设K为R(U,F)中的属性的组合,若K→U,且对于K的任何一个真子集K,都有K不能决定U,则K为R的候选码(候选关键字),若有多个候选码,则选一个作为主码(主键)。
(2) 部门关系模式的主键和外键。
由题干中给出的关键信息“该公司有多个部门,每个部门有多个职员,多个办公室”可知,部门代码多值决定办公室,如果仅用“部门代码”作为主键,则无法唯一区分部门关系中的每一个元组(记录)。如果用(部门代码,办公室)作为主键,则可以唯一区分部门关系中的每一个元组,因此,部门关系模式的主键如下。
部门(
部门代码 ,部门名,起始年月,终止年月,
办公室 ,办公电话)
(3) 等级关系模式的主键和外键。
由题干中给出的关键信息“一个职务对应某个等级,一个等级对应多个职务”、“职员月工资等于职员月工作时间(小时)乘以小时工资”和“职员的人事变动及职位变更(升级、降级)在月初进行”可知,如果仅用“等级代码”作为主键,则无法唯一区分等级关系中的每一个元组,这是因为对于同一个等级在不同的时期小时工资值不一定一样。例如,等级1在2007年6月小时工资为10元,可能到2007年10月小时工资为15元。可见用(等级代码,年月)作为主键,可以唯一区分等级关系中的每一个元组。因此等级关系模式的主键如下。
等级(
等级代码 ,等级名,
年月 ,小时工资)
(4) 项目关系模式的主键和外键。
由题干中给出的关键信息“项目用项目代码标识,使用过的项目代码不能重复使用”可知,项目代码可以决定项目关系中的全属性,因此,项目关系模式的主键是“项目代码”。在项目关系模式中,由于部门代码是部门关系的主键,因此“部门代码”应为项目关系模式的外键。同时考虑到项目主管应该来自职员,所以“项目主管”也是项目关系模式的外键。最后可得项目关系模式的主键和外键如下。
问答题
郭工程师设计的“部门”关系模式中存在什么问题?请用100字以内的文字简要说明理由。为了解决这个问题可将关系模式分解,请给出分解后的关系模式。(分解后的关系模式的关系名可依次取“部门_A”,“部门_B”……)
【正确答案】 部门关系模式属于第二范式,存在数据冗余问题,因为某部门有多少个办公室,部门代码、部门名、起始年月和终止年月就要重复多少次 分解后的关系模式如下 部门_A(部门代码,部门名,起始年月,终止年月) 部门_B(部门代码,办公室,办公电话)
【答案解析】 [解析] 郭工程师设计的“部门”关系模式中存在的主要问题是数据冗余,因为部门关系模式属于第二范式(或2NF)。“部门”关系模式的基本函数依赖集F1为: F1={部门代码→(部门名,起始年月,终止年月),部门代码→办公室,办公室→办公电话} 例如,假设某个部门有10个办公室,部门代码、部门名、起始年月和终止年月就要被重复10次。为了解决这个问题可将关系模式分解,分解后的关系模式如下。 部门_A(部门代码 ,部门名,起始年月,终止年月) 部门_B(部门代码,办公室 ,办公电话)
问答题
假定月工作业绩关系模式为:月工作业绩(职员代码,年月,工作时间),请将以下“查询职员代码、职员名、年月和月工资”SQL语句中的(3)~(5)空缺处的内容填写完整。 SELECT (3) FROM (4) WHERE (5)
【正确答案】 (3)职员代码,职员名,年月,工作时间*小时工资AS月工资 (4) 职员,职务,等级,月工作业绩 (5) 职员.职务代码=职务.职务代码 AND 职务等级代码=等级.等级代码 AND 等级.年月=月工作业绩年月 AND 职员.职员代码=月工作业绩.职员代码;
【答案解析】 [解析] 假定月工作业绩关系模式为:月工作业绩(职员代码,年月,工作时间),那么“查询职员代码、职员名、年月和月工资”的SQL语句如下。 SELECT 职员代码,职员名,年月,工作时间*小时工资 AS 月工资 FROM 职员,职务,等级,月工作业绩 WHERE 职员.职务代码=职务.职务代码 AND 职务.等级代码=等级.等级代码AND 等级.年月=月工作业绩.年月 AND 职员.职员代码=月工作业绩.职员代码;
提交答案
关闭