必修單元 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)

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

假設現有帳戶:ada01cs_girlitprefect

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-9A
  • 計算重點:字母轉數值(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 姓名