本篇會繼續以第一正規化(1NF)的基本原則來設計一張老師資料表(teachers)。
假設原始的 teachers 資料表包含以下欄位:
在這樣的設計中,我們是否能用這些欄位的組合來唯一識別一筆資料列?
答案是不能。因為可能會有兩位老師具有相同的名字、出生日期與地址,甚至教授相同的科目。雖然這種情況發生的機率不高,但在資料庫設計中,我們必須考慮所有可能的例外狀況,以避免系統因資料重複或辨識失敗而出錯。
由於現有欄位組合無法保證資料唯一性,因此我們需要新增一個唯一識別欄位作為主鍵(Primary Key)。我們將新增:
teacher_id:數值型別(number),作為主鍵(PK)
這個欄位將作為每筆老師資料的唯一識別碼,確保資料表符合第一正規化的要求。
在原始資料中,address 欄位是一個單一欄位,這違反了 1NF 中「欄位值不可再分」的原則。為了讓資料更具彈性與可查詢性,我們將地址進一步拆分成多個欄位:
如此一來,我們就能針對地址的每個部分進行獨立查詢、排序與更新,提升資料的可維護性與彈性。
經過以上的正規化處理後,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)的優化,重點包括以下幾點: