iT邦幫忙

1

資料庫設計 (八) - 第一正規化實務案例 : 老師

  • 分享至 

  • xImage
  •  

設計「老師」資料表

本篇會繼續以第一正規化(1NF)的基本原則來設計一張老師資料表(teachers)。

初始設計:欄位與潛在問題

假設原始的 teachers 資料表包含以下欄位:

  • 名字 (first_name)
  • 姓氏 (last_name)
  • 出生日期(birth_date)
  • 地址(address)
  • 授課科目(subject_taught)

在這樣的設計中,我們是否能用這些欄位的組合來唯一識別一筆資料列?
答案是不能。因為可能會有兩位老師具有相同的名字、出生日期與地址,甚至教授相同的科目。雖然這種情況發生的機率不高,但在資料庫設計中,我們必須考慮所有可能的例外狀況,以避免系統因資料重複或辨識失敗而出錯。

引入主鍵欄位(Primary Key)

由於現有欄位組合無法保證資料唯一性,因此我們需要新增一個唯一識別欄位作為主鍵(Primary Key)。我們將新增:
teacher_id:數值型別(number),作為主鍵(PK)
這個欄位將作為每筆老師資料的唯一識別碼,確保資料表符合第一正規化的要求。

拆解非原子欄位

在原始資料中,address 欄位是一個單一欄位,這違反了 1NF 中「欄位值不可再分」的原則。為了讓資料更具彈性與可查詢性,我們將地址進一步拆分成多個欄位:

  • 門牌號(unit_number)
  • 街道號碼(street_number)
  • 街道名稱(street_name)
  • 城市(city)
  • 州/縣市(state/province)
  • 郵遞區號(postal_code)
  • 國家(country)

如此一來,我們就能針對地址的每個部分進行獨立查詢、排序與更新,提升資料的可維護性與彈性。
經過以上的正規化處理後,teachers 資料表的欄位由原本的 5 個擴充為 12 個,包括:

teacher_id first_name last_name birth_date subject_taught unit_number street_number street_name city state postal_code country
1001 Alice Johnson 1980-05-15 Biology 3A 123 Maple Street Springfield IL 62704 USA

總結

在本次資料表設計中,我們針對 teachers 資料表進行了第一正規化(1NF)的優化,重點包括以下幾點:

  • 新增唯一識別欄位 teacher_id
    原有欄位無法保證資料唯一性,因此引入主鍵欄位 teacher_id,用來唯一識別每筆老師資料,避免重複與模糊識別。
  • 將 address 欄位拆解為多個欄位
    為了符合「不可再分欄位」的原則,將原本單一 address 欄位拆解為:
    unit_number、street_number、street_name、city、state、postal_code、country,
  • 提升資料的結構化程度、查詢彈性與更新效率。
    提升資料完整性與擴充性
    拆解後的欄位讓資料更具語意與彈性,未來若需加強資料驗證、條件查詢或建立關聯資料表(如城市、國家),都更加方便。

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

尚未有邦友留言

立即登入留言