2014-01-20 20 views
4

这里是我目前拥有的表:标准化数据库是否可以有2个链接表将另外两个表链接到另一个表中的单个主键?

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

学生可以在多个类和每个班级有很多学生。 一个班级可以有多位教师,每位教师可以教许多班级。 所以对付这些2多对多的关系,我用了2个查找表:

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

为什么我不知道这是否是标准化的原因是因为如果你删除类表(这似乎有点多余但可以帮助识别类),您将留下StudentClass和TeacherClass之间的多对多关系。这是正常化的吗?

感谢

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

编辑:对于这个系统类将不需要真正存储以外的任何其他说明。测试分数存储在与学生相关的单独表格中。

+1

类肯定不是多余的。如果删除了这些信息,关于类的所有信息都必须在关联表中引入,从而分散信息。 实际上,班级可能与阅读计划,地点,考试(考试分数)以及其他内容有关联。 –

+0

在这个问题中我看不到任何与[[delphi]'的关系) –

回答

0

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

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

0

由于您描述的数据模型有两个多对多关系,即 - 学生可以在多个班,每个班有很多学生。 - 一个班可以有多位教师,每位教师可以教许多班。

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

有进一步正常化它没有害处,但在模型的复杂性是不可避免的

+0

你是说我拥有的是第三范式吗?如果不是,我将如何进一步标准化? – rowanphilip

相关问题