1)对大学教务管理数据库,有一个教师开课表Teach ( teacherNo, courseNo, semester,classNo) ,有一个学生选课表Enroll ( teacherNo,s tudentNo, courseNo,semester, ClassNo, teacherNo, score) 。分析这两个表的主键和外 键,弄清楚这两个表之间的关系。这种关系又该如何来表达?是否还要有一一个表 Open (courseNo,semester, classNo) ?请从范式来分析,说明理由。如果要有 Open表,Enroll 表是不是要修改?该如何定义Enroll 表?
时间: 2024-02-13 12:03:45 浏览: 87
对于Teach表,主键应该是 {teacherNo, courseNo, semester, classNo}。对于Enroll表,主键应该是 {studentNo, teacherNo, courseNo, semester, classNo}。Enroll表中的teacherNo是不必要的,可以删除。
在Teach表中,{teacherNo, courseNo}是一个外键,参考Enroll表中的{teacherNo, courseNo}。在Enroll表中,{teacherNo, courseNo, semester, classNo}是一个外键,参考Teach表中的{teacherNo, courseNo, semester, classNo}。
这两个表之间的关系是一对多的关系,即一个教师可以开设多门课程,而一门课程可以被多个学生选课。
如果要有Open表,则Open表的主键应该是 {courseNo, semester, classNo}。在Enroll表中,{courseNo, semester, classNo}是一个外键,参考Open表中的{courseNo, semester, classNo}。
从范式来看,Teach表和Enroll表都满足第三范式(3NF),因为每个字段都只与主键有关。而如果加入Open表,Enroll表就不再满足第三范式,因为Enroll表中的{semester, classNo}与主键无关,依赖于Open表中的{semester, classNo}。因此,如果要加入Open表,Enroll表需要进行修改,将{semester, classNo}移到Open表中。
定义修改后的Enroll表:
Enroll (studentNo, teacherNo, courseNo, score, primary key(studentNo, teacherNo, courseNo), foreign key(teacherNo, courseNo) references Teach(teacherNo, courseNo), foreign key(courseNo) references Open(courseNo, semester, classNo))
其中,{teacherNo, courseNo}是一个外键,参考Teach表中的{teacherNo, courseNo};而{courseNo}是一个外键,参考Open表中的{courseNo}。
阅读全文