【正确答案】
C
【答案解析】[解析] 依题意,同一种零件可由不同的供应商供应,一个供应商可以供应多种零件,因此“零件”实体与“供应商”实体之间存在联系“供应”,其联系的类型为多对多(m:n)。在表中,当使用“零件号”和“供应商”属性组合作为“零件”关系主键时,才可以唯一区分“零件”关系模式中的每一个元组。
由于“零件”关系模式存在非主属性对码的部分函数依赖:(零件号,供应商)→供应商所在地,但是供应商→供应商所在地,故该关系模式不是2NF,存在数据冗余以及插入异常和删除异常等问题。为了解决这些问题,需要将关系零件P模式分解成3NF范式集,即P1(零件号,零件名称)、P2(零件号,供应商,单价,库存量)和P3(供应商,供应商所在地)。分解后的关系模式零件P1、零件P2和零件P3消除了非主属性对码的部分函数依赖,同时不存在传递依赖,故达到3NF。
查询各种零件的平均单价、最高单价与最低单价之间差距的SQL语句为:
SELECT 零件号,零件名称,AVG(单价),MAX(单价)-MIN(单价)
FROM P
GROUP BY 零件号;
其中,GROUP子句完成按指定“零件号”列的值进行分组。
依题意,查询库存量大于等于100,小于等于500的零件“P1”的供应商及库存量的SQL语句应采用“零件名称='P1'AND库存量Between 100 AND500”,而要求供应商地址包含“西安”的供应商名的SQL语句应采用“供应商所在地like'%西安%'”。实现该查询需求的完整SQL语句如下。
SELECT 零件名称,供应商名,库存量
FROM P
WHERE 零件名称='P1'AND 库存量 Between 100 AND 500
ANd 供应商所在地 like '西安%';