必修單元 A 數據控制

2.1 數據分級(Data Hierarchy)

學習重點

  • 數據由細到大:欄位 Field → 記錄 Record → 數據表 Table → 數據庫 Database。
  • 欄位 = 一項數據屬性(例如:姓名、班別),並須設定數據類型及「可接受範圍」。
  • 記錄 = 一個對象(例如:一位學生)的完整數據。
  • 表 = 同一類對象的多筆記錄;通常用主關鍵碼(Primary Key)分辨每一筆記錄。
  • 數據庫 = 多張相關的表集中管理(方便查詢、更新、避免重複)。
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

以學生數據為例,把數據由小至大劃分為幾個層級:欄位 → 記錄 → 數據表 → 數據庫。

欄位 field

儲存某一種屬性,例如:學生姓名、性別、班別、成績。
每個欄位都有指定數據類型(數字 / 文字)。

例如:Name, Class, Mark

記錄 / 列 record

同一個學生的所有欄位組合成一行,稱為一筆記錄。

例如:某位學生的完整數據

數據表 table

儲存同一類事物的多筆記錄,如「學生數據表」、「課室數據表」。

常見於 DBMS 界面中

數據庫 database

由多張關連數據表組成,例如同一所學校的學生、班級、課室等數據,方便集中管理。

整個系統的「數據儲存庫」

可嘗試繪畫自己學校的「數據分級」:由一名學生開始,逐級延伸至整個學校的數據庫。

2.2 數據控制(Data Control)與 GIGO

學習重點

  • GIGO:輸入垃圾 → 輸出垃圾;即使電腦計算準確,輸出結果仍可能無用。
  • 數據控制的目標:確保輸入、傳輸及儲存的數據準確、完整且一致。
  • 三類常見錯誤:數據來源錯誤、轉錄錯誤、換位(轉置)錯誤。
  • 預防方法通常是「限制輸入(控制項)+ Validation + Verification」。
  • 考試通常要求分類錯誤類型或解釋減少錯誤的方法。
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

如果輸入的數據本身有問題,即使電腦計算再準確,輸出結果仍然不可靠。
這種情況為 無用輸入、無用輸出(GIGO:Garbage in, Garbage out)。

無用輸入的三種常見錯誤

按「下一題」開始練習 ✨

2.2 數據有效性檢驗(Validation)

學習重點

  • Validation 是檢查輸入值「可能合理」,但不保證一定真。
  • 常見 6 種:完整性、固定值、類型、範圍、長度、格式。
  • 再加兩個重要:一致性檢查(跨欄位)、唯一性檢查(不可重複)。
  • 可同時使用多種檢查:例如電話 = 類型 + 長度(+ 格式)。
  • 考試要求能辨別不同情境應使用哪些檢查。
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

數據有效性檢驗是數據控制的一部分,用來檢查輸入值是否「合理」。雖然不能保證一定正確,但可以阻止明顯不合理的輸入。

6 種常見檢查(可互動)

一致性檢查(兩個欄位之間要合乎邏輯)

例子:活動的結束日期必須晚於開始日期。

唯一性檢查(Unique Check)

某些欄位不可以重複,例如學生編號、登入帳戶名稱。

假設現有帳戶:ada01、cs_girl、itprefect。

2.4 用戶界面控制項示範

學習重點

  • 用戶界面(UI)控制項可以限制輸入,從源頭減少錯誤。
  • Textbox 最具彈性,但最容易出現格式不一致;選項式輸入(radio/select/date)更容易進行有效性檢驗及統計。
  • Radio = 單選;Checkbox / Listbox = 多選;Select = 從清單選擇。
  • Date/Time/Range/Number 等控制項本身已提供部分格式或範圍限制。
  • 考試要求能解釋「為何某個控制項比 textbox 更合適」。
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

例子 1 和例子 2 都是「興趣班報名」表格,用來收集同一組數據:興趣、可出席日子、日期、時間、興趣程度、交通安排。
例子 1 全部使用文字框(textbox),例子 2 則使用多種圖像化控制項;例子 3 再展示其他常見輸入元件。

例子 1:全部使用文字框輸入興趣班報名數據

所有數據均須以鍵盤輸入:

優點是彈性較大,但學生可能採用不同寫法,例如「Mon」、「星期一」、「15:30 pm」,
之後要自動進行有效性檢驗(validation)或統計時會相當困難。

例子 2:使用圖像化控制項輸入同一組興趣班報名數據

同一組數據,改用多種輸入元件限制輸入方式:

興趣(單選按鈕 Radio):只可選擇一項活動

可出席日子(複選框 Checkbox):可以多選

首選日期(Date picker):

首選時間(Time picker):

興趣程度(Range slider):

交通安排(Select 下拉式選單):

是否與同學一同報名(Switch 開關):

這種設計可以直接限制輸入值(例如只可選「週一 / 週三 / 週五」),有利於進行有效性檢驗、統計及排序。

例子 3:更多輸入元件(延伸示例)

以下例子主要展示其他 HTML 控制項,用作與文字框作比較:

Number spinner(Stepper):預計人數

Color picker:為小組選擇代表顏色

Listbox(多選):想報讀的項目

Chips / Tags:以標籤方式選擇語言

Textarea:補充說明

File upload:上載家長同意書(範例)

URL:個人作品集網址

Datalist:就讀校舍(可輸入或選擇)

簡單驗證碼(我不是機械人)

請輸入:3 + 5 = ?

2.2 檢查數位:香港身份證號碼

學習重點

  • 檢查數位(check digit)是額外加入的一個數位,用來偵測輸入錯誤(特別是換位或誤輸)。
  • 香港身份證格式:1 或 2 個字母 + 6 位數字 + (檢查數位);檢查數位可能是 0-9 或 A。
  • 計算重點:字母轉數值(A=10…Z=35;單字母前方須補一個「空格位」=36),再乘權重 9→2,最後加入檢查數位,使總和可被 11 整除。
  • 考試最容易出錯:單字母前方須補空格位、權重次序、10→A、11→0。
  • Check digit 主要是偵測(detect)錯誤,未必能糾正(correct)。
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

檢查數位(check digit)是一種特別設計的「額外數位」,用來檢查前面的數字是否輸入錯誤。以香港身份證號碼為例。

  1. 如果只有一個英文字母,前面會當作有一個「空格」,計算時以數值 36 代替。
  2. 英文字母 A–Z 會轉換為數字 10–35。
  3. 由最左邊開始乘以權重 9, 8, 7, ..., 2,最後檢查數位乘 1。
  4. 把所有乘積相加,若總和能被 11 整除(餘數為 0),代表號碼有效。
  5. 檢查數位 = 11 − (總和 mod 11),若結果為 10 用字母 A,結果為 11 則用 0。

2.2 奇偶檢測(Parity Check)

學習重點

  • Parity check 使用1 個 parity bit進行簡單錯誤偵測。
  • 偶數檢測:整組 bits(包括 parity bit)中 1 的數目要是偶數;奇數檢測亦同。
  • 計算 parity bit:先數 data bits 中有多少個 1,再選擇 0 或 1,使總數成為偶數或奇數。
  • 可以偵測單一位出錯(或任何「奇數個」bit 出錯),但偵測不到偶數個 bit 同時出錯。
  • 考試題:計算 parity bit/判斷一組 bits 有效或無效。
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

電腦內部以二進制儲存數據,可以在最後加上一個「奇偶檢驗位 parity bit」以檢查傳送途中是否出錯。

步驟:先選擇「奇數檢測 / 偶數檢測」,再點擊每一個 bit(0/1)改變量值,看看目前這一組數據是否有效。

小測:為輸入場景選擇合適的有效性檢驗(可多選)

按「下一題」開始練習 🎯

根據題目描述,選出適合的有效性檢驗方法,可以同時選擇多於一種, 然後按「檢查答案」。


2.2 數據校驗(Verification)

學習重點

  • Verification 用來檢查輸入數據是否與原始資料一致(準確性),不同於 Validation(合理性)。
  • 三大方法:輸入兩次、雙重輸入(double entry)、校對(proofreading)。
  • Verification 主要用來偵測轉錄/抄寫錯誤;如果原始資料本身有誤,verification 亦無法修正。
  • 情境風險越高(例如銀行或醫療),越需要 verification,但所需成本及時間亦更高。
  • 考試要求能按情境選擇合適方法,並解釋原因。
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

Validation 用來檢查輸入是否「可能合理」,Verification 則用來檢查輸入是否與原始資料一致。三種常用方法:

1️⃣ 輸入數據兩次(例如設定密碼)

2️⃣ 雙重數據輸入(Double Entry)

系統先有一組原始數據,再由不同人或同一人重新輸入一次,然後比較是否出錯。

模擬例子:系統的原始數據為 A17-9F。

3️⃣ 校對數據(Proofreading)

一個人讀出或顯示原始資料,另一個人對照輸入電腦的數據,檢查是否有錯誤。

下方有一行「原始資料」與「輸入結果」,請選出有誤的欄位:

姓名 班別 電話
原始資料 CHAN TAI MAN 2B 91234567
輸入結果 CHAN TAI MAN 2B 92134567

2.3 數據庫管理系統的功能(DBMS)

學習重點

  • DBMS(Database Management System)用來管理數據庫:建立、儲存、提取、排序、索引。
  • 設計數據表(組織)須定義:欄位、數據類型、主關鍵碼/外鍵碼、限制(constraints)。
  • 查詢(retrieve)可以用 SQL(SELECT…WHERE…),排序用 ORDER BY。
  • 索引(Index)可以加快搜尋,但會佔用較多儲存空間,更新時亦更慢。
  • 考試:能說明功能並舉例(以學生表為例較容易說明)。
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

以學生數據表為例,說明 DBMS 如何協助「組織、儲存、提取、排序及建立索引」。

DBMS 的主要功能

迷你查詢示例

以下是一個簡化的「學生數據表」,可嘗試按性別篩選:

STD NAME SEX CLASS CNO
015044Peter ChanM1A11
015047Roberta BarreraF1A8
015048Kalvin KearneyM1A6
015049Liliana SykesF1A10
實際 DBMS 會用 SQL 語句,例如:SELECT * FROM STUDENT WHERE SEX = 'F';

2.4 檔案存取方式:順序存取 vs 直接存取

學習重點

  • 兩種存取方式:順序存取(Sequential Access)與直接存取(Direct/Random Access)。
  • 順序存取類似磁帶:如要尋找位置較後的記錄,必須依次讀取。
  • 直接存取類似硬碟或 USB 裝置:有地址(address)便可直接存取某筆記錄。
  • 考試重點:能按情境選擇方法(批處理 vs 即時查詢)。
  • 關鍵字:Sequential = must read previous records;Direct = access by address.
小提示:開啟 Flashcards 後,可使用鍵盤 ← / → 切換卡片,按 Esc 關閉。

兩種存取方式:順序存取(如磁帶)及直接存取(如硬碟、USB、光碟)。

1️⃣ 順序存取(Sequential Access)小遊戲

如要在「磁帶」內找出學號 = 7 的記錄,只能用「向前」、「向後」逐步尋找:

留意:存取位置較後的記錄時,順序存取所需時間通常較長。

2️⃣ 直接存取(Direct Access)示例

直接存取媒體(硬碟等)可以直接使用「位址」存取一筆記錄,無須逐筆掃描。

在下表中直接點擊任何一行記錄,即可顯示其內容:

位置(位址) 學生 STD 姓名

總結 課文腦圖總結

重點:

  • 腦圖把全課重組為五個問題:如何組織數據、維持數據品質、控制輸入、偵測錯誤,以及管理與存取數據。
  • 可使用右上角「樹狀圖導覽」快速前往節點,或開啟「聚焦模式」以動畫移動及放大所選概念。
  • 學生可新增、編輯、刪除或拖動節點,並把個人版本匯出為 .ictmap 檔案。

以下腦圖不是按原網頁章節排列,而是沿數據由建立結構、輸入、檢查、儲存到提取的生命週期重新分類。閱讀時可先辨認風險,再比較預防、偵測及管理方法。

節點說明保留全部課文概念,並以跨概念連線顯示欄位限制與有效性檢驗、輸入錯誤與數據校驗、傳輸錯誤與奇偶檢測,以及索引與直接存取之間的關係。