本篇會繼續以第二正規化(2NF)的基本原則來優化老師資料表(teachers)。
我們先來看看 teachers 資料表的欄位:
欄位名稱 | 說明 |
---|---|
teacher_id | 主鍵,識別唯一老師 |
first_name | 依賴 teacher_id |
last_name | 依賴 teacher_id |
birth_date | 依賴 teacher_id |
subject_taught | ❌不依賴 teacher_id |
address fields | 依賴 teacher_id |
subject_taught
是該教師教授的科目名稱。然而,該欄位內容不是依賴 teacher_id
而產生的原始資料,而是來自 subjects 資料表的欄位(例如:subject_id
或subject_name
)。
將科目名稱直接存於 teachers 資料表中會導致資料重複與不一致性,也違反了 2NF 的原則。
一位教師可以教授多個科目 → 是 一對多(1:N)的關係(雖然實務上一門科目可以有多位老師,不過這裡假設一門科目只有一位老師,更精確的意思是 teachers 與 subjects 是一對多關係),所以應將資料從 teachers 資料表中移出,改為在 subjects 資料表中透過外鍵(Foreign Key)關聯。
在 subjects 資料表中新增一個欄位 teacher_id
。
這個欄位作為外鍵,指向 teachers 資料表的主鍵。
這樣就可以表示某個科目是由哪位教師教授。
接著,從 teachers 資料表中移除 subject_taught
欄位。
teacher_id
完全相依。subject_taught
已透過關聯關係分離處理。將 teachers 資料表正規化至第二正規形式的核心在於:
更新後的資料表關聯圖如下: