2014-01-20 53 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

相關問題