学校学生选修课程,经简化得到的数据项列出如下: 学生号s# CHAR(6),学生姓名xm CHAR(8),课程号c# CHAR(3),课程名称cname CHAR (20),成绩 grade NUMBER。 并确定以学生(student)信息,课程(cou

admin2009-07-15  58

问题 学校学生选修课程,经简化得到的数据项列出如下:
学生号s# CHAR(6),学生姓名xm CHAR(8),课程号c# CHAR(3),课程名称cname CHAR (20),成绩 grade NUMBER。
并确定以学生(student)信息,课程(course)信息实体,它们通过“选课”(sc)联系起来。
数据库概念设计的只包含主键属性的简化E-R图如下:

要求;
(1)设计数据库的逻辑结构设计:给出相应的表名、表的属性名(数据类型可省)、主键。
(2)给出选修了课程号为’C02’的学生姓名的SQL查询语句。
(3)给出三种等价的关系代数表达式来完成上述查询。并从查询优化的角度说明哪一种关系代数表达式查询效率最高?并说明在此查询优化的基础上,对哪些字段建立索引可提高查询效率?

选项

答案数据库的逻辑结构设计: student(s#,xm)主键:s# course(c#,cname)主键:c# sc(s#,c#,grade)主键;s#,c# (2)SELECT student.xm FROM student, sc WHERE student. s#=sc. s# AND sc. c#=’CO2’; (3)系统可以用三种等价的关系代数表达式来完成上述查询。 第一种;πxm(σstudent. s#=sc. s# ∧sc. c#=’C02’(student×sC)) 执行的步骤是:首先计算student和sc的广义笛卡尔积,把student和sc的每个元组联接起来,然后依次读人联接后的元组,按照选择条件选取满足要求的记录,最后在xm上做投影输出,得到最终结果。 第二种:πxm(σsc. c#=’C02’(students[*]C)) 执行的步骤是:首先计算student和sc的自然联接,自然联接的结果比第一种情况少得多,然后执行选择运算,最后投影输出结果。 第三种:πxm(σstudent[*]σsc. c#=’C02’(sC)) 执行的步骤是:首先对sc表做选择运算,过滤掉不满足条件的记录,然后再与student做联接,读取和处理记录的次数要比第二种少,最后投影输出结果。 因此,第三种关系代数表达式执行效率最高。若在sc表的c#字段上做索引,则在第一步对sc表做选择时,就不必读取所有的sc元组而只需读取c#=’C02’的那些元组。若在student表的s#上也做索引,则在第二步做联接时,也不必读取所有的student的元组,因此总的读取和处理时间将大大减少,进而提高总的查询效率。

解析
转载请注明原文地址:https://kaotiyun.com/show/v3NZ777K
0

最新回复(0)