参考答案:
【问题2】
(a)部门号,职位
(b)申请号,客房类型,客户号
(c)申请号,员工号
(d)申请号,员工号
关系模式为:
会议申请(申请号,客房类型,客户号#,开会日期,会议地点,持续天数,会议人数,预算费用,会议类型,酒店要求,会议室要求,客房数,联系人,联系方式,受理标志,员工号#)
策划任务(申请号#,员工号#,策划内容,参与人数,要求完成时间)
执行策划(申请号#,员工号#,实际完成时间)
【问题3】
会议申请存在数据冗余及数据修改的不一致性问题,应该将关系模式分解为如下两个模式:
会议申请1(申请号,客户号,开会日期,会议地点,持续天数,会议人数,预算费用,会议类型,酒店要求,会议室要求,联系人,联系方式,受理标志,员工号)
会议申请2(申请号,客房类型,客房数)。
详细解析:
本题考查数据库相关知识,涉及的知识点包括:ER模型、关系模式、主键、范式。
【问题1】
问题1考查考生对ER模型的理解。
本题主要考查根据题目描述补充完整ER图。
在解答本问题时,需要注意将题目描述与已给出的图进行对照分析。在题目中有“业务员负责受理会议申请。”,这说明业务员与会议申请之间有联系,联系的名称可直接取题目中的“受理”一词。同时,由于题目中有“若申请符合公司规定,则置受理标志并填写业务员的员工号”,这说明一个申请只由一个员工受理,但一个员工却可以受理多项业务,也就是说业务员与会议申请之间是1:n的关系。与此同时,通过常识加题目描述,可以意识到一个问题:对于会议申请只表明了受理人员,而谁来提出申请,并未直接说明。纵观系统全局,可以看出会议是由客户申请的。所以客户也与会议申请有联系,这种联系类型也是1:n。
从“一个已受理的会议申请对应一个策划任务,一个策划任务只对应一个已受理的会议申请,但—个策划任务可由多名策划员参与执行,且—名策划员可以参与多项策划任务。”可以得知,策划任务与策划员之间存在“执行”的联系,而且这种联系是n:m的。
从“每个部门有多名员工处理部门的日常事务,每名员工只能在一个部门工作。”可以看出,部门与员工之间存在联系,联系类型是1:n。从“每个部门有一名主管负责管理本部门的事务和人员。”可以看出,主管这个角色与部门之间存在联系,由于每个部门只有1名主管,而1名主管也只能负责1个部门的工作,所以他们之间的联系是1:1的。
【问题2】
当完成问题1的分析之后,问题2就很好解决了。其解题步骤的第一个环节,应是看题目已经给出的信息。例如,第(a)空要求补充员工关系,而题目中已经说明“员工信息包括员工号、姓名、部门号、职位、联系方式和工资”,此时,只要把缺失的“部门号,职位”填入即可。但有时,这一招并不能完全解决问题,例如第(b)空,从题目的描述“会议申请信息包括申请号、开会日期、会议地点、持续天数、会议人数、预算费用、会议类型、酒店要求、会议室要求、客房类型、客房数、联系人、联系方式、受理标志和业务员的员工号等。”可以得知,关系模式缺了申请号与客房类型,但补充这些是否足矣?不行,还缺了属性,即客户号,因为问题1中,已经分析了系统业务逻辑,应是由客户提出申请,所以需要记录客户号。
接下来分析会议申请的主键与外键。在会议申请这个关系模式中,由于存在“客房类型有豪华套房、普通套房、标准间、三人间等,且申请号和客房类型决定客房数。”的情况,所以有函数依赖:(申请号,客户类型)->客户数。同时其它所有属性都依赖于(申请号,客户类型)。所以(申请号,客户类型)是本关系模式的主键。而会议申请中的客户号是相对于客户关系的外键,员工号是相对于员工关系的外键。
(c)与(d)的内容补充,也需要进行分析才能得出结论,正是由于从题目中有“个已受理的会议申请对应一个策划任务,一个策划任务只对应一个已受理的会议申请,但—个策划任务可由多名策划员参与执行,且—名策划员可以参与多项策划任务。”,这说明“策划任务”与“执行策划”都与会议申请有关,所以这两个关系中,也需要有申请号。
在策划任务关系模式中申请号能确定员工号(因为策划部主管为已受理的会议申请制定策划任务,所以有确定的关系),也能确定策划内容,参与人数,要求完成时间。所以申请号是主键。同时,由于申请号与员工号在其它关系中充当主键,所以他们也是外键。
在执行策划关系中,由于“—个策划任务可由多名策划员参与执行,且一名策划员可以参与多项策划任务”,所以必须要(申请号,员工号)这个组合属性才能充当主键。同时这两个属性也是外键。
【问题3】
问题3要求分析关系模式“会议申请”存在的问题及解决方案。分析关系模式的问题,往往需要从关系模式的规范程度入手,规范程度不高的模式,可能出现:插入异常、修改异常、删除异常、数据冗余等问题。
在问题2的分析中,已经提到了会议申请关系的主键是:(申请号,客户类型)。但同时存在:申请号->开会日期、申请号->会议地点依赖关系,这就导致了部分依赖的产生。这使得数据冗余、修改异常等问题产生。解决的办法就是拆分。把:(申请号,客户类型,客户数)拆分为一个新表,而另一个表中去除客户类型与客户数,将申请号定义为主键。