iT邦幫忙

0

資料庫設計 (十三) - 第二正規化實務案例 : 老師

  • 分享至 

  • xImage
  •  

將 teachers 資料表轉換為第二正規形式(2NF)

本篇會繼續以第二正規化(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 欄位違反 2NF

subject_taught 是該教師教授的科目名稱。然而,該欄位內容不是依賴 teacher_id 而產生的原始資料,而是來自 subjects 資料表的欄位(例如:subject_idsubject_name)。
將科目名稱直接存於 teachers 資料表中會導致資料重複與不一致性,也違反了 2NF 的原則。

拆分與建立關聯

一位教師可以教授多個科目 → 是 一對多(1:N)的關係(雖然實務上一門科目可以有多位老師,不過這裡假設一門科目只有一位老師,更精確的意思是 teachers 與 subjects 是一對多關係),所以應將資料從 teachers 資料表中移出,改為在 subjects 資料表中透過外鍵(Foreign Key)關聯。

使用外鍵

在 subjects 資料表中新增一個欄位 teacher_id
這個欄位作為外鍵,指向 teachers 資料表的主鍵。
這樣就可以表示某個科目是由哪位教師教授。
接著,從 teachers 資料表中移除 subject_taught 欄位。

符合第二正規形式

  • 每個非主鍵欄位(如名字、住址等)皆與主鍵 teacher_id 完全相依。
  • 原本與其他表格有關的資料 subject_taught 已透過關聯關係分離處理。
  • 確保資料一致性、避免重複、利於維護。

總結

將 teachers 資料表正規化至第二正規形式的核心在於:

  • 識別不應直接儲存的屬性
  • 將屬性拆分到相關的資料表中並建立關聯
  • 最終目標是 避免重複資料與異常狀況(如插入、刪除異常)

更新後的資料表關聯圖如下:
https://ithelp.ithome.com.tw/upload/images/20250702/20135794OB8p44QP0h.png


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言