[说明]
某公司的生产管理部门拟开发生产计划管理系统,该系统负责管理生产计划信息,记录生产安排和采购的情况。现有的表格信息如表8-8~表8-10所示。
根据上述需求设计的生产计划数据库的关系模式如图8-8所示。
关系模式的主要属性、含义及约束如表8-11所示。
该公司的生产管理部门可根据需求制订多个生产计划,每个生产计划包含多个生产产品。一个生产产品可由多个生产小组共同生产。一个产品基于固定数量的用料来生产。公司有多个供应商,每个供应商可以提供若干种材料,每种材料可以由多个供应商提供。公司根据不同的生产计划,从供应商处购买材料。
属性间的函数依赖关系如下。
(1) 对于“采购”关系模式。
采购单号→供应商,地址,电话,总价格,日期
采购单号,材料编号→数量
供应商,材料编号→单价
供应商→地址,电话
(2) 对于“生产计划”关系模式。
生产计划编号→生产计划名称,起始时间,截止时间,预算总金额
生产计划编号,产品编号→生产数量
产品编号→产品名称
生产小组编号→生产小组名称
生产计划编号,生产小组编号,产品编号→安排人力
生产计划编号,产品编号→→生产小组编号,安排人力
(3) 对于“产品用料”关系模式。
材料编号→材料名称,单位
产品编号,材料编号→材料数量
1. 对关系“采购”,请回答以下问题。
(1) 若“采购”关系中不考虑折扣情况,则该关系是否存在派生属性若存在,请指出其中的派生属性。
(2) 针对“采购”关系,请用100字以内的文字简要说明会产生什么问题。
(3) 分解“采购”关系,分解后的关系名依次为:采购1,采购2……
参考答案:(A)存在派生属性“总价格”。总价格可以根据数量和单价计算出来
(B) “采购”关系不满足第二范式,会造成插入异常、删除异常和修改复杂(或修改异常)
(C) 分解后的关系模式如下
采购A(采购单号,总价格,日期)
采购B(供应商,地址,电话)
采购C(供应商,材料编号,单价)
采购D(采购单号,供应商,材料编号,数量)
解析:
这是一道要求读者掌握派生属性基本概念、第二范式和第三范式的综合分析题,本题的解答思路如下。
(1) 派生属性是指可以由其他属性经过计算获得的属性,这类属性在设计关系模式中通常不进行存储,会因为冗余而容易产生不一致性。
依题意,若“采购”关系中不考虑折扣情况,则该关系存在派生属性“总价格”。因为“总价格”可以根据“数量”和“单价”计算得出。
(2) 范式的判定可通过范式定义来实现。应从1NF入手,然后2NF、3NF等一步步判定。1NF的判定是分析属性类型,如含有组合属性则不属于1NF。再根据函数依赖集,确定关系的候选码和非主属性,考查函数依赖集,不存在非主属性对码的部分依赖为2NF,不存在非主属性对码的传递依赖为3NF,函数依赖的左部包含码为BCNF,只有平凡的多值依赖为4NF。
根据图8-8、表8-11、各属性间的函数依赖关系和题干相关描述信息,可得到如下各关系模式的主键。
生产计划(生产计划编号,生产计划名称,起始时间,截止时间,预算总金额,产品编号,产品名称,生产数量,生产小组编号,生产小组名称,安排人力)
产品用料(产品编,材料编号,材料名称,材料数量,单位)
采购(采购单号,供应商,地址,电话,材料编号,数量,单价,总价格,日期)
根据“采购”关系的函数依赖可知,“采购”的码为(采购单号,供应商,材料编号),而又存在部分函数依赖如下所示。
采购单号→(供应商,地址,电话,总价格,日期)
供应商→(地址,电话)
(供应商,材料编号)→单价
由于第二范式(2NF)要求:每个非主属性完全函数依赖于码,因此“采购”关系模式不满足第二范式(2NF),不满足BCNF的关系模式往往会造成插入异常、删除异常和修改复杂(或修改异常)等问题,这也是规范化的根本原因所在。
(3) 因为存在部分函数依赖,所以需要对“采购”进行分解,分解后的关系模式及其主键如下。
采购1(采购单号,总价格,日期)
采购2(供应商,地址,电话)
采购3(供应商,材料编号,单价)
采购4(采购单号,供应商,材料编号,数量)
其中,“采购1”关系的函数依赖为:
(采购单号)→(总价格,日期)
“采购2”关系的函数依赖为:
(供应商)→(地址,电话)
“采购3”关系的函数依赖为:
(供应商,材料编号)→单价
“采购4”关系的函数依赖为:
(采购单号,供应商,材料编号)→数量
这4个关系中的每一个非主属性既不部分依赖于码,也不传递依赖于码,因此满足第三范式的要求。