请按说明中的要求画出修改后的数据模型。 以下SQL语句用于查询没有订购产品代码为“1K10”的产品的所有客户名。请填补其中的空缺。 SELECT CustomerName FROM Customer (1) WHERE (2)

admin2009-05-15  34

问题 请按说明中的要求画出修改后的数据模型。
以下SQL语句用于查询没有订购产品代码为“1K10”的产品的所有客户名。请填补其中的空缺。
   SELECT CustomerName FROM Customer  (1)  
   WHERE  (2)  
   (SELECT * FROM OrderDetml B,Order C
   WHERE B.ProductNo=C.ProductNo
   AND B.ProductNo=’1KIO’
   AND C.CustomerNo=A.CustomerNo)

选项

答案(1) A或ASA (2) NOT EXIST

解析 问题1是修改数据模型。一个客户可以下多张订单,一张订单只属于一个客户,所以客户与订单之间是一对多关系;一张订单有多条订单项目,一条订单项目只属于一张订单,因此订单与订单项目之间是一对多关系;一条订单项目只包含一种产品,一种产品可以出现在多条订单项目中,故订单项目与产品之间是多对一关系。因此可得修改后的数据模型如下:
        
   甲公司有如下要求;“客户购货计价采用订货时的单价。订货后,即使单价发生变化,计算用的单价也不变。”但既没有在OrderDetail表中记录产品的单价,也没有在Order表中记录订单的总价,所以当产品单价发生变化时,订单总金额只能根据新单价重新计算,不能满足甲公司的要求。
    要满足上述要求,可有两种解决办法:一是在Order表中增加一个表示订单总金额的数据项,这样即使订货后单价发生改变,亦不必重新计算总金额,仍采用订货时的单价:另一种则是在OrderDetail表中增加表示产品单价的数据项,每一条订单项目都有对应产品单价,记录客户订货时的产品单价,这样产品单价发生变化后亦不影响。
   问题3是识别OrderDetail关系模式的主键。考虑到一个由订单号OrderNo唯一标识的订单包含多条订单项目,一种由产品编号ProductNo唯一标识的产品可以出现在多条订单项目中,因此OrderDetail表中的关键项应为“OrderNo,ProductNo”。
   问题4是填充SQL查询语句。由于内层查询中出现表名A,而其他地方并未定义A,因此空(1)应填as A(或直接填A),表示Customer表的简称。子查询表示选择出某一个客户的所有订单所包含的订单项目中含有产品“1K10”的订单和订单项目的详细信息。如果一个客户没有订购“1K10”产品,这个子查询将返回空,故空(2)应填“NOT EXIST”。
转载请注明原文地址:https://jikaoti.com/ti/ica7FFFM
0

相关试题推荐
最新回复(0)