某公司销售数据库的商品、仓库关系模式及函数依赖集F1、F2如下:
商品(商品号,商品名称,生产商,单价),F1={商品号→商品名称,商品号→生产商,商品号→单价)},商品关系的主键是 (问题1)。仓库(仓库号,地址,电话,商品号,库存量),F2={仓库号→(地址,电话),(仓库号,商品号)→库存量}。仓库关系的主键是(问题2),外键是(问题3)。 仓库关系模式(问题4),为了解决这一问题,需要将仓库关系分解为(问题5)。
本题考察的是关系数据库的键与函数依赖、外键识别、规范化(2NF/3NF)、无损连接与依赖保持分解。
小题1:
A选项商品号:由F1得知商品号→商品名称、生产商、单价,商品号函数决定商品关系的全部非主属性,因此商品号是候选键且为主键,正确。
B选项商品号,商品名称:包含了超键但不最小,不是主键的最小属性集,错误。
C选项商品号,生产商:同理,包含冗余属性,不满足最小性,错误。
D选项商品名称,生产商:F1无法推出两者联合决定单价与其他属性,不是键,错误。
选择选项 A。
小题2:
A选项仓库号:由F2仅能推出地址、电话,无法决定库存量,不是键,错误。
B选项仓库号,商品号:有(仓库号,商品号)→库存量,且仓库号→地址、电话,合在一起可函数决定关系中全部属性,为候选键,正确。
C选项仓库号,电话:电话由仓库号决定,不增加决定能力,仍不能决定库存量,错误。
D选项地址,电话:二者由仓库号决定,不可能成为键,错误。
选择选项 B。
小题3:
A选项仓库号:题中未给出独立“仓库”主表,仓库号不构成对外参照,错误。
B选项地址:非键属性,且没有被其他表引用,错误。
C选项电话:同上,错误。
D选项商品号:商品表以商品号为主键,仓库表中的商品号引用商品表,因此商品号是外键,正确。
选择选项 D。
小题4:
A选项存在冗余、插入异常和删除异常,以及修改操作的不一致:仓库基本信息(地址、电话)只依赖仓库号,却与商品号、库存量放在同一关系中,导致非主属性对码的部分函数依赖与重复存储,出现冗余;新增某仓库但暂时无商品会遇到插入异常;删除该仓库最后一条商品库存记录会误删仓库基本信息产生删除异常;更新同一仓库的地址/电话需改多行易不一致,表述全面,正确。
B选项不存在冗余:与事实相悖,仓库地址、电话在同一仓库的多种商品记录中会重复出现,错误。
C选项不存在修改不一致:更新仓库属性需多行同步,显然可能不一致,错误。
D选项不存在冗余、插入异常:与上述分析不符,错误。
选择选项 A。
小题5:
目标是无损连接且尽量保持函数依赖,并消除部分函数依赖,使关系达到至少第二范式。
A选项仓库1(仓库号,地址) + 仓库2(仓库号,电话,商品号,库存量):在仓库2中电话仍只依赖仓库号而与商品号无关,存在对码的部分函数依赖,不满足2NF,错误。
B选项仓库1(仓库号,地址,电话) + 仓库2(商品号,库存量):仓库2缺少仓库号,无法表达(仓库号,商品号)→库存量,依赖不被保持;且两表公共属性为空集,分解有损连接,错误。
C选项仓库1(仓库号,电话) + 仓库2(仓库号,地址,商品号,库存量):在仓库2中地址仍只依赖仓库号,存在部分依赖,不满足2NF,错误。
D选项仓库1(仓库号,地址,电话) + 仓库2(仓库号,商品号,库存量):将仅依赖仓库号的属性(地址、电话)单独放入以仓库号为键的关系;将关于库存的依赖(仓库号,商品号)→库存量放入另一关系。两表以仓库号连接,且仓库号是R1的键,满足无损连接条件;依赖仓库号→地址、电话与 (仓库号,商品号)→库存量分别在各自子模式中被保持,正确。
选择选项 D。
