问答题
阅读以下说明,回答问题1至问题4。
[说明]
某宾馆需要建立一个住房管理系统,部分的需求分析结果如下:
(1)一个房间有多个床位,同一房间内的床位具有相同的收费标准。不同房间的床位收费标准可能不同;
(2)每个房间有房间号(如201、202等)、收费标准、床位数目等信息;
(3)每位客人有身份证号码、姓名、性别、出生日期和地址等信息;
(4)对每位客人的每次住宿,应该记录其入住日期、退房日期和预付款额信息;
(5)管理系统可查询出客人所住房问号。
根据以上的需求分析结果,设计一种关系模型如图7.30所示。
问答题
根据上述说明和实体一联系图,得到该住房管理系统的关系模式如下所示,请补充住宿关系。
房间(房间号,收费标准,床位数目); 客人(身份证号,姓名,性别,出生日期,地址);
住宿(______,入住日期,退房日期,预付款额)。 |
【正确答案】
【答案解析】房间号,身份证号。
[分析]
由题意可知,住宿关系尚缺房问号和身份证号属性。
【正确答案】
【答案解析】住宿关系主键:房问号,身份证号,入住日期
住宿关系外键:房间号,身份证号
[分析]
住宿关系中的房间号、身份证号与入住日期属性集能够唯一标识该关系的元组,可以作为住宿关系的主键。
住宿关系中的房间号属性,在房间关系中能够唯一标识该关系的元组。住宿关系中的身份证号属性,在客人关系中能够唯一标识该关系的元组。对于住宿关系,房问号与身份证号属性是外键。
问答题
若将上述各关系直接实现为对应的物理表,现需查询在2005年1月1目到2005年12月31日期间,在该宾馆住宿次数大于5次的客人身份证号,并且按照入住次数进行降序排列。下面是实现该功能的SOL语句,请填补语句中的空缺。
SELECT 住宿.身份证号,count(入住日期) FROM 住宿,客人
WHERE入住日期>=‘20050101’AND入住日期<=‘20051231’ AND
住宿.身份证号=客人.身份证号 GROUP BY{{U}} (2) {{/U}}
{{U}} (3) {{/U}}count(入住日期)>5 {{U}} (4)
{{/U}} |
【正确答案】
【答案解析】(2)住宿,身份证号
(3)HAVING
(4)ORDER BY 2 DESC(或DSC)
[分析]
SELECT语句由六个子句组成,完整的句法如下:
SELECT 目标表的列名或列表达式序列
FROM 基本表或(和)视图序列
[WHERE 条件表达式]
[GROUP BY 列名序列
[HAVING 组条件表达式]]
[ORDER BY 列名[序]……]
整个SELECT语句语义如下:从FROM子句中列出的表中,选取满足WHERE子句中给出的条件表达式的元组,然后按GROUP BY子句中给定列的值分组,再提取满足HAVING子句中组条件表达式的那些组,按SELECT子句给出的列名或列表达式求值输出。ORDER BY子句是对输出的目标表进行排序,可附加ASC(升序)或DESC(降序)。
问答题
| 为加快SQL语句的执行效率,可在相应的表上创建索引。根据问题3中的SQL语句,除主键和外键外,还需要在哪个表的哪些属性上创建索引,应该创建什么类型的索引,请说明原因。
|
【正确答案】
【答案解析】表:住宿
属性:入住日期
类型:聚簇索引(或聚集索引,或CLUSER)
原因:表中记录的物理顺序与索引项的顺序一致,根据索引访问数据时,一次读取操作可以获取多条记录数据,因而可减少查询时间。
[分析]
由于住宿表中的记录是按照入住日期排列的,如果在住宿表的入住日期属性上创建聚簇索引,由于表中记录的物理顺序与索引项的顺序一致,根据索引访问数据时,一次读取操作可以获取多条记录数据,因而可减少查询时问。