iT邦幫忙

0

資料庫設計 (十四) - 第二正規化實務案例 : 大學

  • 分享至 

  • xImage
  •  

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

本篇會繼續以第二正規化(2NF)的基本原則來優化大學資料表(universities)。

優化「大學」資料表

我們先來看看 universities 資料表的欄位:

欄位名稱 說明
university_id 主鍵,識別唯一大學
university_name 依賴 university_id
address fields 依賴 university_id

表格中的欄位(例如名稱、地址相關欄位)都與大學本身相關,符合第二正規化的規則:

2NF:表中的所有非主鍵欄位都完全依賴於主鍵,且沒有部分依賴。

分析與其他資料表的關聯

當前所有資料表彼此之間都有關聯,但 universities 尚未與其他表格建立關聯。
根據資料模型中的情境:「科目(subjects)是在大學裡開設的」

關聯設計的方向

該設計情境下的關係為:一所大學可以開設多個科目(one-to-many)。
雖然同一門課程名稱可能存在於多所大學中,但這個模型的定義是:
每個 subject 代表一門由一位老師教授的課程,且學生可註冊該課程,因此,資料模型的關係為:

  • 一所大學可以開設多門課程
  • 一門課程只能對應一所大學
  • 一門課程由一位老師授課
  • 同一門課(如「數學」)可在不同大學開設
  • 同一所大學中,可以開設多門課名相同的課程
  • 同一位老師可以開設多堂課程(包括同名課,例如一位老師開設多堂數學課,這樣的情況除了主鍵以外的欄位皆相同)

設計潛在風險

雖然說按照上面的設計邏輯好像合理,但是可能會有以下風險:

  1. 重複課程資料
    使用者可能誤插入兩筆完全相同的課程資料
  2. 缺乏課程區別
    使用者難以區分只靠欄位 subject_id 唯一識別的課程(例如多筆資料 subject_name, category_id, teacher_id, university_id 都一致的課程),可考慮加上UNIQUE來幫助識別(例如按照 subject_name來區分同一位老師開設的多堂同名課程)

設定外鍵關聯

在 subjects 表格中新增一個欄位:university_id
該欄位為外鍵(Foreign Key),指向 universities 表格的主鍵。

總結

在本資料模型中,大學(universities)資料表原本是獨立存在,未與其他表格建立關聯。為了使資料庫結構更具一致性並符合實際情境,需要將其納入整體資料模型中,並建立與科目(subjects)表的關聯。

  • 業務邏輯設定:
    一門科目是在某一所大學中開設、由一位老師授課,學生亦於該大學註冊此課程。
  • 關係類型:
    1.一間大學可開設多門科目 → university : subjects → 一對多關聯
    2.每門科目僅屬於一間大學 (所以即使「數學」課程在兩間大學都開設,那就會出現兩筆不同的 subject 記錄)

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


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

尚未有邦友留言

立即登入留言