| 学习指南 EN
A-Level 计算机科学 · A-Level Computer Science · Databases / 数据库 · 阅读约 15 分钟 · 更新于 2026-05-06

数据库 (Databases) — A-Level Computer Science 学习指南

适合谁:A-Level Computer Science 参加 A-Level Computer Science 的考生。

覆盖内容:关系型数据库与表结构、主键外键与三范式规范化、核心SQL语句、数据字典与ER图、事务与并发控制五大核心子主题

前置知识:基础编程概念;Python / Java / VB 任一种。

关于练习题:下文「练习题」一节的所有题目均为我们按 A-Level Computer Science 风格编写的原创题目 (original problems),仅用于教学。它们不是 Cambridge International 真题的复制,措辞、数值或语境可能不同。请把它们当作练手用;评分细则请对照 Cambridge 官方 mark scheme。


1. 什么是数据库?

数据库(Database)是结构化存储、管理和访问数据的集合,区别于普通文本文件,它支持高效的增删改查操作,能避免数据冗余、保证数据一致性,是绝大多数信息化系统的核心存储组件。在A-Level Computer Science考纲中,数据库模块占Paper 2和Paper 4总分的15%-20%,是必考的核心知识点,常以SQL编写、规范化设计、ER图绘制的大题形式出现。

2. 关系型数据库与表 (Relational databases and tables)

当前工业界最常用的是关系型数据库(relational database),它以**表(table/关系relation)**为基本存储单元:

  • 每一列称为属性(attribute/字段field),代表数据的某一类特征,比如学生表的stu_idnamegrade
  • 每一行称为元组(tuple/记录record),代表一条完整的独立数据,比如某一位学生的全部信息
  • 每张表都有固定的结构(schema),定义了每一列的数据类型、约束规则

例如学校的学生表结构如下:

stu_id(INT) name(VARCHAR(20)) grade(INT)
1001 张三 12
1002 李四 11

3. 主键、外键与规范化(1NF,2NF,3NF) (Primary and foreign keys; normalisation)

核心键定义

  • 主键(primary key):唯一标识表中每一行的属性,不能为NULL,也不能重复,比如学生表的stu_id就是主键
  • 外键(foreign key):一张表中的属性,引用另一张表的主键,用来建立两张表的关联关系,比如选课表中的stu_id就是引用学生表stu_id的外键,保证不会出现不存在的学生的选课记录

规范化(normalisation)

规范化是减少表中数据冗余、避免增删改异常的设计方法,考纲要求掌握前三范式:

  1. 第一范式(1NF):所有属性都是原子值,不能存储多个合并的值,比如不能把「数学,英语」存在同一个课程字段中,必须拆分到多行或多列
  2. 第二范式(2NF):首先满足1NF,且所有非主键属性完全依赖整个主键,不能只依赖主键的一部分。例如如果主键是(stu_id, course_id)的复合主键,stu_name只依赖stu_id,不符合2NF,需要拆分出独立的学生表
  3. 第三范式(3NF):首先满足2NF,且非主键属性之间没有传递依赖。例如学生表中如果同时存class_idclass_nameclass_name依赖class_idclass_id依赖stu_id,属于传递依赖,不符合3NF,需要拆分出独立的班级表

4. 核心SQL语句:SELECT, JOIN, WHERE, GROUP BY

结构化查询语言(SQL, Structured Query Language)是操作关系型数据库的标准语言,考纲要求掌握4类核心操作:

  1. WHERE条件过滤:用来筛选符合要求的行,例如查询12年级的所有学生姓名:
SELECT name FROM student WHERE grade = 12;
  1. JOIN多表关联:用来联合查询多张表的数据,最常用的是INNER JOIN(只返回两张表匹配的记录),例如查询每个学生的选课成绩:
SELECT s.name, c.course_name, sc.score 
FROM student s
INNER JOIN student_course sc ON s.stu_id = sc.stu_id
INNER JOIN course c ON sc.course_id = c.course_id;
  1. GROUP BY分组聚合:用来按指定列分组后做统计,常用聚合函数有COUNT()SUM()AVG(),例如统计每个年级的学生人数:
SELECT grade, COUNT(stu_id) AS stu_count 
FROM student 
GROUP BY grade
HAVING stu_count > 100; -- HAVING用来过滤分组后的聚合结果,和WHERE作用阶段不同

5. 数据字典与ER图 (Data dictionaries and ER diagrams)

数据字典(data dictionary)

数据字典是存储数据库**元数据(metadata)**的表,记录了所有表、字段的定义,例如:

表名 字段名 数据类型 约束 描述
student stu_id INT PRIMARY KEY 学生唯一ID
student name VARCHAR(20) NOT NULL 学生姓名

实体关系图(ER diagram, Entity-Relationship diagram)

ER图是可视化数据库设计的工具,核心元素:

  • 实体(entity):用矩形表示,对应数据库中的表,比如学生、课程
  • 属性(attribute):用椭圆表示,对应表的字段,比如学生ID、姓名
  • 关系(relationship):用菱形表示,对应实体之间的关联,分为一对一、一对多、多对多三类,多对多关系必须新增中间表拆分为两个一对多关系

6. 事务与并发控制概述 (Transactions and concurrency overview)

**事务(transaction)**是一组不可分割的SQL操作集合,要么全部执行成功,要么全部失败回滚,满足ACID四大特性:

  1. 原子性(Atomicity):操作是最小单元,不可拆分
  2. 一致性(Consistency):事务执行前后数据库始终处于合法状态
  3. 隔离性(Isolation):多个事务并行执行时互不干扰
  4. 持久性(Durability):事务执行成功后修改永久生效,不会丢失

并发操作可能出现脏读、不可重复读、幻读等问题,一般通过锁机制、事务隔离级别来解决,考纲只要求掌握基础概念,不需要深入实现。

7. 常见陷阱 (Common Pitfalls)

  1. 错误做法:把外键设置为唯一约束;原因:混淆主键和外键的规则,以为外键也必须唯一;正确做法:外键可以重复,只要引用的主键存在即可,比如多条选课记录可以对应同一个学生ID
  2. 错误做法:用WHERE过滤GROUP BY后的聚合结果;原因:混淆WHERE和HAVING的执行顺序;正确做法:WHERE在GROUP BY之前执行,过滤原始行,HAVING在GROUP BY之后执行,过滤聚合结果
  3. 错误做法:ER图中多对多关系直接连接两个实体,不设置中间表;原因:不知道多对多关系无法直接存储;正确做法:多对多关系必须新增中间表,存储两个实体的外键,拆分为两个一对多关系
  4. 错误做法:认为规范化程度越高越好,必须全部到3NF;原因:忽略了查询性能的需求;正确做法:考试中要求规范化到3NF,实际场景中可以适当保留冗余来减少JOIN操作,提升查询效率

8. 练习题(A-Level Computer Science 风格)

题1

已知三张表:student(stu_id PK, name, grade)course(course_id PK, course_name)student_course(stu_id FK, course_id FK, score),请编写SQL语句,查询选了「计算机科学」课程且分数大于80分的学生姓名。

解答

SELECT s.name
FROM student s
INNER JOIN student_course sc ON s.stu_id = sc.stu_id
INNER JOIN course c ON sc.course_id = c.course_id
WHERE c.course_name = '计算机科学' AND sc.score > 80;

题2

给定冗余表stu_info(stu_id, name, class_id, class_name, course_id, course_name, score),主键为(stu_id, course_id),请将其规范化到3NF,写出所有表的结构、主键和外键。

解答

拆分后共4张表:

  1. student(stu_id PK, name, class_id FK):存储学生基础信息,class_id是引用class表的外键
  2. class(class_id PK, class_name):存储班级信息
  3. course(course_id PK, course_name):存储课程信息
  4. student_course(stu_id FK, course_id FK, score):复合主键为(stu_id, course_id),存储选课成绩,两个字段分别是student和course表的外键

题3

解释事务原子性的含义,举一个实际场景的例子。

解答

原子性指事务是不可分割的最小操作单元,包含的所有SQL操作要么全部执行成功,要么全部失败回滚。例子:银行转账操作,从A账户扣100元、给B账户加100元是同一个事务,若扣钱后系统故障,加钱操作未执行,整个事务会回滚,A账户的钱会退回,避免出现金额不一致的问题。

9. 速查表 (Quick Reference Cheatsheet)

考点 核心要点
主键 唯一标识行,非空、不重复
外键 引用其他表的主键,建立表关联
1NF 所有属性为原子值
2NF 非主键属性完全依赖整个主键
3NF 非主键属性之间无传递依赖
SQL语法 SELECT 列 FROM 表 WHERE 行过滤 GROUP BY 分组 HAVING 聚合过滤 ORDER BY 排序
ER图元素 实体(矩形)、属性(椭圆)、关系(菱形)
事务ACID 原子性、一致性、隔离性、持久性

10. 接下来怎么学

本模块是A-Level Computer Science后续分布式系统、数据处理等内容的基础,在考试中Paper 2常考SQL编写选择题,Paper 4常考规范化设计、ER图绘制的大题,占比约18%,掌握本模块内容也能为你后续学习大数据、后端开发等方向打下基础。

如果你在刷题过程中遇到任何数据库相关的疑问,或者需要更多针对性的练习题,可以随时到小欧提问,我们会为你提供个性化的辅导和解析。

本指南内容对齐 CIE 剑桥国际 AS & A Level 计算机科学 9618 考纲。OwlsAi 与 Cambridge Assessment International Education 无附属关系。

← 返回章节主页

某道题卡住了?
拍照或粘贴题目 — 小欧(我们的 AI 学习助手)会一步步讲解并配示意图。
免费试用小欧 →