【答案解析】[解析] 本题考查应试者对关系模式中主键、外键和模式分解及相关知识的掌握程度。
从商品关系的函数依赖集F1可以导出商品号决定商品关系的全属性,所以商品号是商品关系的主键。
从仓库关系的函数依赖集F2可以导出(仓库号,商品号)决定仓库关系的全属性,所以仓库关系的主键是(仓库号,商品号)。又由于商品号是商品关系的主键,故商品号是仓库关系的外键。
仓库关系存在冗余、插入异常和删除异常,以及修改操作的不一致。例如,仓库号为“12”的商品有3种,其地址就要重复3次,如表1所示,故仓库关系存在冗余。
{{B}}表1 仓库关系{{/B}}
|
| 仓库号 |
地址 |
电话 |
商品号 |
库存量 |
| 12 |
高新路6号 |
8601 |
100024 |
168 |
| 12 |
高新路6号 |
8601 |
100025 |
568 |
| 12 |
高新路6号 |
8601 |
230023 |
398 |
| 13 |
友谊路6号 |
8602 |
150004 |
2600 |
| 13 |
友谊路6号 |
8602 |
160005 |
1218 |
| ... |
... |
... |
... |
... |
最后一空的正确答案是D。为了解决仓库关系模式存在的问题需要进行模式分解,其中,选项A分解存在的问题是仓库2不属于第三范式,因为存在非主属性对码的部分函数依赖,即仓库号→电话。选项B分解存在的问题是分解有损连接,即分解的新关系模式仓库1和仓库2无法恢复到原关系。选项C分解存在的问题与A类同,分析略。 选项D分解即保持函数依赖,又无损连接,分解的结果如下:
{{B}}表2 仓库1{{/B}}
|
| 仓库号 |
地址 |
电话 |
| 12 |
高新路6号 |
8601 |
| 13 |
友谊路6号 |
8602 |
{{B}}表3 仓库2{{/B}}
|
| 仓库号 |
商品号 |
库存量 |
| 12 |
100024 |
168 |
| 12 |
100025 |
568 |
| 12 |
230023 |
398 |
| 13 |
150004 |
2600 |
| 13 |
160005 |
1218 |
| ... |
... |
... |