设计一的关系模式Invoice最高满足第几范式?为什么?设计一和设计二哪个更加合理?为什么? 设计二中关系Merchandise中由属性price表示商品价格,关系lnvoicedetail中的属性 unitprice也表示商品价格。两个是否有必要同时存

admin2013-01-05  22

问题 设计一的关系模式Invoice最高满足第几范式?为什么?设计一和设计二哪个更加合理?为什么?
设计二中关系Merchandise中由属性price表示商品价格,关系lnvoicedetail中的属性 unitprice也表示商品价格。两个是否有必要同时存在?为什么?

选项

答案有必要。Merchandise中由属性price表示的是商品的当前价格,超市中的价格是有可能变动的,而关系Invoicedetail中的属性 unitprice表示的是在开具发票时该商品的单价。

解析 设计一中根据题意可得出以下函数依赖:
   Ino→Sno,Cno,ldate
   而关系Invoice的主码是Ino和Mno。非主属性Sno、Cno和Idate并非完全依赖于主码,因此关系Invoice不满足第二范式,最高满足第一范式。
   关系Invoice的设计的不合理在于该关系中将发票的单值属性(发票号码  Ino  ,交易日期Idate,顾客代码Cno,收银员代码Sno)和多值属性(商品代码  Mno  ,单价unitprice,数量amount)混合在一个关系中,造成关系Invoice的冗余异常、修改异常和删除异常。而设计二则将设计一中关系Invoice分解,使得发票的单值属性和多值属性分开,避免了异常。因此,设计二明显比设计一要好。
   问题2是要建立2005年1月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图。
   首先建立视图的格式为CREATE VIEW<视图名>AS<视图定义>,因此(1)空的答案为AS。
   本查询是从Invoice和Invoicedetail两个关系中查询,两关系的连接条件是两关系的Ino相等,因此(4)空的答案是Invoice. Ino=Invoice- detail.Ino。
   统计每张发票的信息需要按发票将数据分组,也就是按发票号Ino分组,但因为查询关系Invoice和Invoicedetail都有属性Ino。为了避免二义性,所以分组属性是Invoice. Ino或者是Invoieedetail. Ino。因为在包含聚合运算的Select子句中,只有在Group By子句中出现的属性才能在SELECT子句中以非聚合形式出现,而SELECT子句中有非聚合形式的属性Idate出现,所以(5)空的答案是Invoice. Ino. Idate或Invoicedetail. Ino. Idate。
   需要查询的是每张发票的交易商品件数和交易总金额。交易商品件数是发票商品数量的总和,因此(2)空的答案是SUM(amount)。交易总金额是每条交易商品明细中每条记录商品金额的总和,每条记录商品金额是unitprice*amount,因此(3)空的答案是SUM(unitprice*a- mount)。
   问题3是查询从未售出的商品信息。
   SQL语句中有两种格式为表或视图取别名:“表名AS别名”或“表名  别名”。由题中可以看出Merchandise的别名是A,因此填空(1)的答案是A或者AS A。
   要查询“从未出售”的商品,也就是要查询的商品在交易记录中不存在,因此(2)空的答案是NOT EXISTS。
   Merchandise中由属性price表示的是商品的当前价格,超市中的价格是有可能变动的,而关系Invoicedetail中的属性unitprice表示的是在开具发票时该商品的单价。如果缺少其中任意一个,将导致商品单价不能进行调整,否则,当商品的单价发生变化时,销售历史中的商品价格就随着发生变化。
转载请注明原文地址:https://jikaoti.com/ti/rpi7FFFM
0

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