数据库系统知识点整理与练习



一、知识架构
1. 数据库基础概念
   ├─ 数据/数据库/DBMS/DBS定义与区别
   ├─ 数据独立性(物理/逻辑)
   ├─ 数据库发展阶段(手工管理→文件系统→数据库)
2. 数据库体系结构
   ├─ 三级模式(外模式/模式/内模式)
   ├─ 两级映像(外模式/模式、模式/内模式)
3. 数据库设计与建模
   ├─ 概念模型(ER图元素与绘制)
   ├─ 数据模型分类(关系模型三要素)
   ├─ 函数依赖与范式理论(1NF/2NF/3NF/BCNF)
4. SQL查询与操作
   ├─ DDL/DML/DCL/TCL基础语法
   ├─ 复杂查询(多表连接、子查询、聚合函数)
   ├─ 关系代数运算(选择/投影/连接/除法)
5. 事务与并发控制
   ├─ ACID特性与锁机制
   ├─ 日志与恢复策略(UNDO/REDO)
6. 其他重点考点
   ├─ DFD数据流图
   ├─ 完整性约束(实体/参照/用户定义)

二、核心知识点与示例
1. 数据库基础概念
数据定义
数据是描述事物的符号记录,需结合语义解释。
示例:学生记录S(学号, 姓名, 性别)中,“学号”标识学生唯一性,“性别”需限定为男/女。
数据库特征
有组织、可共享、低冗余、高独立性。
对比:传统文件系统存在冗余(如多个部门保存同一员工信息),而数据库集中存储。
2. 三级模式与数据独立性
三级模式作用
层级
模式类型
作用
用户级
外模式
用户直接操作的数据视图(如视图)
概念级
模式
数据库全局逻辑结构(如关系表)
物理级
内模式
数据物理存储方式(如索引、分区)
两级映像与独立性
外模式/模式映像:修改模式不影响外模式(逻辑独立性)。
示例:学生表新增字段年龄,原有视图仍可用。
模式/内模式映像:修改存储结构不影响模式(物理独立性)。
示例:将B+树索引改为哈希索引,表结构不变。
3. ER图与关系模型转换
ER图元素
实体(方形):如学生(学号, 姓名)
联系(菱形):学生与课程的M:N联系选修
转换规则
M:N联系需转换为独立表(如选修(学号, 课程号, 成绩))
1:N联系将N端实体的主码加入1端实体
4. 范式理论与函数依赖
函数依赖类型
类型
示例
说明
非平凡依赖
学号→姓名
姓名不包含在学号中
平凡依赖
(学号, 姓名)→学号
右侧属性在左侧集合中
完全依赖
(学号, 课程号)→成绩
缺一不可
部分依赖
(学号, 课程号)→姓名(学号可单独决定姓名)
导致冗余
范式判断与分解
1NF→2NF:消除部分依赖
示例:R(学号, 课程号, 姓名)分解为学生(学号, 姓名)和选修(学号, 课程号, 成绩)
2NF→3NF:消除传递依赖
示例:R(学号, 班级, 班主任)分解为班级(班级号, 班主任)和学生(学号, 班级号)
5. SQL操作与复杂查询
DDL与约束
— 创建员工表(含默认值、外键)
CREATE TABLE Employees(
    empno CHAR(10) PRIMARY KEY,
    empname VARCHAR2(20) NOT NULL,
    sex CHAR(2) DEFAULT '男',
    dno CHAR(3),
    FOREIGN KEY (dno) REFERENCES Dept(dno)
);
复杂查询示例
— 查询每个第二级机构的员工数(机构名称,员工数)
SELECT d.dname AS 机构名称, COUNT(e.empno) AS 员工数
FROM Dept d
JOIN Employees e ON d.dno = e.dno
WHERE d.dparent IS NOT NULL  — 第二级机构
GROUP BY d.dname;
6. 事务与并发控制
ACID特性
原子性:事务要么全做,要么全不做(如转账操作)。
隔离性:通过锁机制避免脏读(如SELECT … FOR UPDATE)。
日志与恢复
UNDO:回滚未提交事务(如系统崩溃时)。
REDO:重做已提交事务(如断电后恢复)。

三、练习题与答案
题目1:范式判断与分解
要求
关系模式R(队员编号, 比赛场次, 进球数, 球队名, 队长名),每个队员仅属一个球队,每队只有一个队长。
写出函数依赖
确定候选码
判断最高范式级别
答案
函数依赖:
队员编号→球队名
球队名→队长名
(队员编号, 比赛场次)→进球数
候选码:(队员编号, 比赛场次)
最高范式:2NF(存在传递依赖队员编号→球队名→队长名)
类似题目
关系模式R(S#, C#, G, T#)(S#: 学号, C#: 课程号, G: 成绩, T#: 教师号),若S# → T#,判断范式级别。
答案:2NF(存在传递依赖,S# → T#但非主属性依赖主码)。

题目2:ER图转换
要求
商业集团数据库包含商店、商品、职工实体,以及销售(M:N)和聘用(1:N)联系。
绘制ER图
转换为关系模式并标出主码
答案
ER图元素:
实体:商店(商店编号, 商店名, 地址)
商品(商品号, 商品名, 规格, 单价)
职工(职工编号, 姓名, 性别, 业绩)
联系:销售(月销售量)、聘用(聘期, 工资)
关系模式:
商店(商店编号, 商店名, 地址)
商品(商品号, 商品名, 规格, 单价)
销售(商店编号, 商品号, 月销售量) 主码:(商店编号, 商品号)
职工(职工编号, 姓名, 性别, 业绩, 商店编号, 聘期, 工资) 主码:职工编号
类似题目
公交公司数据库包含员工表和组织机构表,绘制ER图并转换为关系模式。
答案
员工表(Employees): empno, empname, age, sex, dno
组织机构表(Dept): dno, dname, dleader, dparent
关系:员工属于机构(外键Employees.dno → Dept.dno)

题目3:SQL查询与关系代数
要求
公交公司数据库中,完成以下操作:
统计每个第二级机构的员工数(机构名称, 员工数)
查询年龄大于35岁的男职工的个人信息(关系代数表达式)
答案
SQL查询:
SELECT d.dname AS 机构名称, COUNT(e.empno) AS 员工数
FROM Dept d
JOIN Employees e ON d.dno = e.dno
WHERE d.dparent IS NOT NULL  — 第二级机构
GROUP BY d.dname;
关系代数:
σ(age > 35 ∧ sex = '男')(Employees)
类似题目
查询“李敏”所在机构的名称(关系代数)。
答案
π(dname)(σ(empname = '李敏')(Employees ⋈ Dept))

题目4:事务与并发问题
要求
解释脏读、不可重复读、幻读的区别,并说明如何通过封锁协议避免这些问题。
答案
问题
描述
解决方案
脏读
读取未提交的无效数据
三级封锁协议(写锁+读锁)
不可重复读
同一查询返回不同结果
事务提交后释放锁
幻读
同一查询返回不同行数
范围锁
类似题目
如何通过日志文件实现UNDO和REDO操作?
答案
UNDO:回滚未提交事务(如系统崩溃时)。
REDO:重做已提交事务(如断电后恢复)。

四、高频考点总结
1. 名词解释(必考)
数据库:长期存储、有组织、可共享的大量数据集合。
BCNF:所有决定因素是候选码的范式。
2. 简答题(例题)
三级模式与两级映像的作用
外模式/模式映像 → 逻辑独立性
模式/内模式映像 → 物理独立性
3. 应用题(例题)
ER图绘制:学生选课系统(学生、课程、选修联系)
范式分解:将R(S#, C#, G, T#)分解为3NF
4. 计算题(例题)
候选码推导:给定函数依赖集,求最小属性集

五、复习策略
SQL强化:每日练习复杂查询(多表连接+GROUP BY+HAVING)。
范式训练:通过案例判断范式级别并进行规范化分解。
ER图实战:针对“学生选课”“图书管理”等场景绘制ER图。
真题模拟:限时完成历年考试题,查漏补缺。