某公司销售数据库的商品、仓库关系模式及函数依赖集F1、F2如下:
商品(商品号,商品名称,生产商,单价),F1={商品号→商品名称,商品号→生产商,商品号→单价)},商品关系的主键是 (问题1) 。仓库(仓库号,地址,电话,商品号,库存量),F2={仓库号→(地址,电话),(仓库号,商品号)→库存量}。仓库关系的主键是 (问题2) ,外键是 (问题3) 。 仓库关系模式 (问题4) ,为了解决这一问题,需要将仓库关系分解为 (问题5) 。
关系数据库中,候选键是能函数决定关系所有属性的最小属性集合,主键是选定的候选键,可分为单属性主键,比如单个属性即可决定关系全部非主属性,与复合主键,需多个属性联合才能决定关系所有属性。外键是关系中引用其他关系主键的属性,用于建立表间的参照关联。当关系模式存在非主属性对主键的部分函数依赖时,会引发数据冗余、插入异常、删除异常及修改不一致等问题,此时需对模式进行规范化分解,至少达到第二范式(2NF),即消除非主属性对主键的部分函数依赖。分解需满足无损连接性与函数依赖保持性,通常做法是将仅依赖于主键中部分属性的非主属性拆分至单独关系,以该部分属性作为主键,剩余属性保留在以原复合主键或对应主键为核心的关系中,确保分解后既能通过连接还原原数据,又能保留原有的函数依赖关系。进一步的,第三范式(3NF)还需消除非主属性间的传递函数依赖,以此持续优化关系模式设计,提升数据库的稳定性与可维护性。
本题考察的是关系数据库的键与函数依赖、外键识别、规范化(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。
