/tutor-prep-s5-ict-database-normalisation/
/tutor-prep-s5-ict-database-normalisation/
一般查詢: info@TutorZone.com.hk
辦公時間: 星期一至六 - 上午 9 時至下午 6 時
WhatsApp 星期一至日 - 24 小時
人手接聽: +852 6828 1809
即時客服: +852 9061 3106

中五 ICT|數據庫正規化(1NF/2NF/3NF)備課指引(導師用)|45 分鐘流程、講解腳本、常見錯誤

中五 ICT|數據庫正規化(1NF/2NF/3NF)備課指引(導師用)|45 分鐘流程、講解腳本、常見錯誤

  • 2026-11-15

學生背得出「第一、第二、第三正規化」,但見到一張 500 行的訂單表就講不出要拆哪一欄。這一堂把三個名詞變成一條可以逐欄檢查的動作。

本堂目標 本堂完結時學生能夠:(1)講出 1NF 要求每格一個原子值,並示範把兩個電話號碼拆成兩行;(2)認出複合鍵下的部分依賴,講出 ItemName 只依賴 ItemID 所以違反 2NF;(3)認出傳遞依賴,講出 Orders 表的 CustomerName 要拆去 Customers;(4)把 500 行訂單表拆成 Customers 20 行、Items 50 行、Orders 120 行、OrderLines 500 行四張表,並用外鍵連回去。

01 先備知識(開課前 3 分鐘快檢)

以下任何一項未過關,本堂就會卡住,先補該項:

技能 快檢題 過關標準
主鍵 一張訂單表可以用邊一欄唯一識別每一行 答 訂單編號
函數依賴 貨品編號固定之後,貨品名稱會唔會跟住變 答 不會,由貨品編號決定
百分比 500 行裡得 20 個客戶名,重複的比例係幾多 答 96%,即 480 行是重複
複合鍵 (訂單編號+貨品編號)代表咩 答 兩欄合起來才唯一識別一行

02 課堂流程(45 分鐘)

時間 環節 導師做什麼 學生做什麼
0–6 分鐘 起點快檢 問主鍵、函數依賴、重複比例,答案寫白板右邊整堂不擦 口頭答,算式寫在紙上
6–16 分鐘 第一幕:三種異常是同一個病 500 行訂單表,20 個客戶,每個名字出現 25 次;示範改地址、刪單、加新客三個場景 學生講出三種異常各自發生咩事
16–26 分鐘 第二幕:1NF 與 2NF 一格兩個電話要拆行;複合鍵下 ItemName 只依賴 ItemID,屬部分依賴,要拆 Items 表 學生指出表裡哪一欄違反 2NF
26–36 分鐘 第三幕:3NF 與外鍵 OrderID 決定 CustomerID,CustomerID 決定 CustomerName,屬傳遞依賴,拆 Customers 表 學生講出四張表同兩條外鍵
36–42 分鐘 題型示範與拆表練習 同一張表換成 800 行,學生照三個問題逐欄檢查 學生交出一張拆表圖
42–45 分鐘 離場檢查 三題口頭,錯的記下是哪一幕 三題全對

03 講解腳本(照著說就可以)

第一幕:第一幕:三種異常,同一個病根

「想像一張表,每行是一條訂單細項:訂單編號、客戶編號、客戶名、客戶地址、貨品編號、貨品名、單價、數量。500 行裡只有 20 個客戶,所以每個客戶名平均出現 25 次,重複的有 480 行,佔九成六。第一個病是更新異常:客戶搬屋,你要改 25 行,改漏一行,同一個客戶就有兩個地址。第二個是刪除異常:他最後一張訂單取消,你刪走那行,客戶的資料也一齊消失。第三個是插入異常:新客戶未落單,你根本冇位放他。三個病都是同一件事——同一份事實重複存了許多次。」

「如果要改一個客戶的地址,你要改幾多行?漏改一行會出現咩問題?」

第二幕:第二幕:1NF 講一格一個值,2NF 講唔好只依賴一半鍵

「第一正規化最簡單:每一格只放一個值。電話欄寫住兩個號碼,就要拆成兩行,或者開一張客戶電話表。第二正規化要你望複合鍵。OrderLines 的主鍵是(訂單編號+貨品編號),但貨品名同單價其實只要貨品編號就決定得到,同訂單編號完全無關。這叫部分依賴:非鍵欄只依賴主鍵的一部分。解法是把貨品編號、貨品名、單價搬去一張 Items 表,50 件貨就只存 50 行,唔再重複 500 次。」

「客戶名依賴的是客戶編號,唔依賴訂單編號,這樣算是 2NF 問題嗎?」

第三幕:第三幕:3NF 講唔好轉一手才依賴

「拆完 2NF,Orders 表剩低訂單編號、客戶編號、客戶名、客戶地址。這裡有條鏈:訂單編號決定客戶編號,客戶編號再決定客戶名。客戶名不是直接依賴主鍵,是轉了一手,這叫傳遞依賴,違反第三正規化。解法是拆一張 Customers 表,只留客戶編號、客戶名、電話、地址。最後四張表:Customers 20 行、Items 50 行、Orders 120 行、OrderLines 500 行。OrderLines 放兩個外鍵——訂單編號同貨品編號——三張表就靠這幾條外鍵 JOIN 返成一張完整訂單,行數仍然是 500 行,一行不少。」

「Orders 表裡的客戶名,是直接依賴訂單編號,還是轉了一手?」

04 必教題型與步驟

題型 例子 步驟 答案
判斷 1NF 電話欄寫住「9123 4567 / 6234 5678」 每格只可一個原子值,多值要拆行或開新表 拆成兩行電話,或開一張 CustomerPhone 表
判斷 2NF 主鍵是(訂單編號+貨品編號),表內有貨品名同單價 貨品名只依賴貨品編號,屬部分依賴 拆出 Items(貨品編號、貨品名、單價),50 行
判斷 3NF Orders 表內有客戶名同客戶地址 主鍵決定客戶編號,客戶編號再決定客戶名,屬傳遞依賴 拆出 Customers(客戶編號、客戶名、地址),20 行
寫外鍵 拆完之後 OrderLines 要有咩欄才可以 JOIN 返去 兩個外鍵加上數量 訂單編號、貨品編號、數量
合理性檢查(一定要教):三個覆核:(1)拆完之後把四張表 JOIN 返,行數要仍然是 500,少一行就是漏了外鍵;(2)逐個非鍵欄問一次「改這個值要改幾行」,答案大於一就仲有重複;(3)表數不是越多越好,四張表剛好,拆到七張就每次查詢要 JOIN 六次,考試時間都蝕埋。

05 獨立練習三題

題目 答案 想觀察什麼
500 行訂單細項、20 個客戶,客戶名重複了幾多次? 480 次(500 減 20) 確認是用行數減客戶數,唔是乘
未正規化時改一個客戶電話要改 25 行,正規化之後改幾多行? 1 行,只改 Customers 表 確認明白重複消除了,改動就跟住減少
120 張訂單、500 行細項,平均每張單幾多項? 4.17 項 500 除 120,答案可以有小數

06 學生常見錯誤與糾正句

錯誤 學生通常這樣寫 導師這樣說
以為拆表越多越好 把一張表拆到七張,然後每個查詢要 JOIN 六次 正規化的目標是消除異常,唔是追求表數。做到 3NF 冇異常就停,多拆只會令查詢更難寫。
把 2NF 同 3NF 混淆 見到 CustomerName 就話係 2NF 問題 CustomerName 依賴 CustomerID,唔依賴複合鍵任何一部分,所以是 3NF 的傳遞依賴。先問「它依賴邊一欄」。
拆完漏外鍵 拆了 OrderLines 但冇留訂單編號 拆表之後一定要問「這兩張表靠邊一欄連返去」。冇外鍵就 JOIN 唔返,500 行會變成斷開的碎片。
把 1NF 當成「唔好留空」 電話欄留空就話符合 1NF 1NF 講的是每格一個原子值,多值要拆行;空白是缺值問題,唔是正規化問題。

07 家課建議(直接指到練習卷題號)

08 離場檢查(最後 5 分鐘)

題目 答案 判定
500 行、20 個客戶,客戶名重複幾多次? 480 次 錯:下堂重教第一幕,重複的計法
複合鍵表出現貨品名,違反邊一個正規化? 2NF,部分依賴 錯:重教第二幕,非鍵欄只依賴一半鍵
Orders 表出現客戶名,違反邊一個正規化? 3NF,傳遞依賴 錯:重教第三幕,主鍵決定甲、甲決定乙

09 導師常問

這一章適合幾年級?

香港中五 ICT 的數據庫單元要求學生設計關聯表並解釋正規化。中四學過的主鍵、欄位類型同簡單查詢是前置,未學過的要先補「一欄決定另一欄」這個講法。

45 分鐘夠不夠?

夠,但第三幕要留十分鐘。學生最易卡在分辨 2NF 同 3NF,所以白板要同時寫住兩個問題:「它依賴主鍵的一部分嗎?」「它是轉一手才依賴嗎?」

一定要背正規化的定義嗎?

唔需要逐字背。考試要的是判斷同拆表,所以記住三個動作:一格一值、唔好只依賴一半鍵、唔好轉手依賴。

立即免費搵導師導師登記 →

本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。

本頁內容版權屬 TutorZone 所有 · www.tutorzone.com.hk · 僅供個人學習及教學使用

招募導師及興趣班教練|學術、樂器、體育、藝術、STEM,免費登記,招生與配對交給平台。 了解詳情 →