规范化数据库是否有2个链接表可以将2个其他表链接到另一个表中的单个主键?

时间:2014-01-20 08:43:50

标签: database database-normalization

以下是我目前拥有的表格:

Student(StudentID, SurName, OtherNames, TargetGrade etc.)
Teacher(TeacherID, SurName, OtherNames etc.)
Class(ClassID, Description)

学生可以上多个班级,每个班级都有很多学生。 一个班级可以有多个教师,每个老师教授许多班级。 因此,为了处理这两个多对多的关系,我使用了两个查找表:

StudentClass(StudentID,ClassID)
TeacherClass(TeacherID,ClassID)

我不确定这是否正常化的原因是因为如果你删除了类表(这似乎有点多余但可以帮助识别类),那么你将在StudentClass之间留下多对多的关系和TeacherClass。这是规范化的吗?

由于

-----------        ----------       ----------         -------------         -----------
|         |       /|        |\      |        |        /|           |\        |         |
| Student |------<-| Student|->-----|  Class |-------<-| Class -   |->-------| Teacher |
|         |       \| -Class |/      |        |        \|   Teacher |/        |         |
-----------        ----------       ----------         -------------         -----------

编辑:对于这个系统,除了描述之外,不需要类存储任何其他内容。考试成绩存储在一个链接到学生的单独表格中。

2 个答案:

答案 0 :(得分:0)

由于您所描述的数据模型具有两个多对多关系,即: - 学生可以上多个班级,每个班级都有很多学生。 - 班级可以有多名教师,每位教师都会教授很多课程。

使用两个链接表是公平的,而不是坚持规范化,使建模过程更加复杂。

进一步规范化是没有害处的,但模型的复杂性是不可避免的

答案 1 :(得分:0)

你在这里肯定是第3个NF。关于你对分数的看法只是一个评论:你不应该错过这样一个事实:每个班级都与一门或多门考试相关联,所以你通常在班级和考试之间有一对多的关系(可以是0到很多没有考试的课程?)。

然后,您可以认为分数由'studentClass'表和'Exams'表之间的关系\表保存。根据您的业务规则,“studentClass”记录可以链接到特定考试的一个或多个分数,具体取决于您是否可以一次或多次通过考试。