【问题2】
(1)产品编号
(2)工厂编号
(3)经销商编号
(4)产品编号
注:(2)~(4)顺序可以互换。
【问题3】
(5)工厂编号,经销商编号,产品编号,销售时间
(6)工厂编号,产品编号,生产时间
(7)厂长
【问题4】
a.经销商关系属于第2范式:
经销商(经销商编号,公司名称,联系人,联系电话,所属区域,区域负责人)关系的主码是经销商编号,而存在函数依赖;
经销商编号→所属区域,所属区域→区域负责人,经销商编号→区域负责人
因此存在传递函数依赖,但不存在部分依赖,属于第2范式。
b.第三范式不能存在部分函数依赖及传递函数依赖,需将经销商关系分解为:
经销商(经销商编号,公司名称,联系人,联系电话,所属区域)
区域(所属区域,区域负责人)
本题考查数据库概念结构设计、概念模型向关系模型转换的方法及规范化处理过程的相关知识。
【问题1】
从“一个工厂仅设一位厂长,且这位厂长同时是工厂的员工之一”以及“每位员工仅服务于一个工厂”的信息中,我们可以推断出工厂与其厂长(同时身为员工)之间存在一对一的关联关系;而从“每个工厂会雇佣多名员工,且每位员工仅服务于一个工厂”的表述中,我们了解到工厂与员工之间是一对多的关联关系;再者,“经销商能够从多个工厂采购并销售多种产品”的情况表明,经销商、工厂以及产品之间形成了一个多对多的三元关联关系。这些关系在完整的实体-关系(ER)图中得到了清晰的展示,如图下图所示。
【问题2】
由“一个工厂可以生产多种产品”和“一种产品也可以在多个工厂生产”,所以“生产”要包含工厂的主码及产品的主码;故(1)产品编号
因为销售是一个工厂、产品、经销商之间的多对多三元联系,所以“销售”要包括工厂编号、产品编号、经销商编号;故(2)工厂编号,(3)产品编号,(4)经销商编号。三者顺序可以打乱
生产(工厂编号,产品编号,任务数量,生产时间)
销售(工厂编号,产品编号,经销商编号,销售时间,数量)
【问题3】
主键是用来唯一标识表中每条记录的字段或字段组合,而外键则是用来建立表与表之间关联的字段。
在生产关系中,工厂编号和产品编号都是生产关系的外键,因为它们分别指向工厂关系表和产品关系表;但如果只有(工厂编号,产品编号)作为生产关系的联合主键,不足以区分同一天内的不同时间的生产任务(如果存在多个批次的话),所以为了确保唯一性,我们要将“生产时间”作为主键的一部分;
同理,在销售关系中,因为同一个经销商在同一个工厂购买同一产品,如果不加上时间去区别的话,那么以工厂编号、经销商编号、生产编号为主键,这个主键肯定会在记录中重复,不能够指定唯一的一条记录;所以应该用(工厂编号,产品编号,经销商编号,销售时间)作为销售关系的联合主键;
在工厂关系中,因为厂长存在与员工表中,所以厂长是工厂关系的外键。
【问题4】
a.经销商(经销商编号,公司名称,联系人,联系电话,所属区域,区域负责人)关系的主码是经销商编号,而存在函数依赖:
经销商编号→所属区域,所属区域→区域负责人,经销商编号→区域负责人
因此存在传递函数依赖,但不存在非主属性(即除经销商编号外的其他属性)部分依赖于主码的情况,因此经销商关系属于2NF。
b.根据规范化定义,第三范式(3NF)要求关系中不能存在非主属性对主码的部分函数依赖以及传递函数依赖。为了消除这些依赖关系,我们通常采用模式分解的方法:
? 经销商(经销商编号,公司名称,联系人,联系电话,所属区域),其中经销商编号为主码。存在函数依赖:经销商编号→公司名称,经销商编号→联系人,经销商编号→联系电话,经销商编号→所属区域;
? 区域(所属区域,区域负责人),其中所属区域为主码。存在函数依赖:所属区域→区域负责人;
经过这样的分解后,两个关系都不再存在非主属性对主码的部分函数依赖及传递函数依赖,因此它们都符合第三范式(3NF)的要求。