阅读下列说明,回答问题1至问题4。 [说明] 甲公司的经营销售业务目前是手工处理的,随着业务量的增长,准备采用关系数据库对销售信息进行管理。经销业务的手工处理主要涉及三种表:订单表、客户表和产品表(见表 2,表3和表4)。为了用计算机管理销售信息,甲公司提出应达到以下要求:产品的单价发生变化时,应及时修改产品表中的单价数据。客户购货计价采用订货时的单价?订货后,即使单价发生变化,计算用的单价也不变。 在设计数据库时,经销部的王先生建立了如图4所示的数据模型。其中,方框表示实体,单向箭头表示1对多的联系,双向箭头表示多对多的联系。
问答题 请按[说明]中的要求画出修改后的数据模型。
【正确答案】正确答案:如图1所示。
【答案解析】解析:订单的情况不能作为订单的属性处理而应该上升为实体,同时由于Order与Product是多对多的关系,所以应该拆分为一个名为 OrderDetail的关系模式。其中,Order和OrderDetail是一对多的关系, Produce和OrderDetail是一对多的关系。
问答题 (1)[说明]中的几个关系仍无法实现甲公司的要求,为什么?(2)需要在哪个关系中增加什么数据项才能实现这个要求?
【正确答案】正确答案:因为只有product记录了单价,一旦单价发生改变,用户订单地价格就会发生改变,因此,计算一张订单将采用新的单价,不符合要求。(2)有两种方法:一是在Order表中加入一项表示订单地产品总价,二是在Order表中加入产品单价,这两种方法都能满足要求。
【答案解析】
问答题 写出OrderDetail中的关键项。
【正确答案】正确答案:OrderNo,ProductNo
【答案解析】解析:在客户订商品中,一次订货下一个订单,一个订单可以有多种商品,即对应多个OrderDetail,也就是说,一个订单、一种商品确定一个OrderDetail,所以关键字是(OrderNo, produetNo)。
问答题 以下SQL语句用于查询没有订购产品代码为“1K10”的产品的所有客户名。请填补其中的空缺。 SELECT CustomerName FROM Customer(1) WHERE(2)(SELECT*FROM OrderDetail B, Order C WHERE B. ProductNo=C.ProductNo AND B. ProductNo='1K10' AND C. CustomerNo=A. CustomerNo)
【正确答案】正确答案:A或AS(2)NOT EXIST
【答案解析】解析:在SQL语句的最后一行中出现了字符A,而其他地方没有给出字符A的含义,所以第一个空只能填A,表示Customer表的简称。子查询的含义是“定购产品代码是'1K10'产品的所有客户名”,那么根据题意空二应该是:NOT EXIST。