/cn-tutor-prep-s5-ict-databases-sql-practice-3/
/cn-tutor-prep-s5-ict-databases-sql-practice-3/
简体版
2
一般查询: 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,免费登记,招生与配对交给平台。 了解详情 →