问答题
【说明】
某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式如表1-1所示。
问答题
【问题1】
设计一的关系模式Invoice最高满足第几范式?为什么?设计一和设计二哪个更加合理?为什么?
【正确答案】
【答案解析】设计一中Invoice最高满足第一范式。 根据题意可得出以下函数依赖: Ino→Sno,Cno,Idate 而关系Invoice的主码是Ino和Mno。非主属性Sno、Cno和Idate并非完全依赖于主码,因此关系Invoice不满足第二范式,最高满足第一范式。 设计二更加合理。因为设计二解决了设计一中由于非主属性不完全依赖于主码而造成的数据冗余等问题。 [分析] 关系数据库设计的方法之一就是设计满足适当范式的模式,通常可以通过判断分解后的模式达到第几范式来评价规范化的程度。 1.1NF(第一范式):若关系模式R的每一个分量是不可再分的数据项,则关系模式R属于第一范式。 2.2NF(第二范式):若关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式属于第二范式。当1NF消除了非主属性对码的部分函数依赖,则称为2NF。 3.3NF(第三范式):若关系模式R(U,F)中若不存在这样的码X,属性组Y及非主属性 Z(ZY)使得X→Y,(Y→X)Y→Z成立,则关系模式属于3NF。即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。 4.BCNF(巴克斯范式):若关系模式R∈lNF,若X→Y且YX时,X必含有码,则关系模式属于BCNF。即当3NF消除了主属性对码的部分和传递依赖,则称为BCNF。 5.4NF(第四范式):关系模式ReINF,若对于R的每个非平凡多值依赖X→→Y且 Y
问答题
【问题2】
根据设计二中关系模式,以下SQL语句是用于“建立2005年1月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图”的不完整语句,请填补其中的空缺。
CREATE VIEW Invoice_total{{U}} (1) {{/U}}
SELECT Invoice. Ino, Idate,{{U}} (2) {{/U}},{{U}} (3) {{/U}}
FROM Invoice, Invoicedetail
WHERE{{U}} (4) {{/U}}AND
Idate BETWEEN'2005-01-01'AND'2005-01-31'
GROUP BY{{U}} (5) {{/U}};
【正确答案】
【答案解析】AS (2)SUM(amount) (3)SUM(unitprice*amount) (4)Invoice.Ino=invoice detail. Ino (5)Invoice.Ino,Idate或Invoice detail. Ino,Idate [分析]本题是要建立2005年1月期间每张发票的发票号,交易日期,交易商品件数和交易总金额的视图。 首先建立视图的格式为CREATEVIEW<视图名>AS<视图定义>,因此(1)空的答案为AS。 本查询是从Invoice和Invoice detail两个关系中查询,两关系的连接条件是两关系的Ino相等,因此(4)空的答案是Invoice.ino=Invoice detail.Ino。 统计每张发票的信息需要按发票将数据分组,也就是按发票号Ino分组,但因为查询关系Invoice和lnvoice detail都有属性Ino。为了避免二义性,所以分组属性是Invoice.Ino或者是Invoice detail. Ino。因为在包含聚合运算的Select子句中,只有在Group By子句中出现的 属性才能在SELECT子句中以非聚合形式出现,而SELECT子句中有非聚合形式的属性Idate出现,所以(5)空的答案是Invoice.Ino,Idate或Invoicedetail.Ino,Idate。 需要查询的是每张发票的交易商品件数和交易总金额。交易商品件数是发票商品数量的总和,因此(2)空的答案是SUM(amount)。交易总金额是每条交易商品明细中每条记录商品金额的总和,每条记录商品金额是unitprice*amount,因此(3)空的答案是SUM (unitprice*amount)。
问答题
【问题3】
根据设计二中关系模式,以下SQL语句是用于“查询从未售出的商品信息”的不完整语句,请填补其中的空缺。
SELECT Mno, Mname, price
FROM Merchandise{{U}} (1) {{/U}}
WHERE{{U}} (2) {{/U}}
(SELECT{{U}} (3) {{/U}}
FROM Invoice, detail
WHERE A.Mno=Invoice, detail. Mno);
【正确答案】
【答案解析】A和ASA (2)NOT EXISTS (3) * [分析]本题是查询从未售出的商品信息。 SQL语句中有两种格式为表或视图取别名:“表名AS别名”或“表名别名”。由题中可以看出Memhandise的别名是A,因此填空(1)的答案是A或者ASA。 要查询“从未出售”的商品,也就是要查询的商品在交易记录中不存在,因此(2)空的答案是NOTEXISTS。
问答题
【问题4】
设计二中关系Merchandise中由属性price表示商品价格,关系Invoice, detail中的属性 unitprice也表示商品价格。两个是否有必要同时存在?为什么?
【正确答案】
【答案解析】有必要。Merchandise中由属性price表示的是商品的当前价格,超市中的价格是有可能变动的,而关系Invoicedetail中的属性unitprice表示的是在开具发票时该商品的单价。 [分析]Merchandise中由属性price表示的是商品的当前价格,超市中的价格是有可能变动的,而关系Invoicedetail中的属性unitprice表示的是在开具发票时该商品的单价。如果缺少其中任意一个,将导致商品单价不能进行调整,否则,当商品的单价发生变化时,销售历史中的商品价格就随着发生变化。