阅读以下说明和E-R图,回答问题。 【说明】 某高校要设计一个教学管理数据库系统。通过调查,设计者了解到学生每学期按照事先安排的课程计划开始学习。每门课程由一名教师讲授;一个教师可以讲授多门课程;每名学生可以选修多门课程;学期结束后通过考试,

admin2010-01-15  31

问题 阅读以下说明和E-R图,回答问题。
    【说明】
   某高校要设计一个教学管理数据库系统。通过调查,设计者了解到学生每学期按照事先安排的课程计划开始学习。每门课程由一名教师讲授;一个教师可以讲授多门课程;每名学生可以选修多门课程;学期结束后通过考试,教师登记每门课程、每名学生的成绩,并得到确认后存档。
数据库工程师风清扬设计了如图13-20所示的E-R图。
                        
   【问题1】
   把该E-R图中的实体和联系转化为相应的关系模式,并指出其主码、候选码以及外码(若无外码也须指出)。
   【问题2】
   现要查询出所有的没有学生选修的课程的全部信息,请写出相应的SQL语句。注意,要查询出符合条件的课程的全部信息。
   【问题3】
   现要查询出所有选修了教师号为’001’的老师所授课程的学生的学号与姓名,请写出相应的SQL语句。

选项

答案[问题1] 方案1: 教师(教师号,姓名,性别,职称,系别)主码:教师号;候选码:教师号;无外码 学生(学号,姓名,性别,班级)主码:学号;候选码:学号;无外码 课程(课程号,名称,学时,学分,教师号)主码:课程号;候选码:课程号;外码:教师号 选修(学号,课程号,成绩)主码:(学号,课程号);候选码:(学号,课程号);外码:学号,课程号 方案2: 教师(教师号,姓名,性别,职称,系别)主码:教师号;候选码:教师号;无外码 学生(学号,姓名,性别,班级)主码:学号;候选码:学号;无外码 课程(课程号,名称,学时,学分)主码:课程号;候选码:课程号;无外码 讲授(课程号,教师号)主码:课程号;候选码:课程号;外码:教师号 选修(学号,课程号,成绩)主码:(学号,课程号);候选码:(学号,课程号);外码:学号,课程号 [问题2] SELECT * FROM C WHERE NOT EXISTS(SELECT Cno FROM SC WHERE SC.Cno=C.Cno)或 SELECT * FROM C WHERE Cno NOT IN(SELECT Cno FROM SC WHERE SC.Cno=C.Cno) 注:C、S、SC、Cno、Sno、Tno分别表示课程表、学生表、选修表、课程号、学号、教师号。亦可直接用汉字表示。其中的*可以用C的全部属性来表示。 [问题3] SELECT Sno,Sname FROM S,C,SC WHERE S.Sno=SC.Sno AND C.Cno=SC.Cno AND C.Tno=’001’或 SELECT Sno, Sname FROM S WHERE sno IN(SELECT sno FROM SC WHERE cno IN(SELECT eno FROM C WHERE tno=’001’)) 注:C、S、SC、Cno、Sno、Sname、Tno分别表示课程表、学生表、选修表、课程号、学号、学生姓名、教师号。亦可直接用汉字表示。

解析 能推导出全部属性而且没有多余属性的属性组称为候选码。若候选码多于一个,则选定其中的一个为主码。在数据库设计中,对于一般的关系模式用“编号”作为主码,如在学生关系模式中用学号作为其主码。
   关系模型的逻辑结构是一组关系模式的集合。E-R图是由实体、实体的属性和实体之间的联系三个要素组成的。将E-R图中的实体、实体之间的联系转换为关系模式,一般遵循如下原则:
   一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
   对于实体的联系,有以下几种不同的情况:
   (1)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对.应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
   (2)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系体本身的属性均转换为关系的属性,而关系的码为n端实体的码。
   (3)一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
   (4)三个或三个以上实体间的以上多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。
   由于教师和课程之间是1对多的关系,因此可以把讲授联系合并到课程中去。而学生与课程是多对多的关系,所以要把选修联系独立作为一个关系表。
   关系模式R中的属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码,也称外码。例如,有关系模式:S(学号,姓名,年龄,系号)、D(系号,系名,宿舍号),那么“学号”是S的主键,“系号”是S的外码。
   该题中,选修关系模式的主码是学号和课程号的组合,而其中的学号是学生表的主码,却不是选修表中的主码,所以学号是外码。课程号是课程表的主码,却不是选修表中的主码,所以课程表也是外码。
   问题2比较简单,在SC中可以找到选修的全部课程,要想查询没有学生选修的课程,只要用谓词NOT EXISTS或NOT IN进行判断即可。因此,实现该查询的SQL语句可写成:
   SELECT * FROM C WHERE NOT EXISTS(SELECT Cno FROM SC WHERE SC.Cno=C.Cno)或
   SELECT * FROM C WHERE Cno NOT IN(SELECT Cno FROM SC WHERE SC.Cno=C.Cno)其中C、S、SC、Cno、Sno、Tno分别表示课程表、学生表、选修表、课程号、学号、教师号。前一条SQL语句中的两个SELECT语句的关系类似于双层循环,第1个SELECT是外层循环,此SELECT每扫描一条记录,内层的SELECT Cno FROM SC WHERE SC. Cno=C.Cno执行一次,例如,现在的外层SELECT扫描到的记录的Cno=’001’,则内层的语句为:SELECT Cno FROM SC WHERE SC.Cno=’001’,这样实际是在SC中查找有没有关于’001’号课程的选课记录,如果没有,则NOT EXISTS(…)成立,输出记录。
   问题3中的查询涉及到学生、教师、选修三个表中的属性,显然要进行连接查询:
   SELECT Sno, Sname FROM S, C, SC
   WHERE S.Sno=SC.Sno AND C.Cmo  SC.Cno AND C.Tno=’001’这里是把三个表用WHERE关联起来进行查询。或写成三层嵌套的形式:
   SELECT Sno, Shame FROM S
   WHERE sno IN(SELECT sno FROM SC WHERE eno IN(SELECT cno FROM C WHERE tno=,001,))
   首先最内层的(SELECT cno FROM C WHERE tno=’001’)找出’001’号教师所授课程的课程号,再在SC中根据课程号找出选了这些课程的学生学号,最后根据学号在S中查找出学生的学号和姓名。
转载请注明原文地址:https://kaotiyun.com/show/XcDZ777K
0

最新回复(0)