[说明]
某超市的销售业务由一个销售业务管理系统进行管理,该系统每完成一次交易都需要提供顾客发票,其格式如表8-2所示。
对于该销售业务管理系统,分别给出了以下两种关系数据库的逻辑结构设计(下画线表示主键)。
设计一:
顾客(顾客代码,姓名,住址,联系电话)
收银员(收银员代码,姓名,身份证号,住址,联系电话)
商品(商品代码,商品名称,价格)
发票(发票号码,交易日期,顾客代码,收银员代码,商品代码,单价,数量)
设计二:
顾客(顾客代码,姓名,住址,联系电话)
收银员(收银员代码,身份证号,姓名,住址,联系电话)
商品(商品代码,商品名称,价格)
发票(发票号码,交易日期,顾客代码,收银员代码)
发票明细(发票号码,商品代码,单价,数量)
1.(1)设计一的关系模式“发票”最高满足第几范式请用200字以内的文字简要说明理由。
(2)设计一和设计二哪个更加合理请用100字以内的文字简要说明理由。
参考答案:(A) AS
(B) SUM(数量)
(C) SUM(单价*数量)
(D) 发票.发票号码=发票明细.发票号码
(E) 发票.发票号码,交易日期 或 发票明细.发票号码,交易日期
解析:
本问题是要建立2010年11月期间每张发票的发票号、交易日期、交易商品件数和交易总金额的视图。由于建立视图的格式为CREATE VIEW<视图名>AS<视图定义>,因此(1)空缺处应填入AS。
本查询是从关系“发票”和“发票明细”中进行查询,两关系的连接条件是两关系的“发票号码”相等,因此(4)空缺处应填入“发票.发票号码=发票明细.发票号码”。
统计每张发票的信息需要按发票号将数据分组,但由于查询关系“发票”和“发票明细”中都有属性“发票号码”,为了避免二义性,因此分组属性是“发票.发票号码”或“发票明细.发票号码”。因为在包含聚合运算的Select子句中,只有在Group By子句中出现的属性才能在Select子句中以非聚合形式出现,而Select子句中有非聚合形式的属性“交易日期”出现,所以(5)空缺处应填入“发票.发票号码,交易日期”或“发票明细.发票号码,交易日期”。
需要查询的是每张发票的交易商品件数和交易总金额。交易商品件数是发票商品数量的总和,因此(2)空缺处应填入SUM(数量)。交易总金额是每条交易商品明细中每条记录商品金额的总和,每条记录商品金额是单价*数量,因此(3)空缺处应填入SUM(单价*数量)。