在上一篇文章了解了第一正規化(1NF)的基本原則後,讓我們透過一個實際案例來應用這些概念:設計一張學生資料表(students)。
假設我們原本設計的學生資料表包含以下欄位:
這樣的設計看似合理,但當我們問自己:「這些欄位的組合能否唯一識別每一筆學生資料?」答案是否定的。原因如下:
這代表這張表不符合 1NF 的要求,因為沒有明確的唯一識別欄位。
為了解決這個問題,我們應該新增一個能夠唯一識別每筆學生資料的欄位,也就是主鍵(Primary Key)。最常見的做法是建立一個名為 student_id 的欄位:
student_id | first_name | last_name | birth_date | address |
---|---|---|---|---|
1 | John | Smith | 2000-05-12 | address |
這個 student_id 應具備以下特性:
這樣一來,我們就能透過 student_id 來唯一識別每一筆學生資料,滿足第一正規化的基本條件。
接下來,我們發現 address 欄位本身其實是一個「複合欄位」,它可能包含以下資訊:
這樣的複合資料應該拆解為多個欄位,才符合 1NF 中「欄位必須是原子值」的要求。更新後的表格如下:
student_id | first_name | last_name | birth_date | unit_number | street_number | street_name | city | state | postal_code | country |
---|---|---|---|---|---|---|---|---|---|---|
1 | John | Smith | 2000-05-12 | 3A | 25 | Roosevelt Rd | Taipei | Taipei | 100 | Taiwan |
透過這個例子,我們可以總結出第一正規化應包含以下實務重點:
這樣的設計方式不僅能提升資料一致性與完整性,也為資料庫後續的擴展與維護打下良好基礎。