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

DSE ICT|關聯式資料庫與 SQL 配套練習(第三份・完整性與效率)

DSE ICT|關聯式資料庫與 SQL 配套練習(第三份・完整性與效率)

  • 2026-11-04

DSE ICT|關聯式資料庫與 SQL 配套練習(第三份・完整性與效率)

由 1 000 列交易表算出 UPDATE 與 DELETE 的影響列數,再逐級判斷 1NF、2NF、3NF,最後比較索引與連接成本。

先做題,後對答案 建議四十分鐘;正規化題先寫出相依鏈,效率題先算列數再判斷哪個方案較快。

01 本卷資料(做完才看答案)

項目 內容
題數 10 題
建議時間 約 40 分鐘
難度分佈 基礎 4 · 進階 3 · 挑戰 2 · 錯題重練 1
對應章節 所屬章節:DSE ICT|關聯式資料庫與 SQL
適用年級 中五(S5)ICT

02 題目(10 題)

  1. 基礎Sales 表有 1 000 列,其中 cat = ‘A’ 有 250 列。執行 `UPDATE Sales SET price = price * 1.1 WHERE cat = ‘A’;` 會影響幾列?其餘列會變嗎?
  2. 基礎同一張 1 000 列的 Sales 表,執行 `DELETE FROM Sales WHERE year < 2020;`,year < 2020 有 180 列。刪除後剩幾列?
  3. 基礎第一正規化(1NF)要求每一格儲存甚麼?把「電話」一欄寫成 “9123 4567, 9876 5432” 違反了哪一條?
  4. 基礎外鍵與主鍵在「可否重複」上有何分別?刪除被引用的父列時,資料庫通常會怎樣做?
  5. 進階選課表的主鍵是(student_id, course_id),而 course_title 只由 course_id 決定。這違反第幾正規化?應該怎樣拆?
  6. 進階講師表的主鍵是 teacher_id,而 dept_name 只由 dept_code 決定,dept_code 又相依於 teacher_id。這是哪一種相依、違反第幾正規化?
  7. 進階索引欄的選擇性(selectivity)怎樣計?某欄 1 000 列中有 250 個不同值,選擇性是?選擇性高還是低較適合建索引?
  8. 挑戰B-tree 索引每個節點可放 100 個鍵(fan-out 100)。1 000 列的索引樹最少幾層?一層與兩層分別可覆蓋多少列?
  9. 挑戰兩表分別 1 000 及 500 列。Nested loop join 最多要做多少次比較?若改用 hash join(先建雜湊表再掃描),大約多少次?
  10. 錯題重練錯題重練:有同學說「索引越多,查詢一定越快,所以每欄都建索引」。正確講法?

03 答案與一句解說

題號 答案 一句解說
1 影響 250 列;其餘 750 列價格不變 UPDATE 只改 WHERE 命中的列,未命中的列完全不動;影響列數可直接用 SELECT COUNT(*) 預核。
2 剩 820 列 刪除列不會刪欄,剩餘列數 = 1 000 − 180。
3 每格只存一個原子值(不可再分);該欄違反 1NF,屬多值屬性 一格放兩個號碼就無法用單一條件篩選或加索引,查詢會變成字串比對。
4 主鍵不可重複、外鍵可以重複;刪父列會被拒(RESTRICT)或連帶處理(CASCADE/SET NULL),視設定 這就是參照完整性(referential integrity):不允許出現指向不存在父列的孤兒列。
5 違反 2NF(部分相依);把 course_id、course_title 拆成獨立的 Course 表 2NF 要求非主鍵欄完全相依於整個主鍵,只靠主鍵一部分就成立的要另立一表。
6 遞移相依(teacher_id → dept_code → dept_name),違反 3NF;把部門另立一表 3NF 要求非主鍵欄不可經另一個非主鍵欄間接決定,否則改一個部門名要更新多列。
7 選擇性 = 不同值 ÷ 總列數 = 250 ÷ 1 000 = 25%;高選擇性(接近 1)較適合 選擇性低代表一個值命中大量列,索引掃描反而不如全表掃描。
8 2 層;一層覆蓋 100 列,兩層覆蓋 10 000 列 100 的 1 次方 100 少於 1 000,2 次方 10 000 才夠,所以樹高 2。
9 Nested loop 最多 1 000 × 500 = 500 000 次;hash join 約 1 000 + 500 = 1 500 次 Nested loop 是每列對每列;hash join 建表加掃描各一次,所以是線性相加。
10 不是;索引加快讀取但拖慢 INSERT/UPDATE/DELETE、佔用儲存,亦可能不被優化器選用;只在高選擇性且常作條件或連接的欄建 每次寫入都要同步更新所有相關索引,索引過多會令寫入成本與儲存空間一齊上升。

04 做完之後怎樣跟進

  • 對完答案,只重做錯的那幾題,並在錯題旁寫出錯在哪一步(公式、單位還是抄錯數)。
  • 同一題隔兩日再做一次;兩次都對才可以移到下一份練習。
  • 家長只需看答案欄與解說欄,不必逐題講解。

想找導師跟進這一章?按此登記導師登記 →

本卷題目與答案由 TutorZone 團隊原創編寫,並非任何學校、出版社或考試局的試題;數值與答案均以程式核算。

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