问答题 阅读下列说明,根据要求回答问题。
[说明]
天津市某银行信息系统的数据库部分关系模式如下所示。
客户(客户号,姓名,性别,地址,邮编,电话)
账户(账户号,客户号,开户支行号,余额)
支行(支行号,支行名称,城市,资产总额)
交易(交易号,账户号,业务金额,交易日期)
其中,业务金额为正值表示客户向账户存款,为负值表示取款。

问答题 以下是创建账户关系的SQL语句,账户号唯一识别一个账户,客户号为客户关系的唯一标识,且不能为空。账户余额不能小于1.00元。请将空缺部分补充完整。
CREATE TABLE 账户(
账户号 CHAR(19) (a) ,
客户号 CHAR(10) (b) ,
开户支行号 CHAR(6) NOT NuLL,
余额 NUMBER(8,2) (c) ;
【正确答案】这是一道要求读者掌握关系模型的完整性约束的综合分析题,本题的解答思路如下。
由题干中的关键信息“客户号为客户关系的唯一标识”可得,属性“客户号”可以作为“客户”关系模式的主键。同理并结合常识可得,属性“支行号”是“支行”关系模式的主键;属性“交易号”是“交易”关系模式的主键,属性“账户号”是其外键;由题干中的关键信息“账户号唯一识别一个账户”可得,属性“账户号”可以作为“账户”关系模式的主键,属性“客户号”和“开户支行号”是其外键。
由以上分析可知,在创建“账户”关系模式的SQL语句时,由于“账户号”为“账户”关系模式的主键,即不能为空且唯一标识一条账户信息,因此(a)空缺处需要使用PRIMARY KEY对属性“账户号”进行主键约束。其中,关键字:PRIMARY kEY可替换为NOT NULL UNIQUE、NOTNULL PRIMARY KEY等。
由于“客户号”是“客户”关系模式的主键,也是“账户”关系模式的外键,因此(b)空缺处需要用FOREIGN KEY对属性“客户号”进行外键约束,应填入“FOREIGN KEY(客户号)REFERENCES客户(客户号)”。
由题干中的关键信息“账户余额不能小于1.00元”可知,需要限制“账户”关键模式中“余额”属性值的范围,可以通过CHECK约束来实现,即(c)空缺处应填入“CHECK(余额>1.00)”。
【答案解析】
问答题 现银行决策者希望查看在天津市各支行开户,且2009年9月使用了银行存取服务的所有客户的详细信息,请补充完整相应的查询语句(交易日期形式为'2000-01-01')。
SELECT DISTINCT 客户.*
FROM 客户,账户,支行,交易
WHERE 客户.客户号=账户.客户号 AND
账户.开户支行号=支行.支行号 AND
(d) AND
交易.账户号=账户.账户号 AND
(e) ;
上述查询优化后的语句如下,请补充完整。
SELECT DISTINCT 客户.*
FROM 客户,账户, (f) AS 新支行, (g) AS 新交易
WHERE 客户.客户号=账户.客户号 AND
账户.开户支行号=新支行.支行号 AND
新交易.账户号=账户.账户号;
(2)假定一名客户可以申请多个账户,给出在该银行当前所有账户余额之和超过百万的客户信息,并按客户号降序排列。
SELECT *
FROM 客户
WHERE (h)
(SELECT 客户号 FROM 账户 GROUP BY 客户号 (i) )
ORDER BY (j) ;
【正确答案】这是一道要求读者掌握SQL数据操作语言(DML)的综合应用题,本题的解答思路是如下。
(1)依题意,若要满足题干的查询要求,则需在表连接条件的基础上,再添加两个条件:①支行关系的城市属性值为“天津市”,即(d)空缺处应填入“支行.城市='天津市'”;②在2009年9月存在交易记录,由于交易日期形式为'2000-01-01',因此需要通过模糊匹配来实现,用LIKE关键词和通配符表示,即(e)空缺处应填入“交易.交易日期LIKE'2009-09-%'”。
WHERE子句中条件的先后顺序会对执行效率产生影响。假如解析器是按照先后顺序依次解析并列条件,优化的原则是:表之间的连接必须出现在其他WHERE条件之后,那些可以过滤掉最多条记录的条件尽可能出现在WHERE子句中其他条件的前面。据此,可以重新组织WHERE条件的顺序或者通过嵌套查询以缩小连接记录数目的规模,从而实现相应的查询优化过程。
依题意所给出的程序语句,需要添加两个子查询以缩小参与连接的记录的数目,即筛选出天津市的所有支行,(f)空缺处应填入(SELECT * FROM支行WHERE 城市='天津市'),而且找到2009年9月发生的交易记录,(g)空缺处应填入(SELECT * FROM 交易 WHERE 交易日期 LIKE'2009-09-%'),然后再进行连接查询。
(2)依题意要求,可通过子查询实现“当前所有账户余额之和超过百万的客户信息”的查询,即(h)空缺处应填入“客户号 IN”;对SUM函数计算的结果应通过HAVING条件语句进行约束,即(i)空缺处应填入“HAVING SUM(余额)>1000000.00”;降序排列可以通过关键字DESC来实现,即(i)空缺处应填入“客户号DESC”。
【答案解析】
问答题 为账户关系增加一个属性“账户标记”,默认值为0,取值类型为整数,并将当前账户关系中所有记录的“账户标记”属性值修改为0。请补充相关的SQL语句。
ALTER TABLE 账户 (k) DEFAULT 0;
UPDATE 账户 (l) ;
(2)对于每笔金额超过10万元的交易,其对应账户标记属性值加1,给出触发器实现的方案。
CREATE TRIGGER交易_触发器 (m) ON交易
REFERENCING NEW ROW AS 新交易
FOR EACH ROW
WHEN (n)
BEGIN ATOMIC
UPDATE 账户 SET 账户标记=账户标记+1
WHERE (o) ;
COMMIT WORK;
END;
【正确答案】这是一道要求读者掌握SQL语句及触发器机制应用编程的综合分析题,本题的解答思路如下。
(1)关系模式的修改通过ALTER语句来实现,使用关键字ADD添加相应的属性,即(k)空缺处应填入“ADD账户标记INT”;使用关键字SET修改属性值,即(l)空缺处应填入“SET账户标记=0”。
(2)依题意,在“交易”关系模式中插入一条记录时,触发器应能够自动执行,因此需要创建基于INSERT类型的触发器,即(m)空缺处应填入“AFTER INSERT”;其触发条件是新插入交易记录的金额属性值大于100000,即(n)空缺处应填入“新交易.金额>100000.00”;最后(o)空缺处应添加表连接条件——“账户.账户号=新交易.账户号”。
【答案解析】