计算机考研复试--关系数据库核心知识点终极整理
一、关系模型三要素
1. 数据结构(二维表)
- 关系:由行(元组)和列(属性)组成的二维表,每个属性不可再分(1NF)
- 键:
- 候选键:能唯一标识元组的最小属性集(如学号)
- 主键:从候选键中选定的唯一标识(非空且唯一)
- 外键:参照其他表主键的属性(保证参照完整性)
- 域:属性的取值范围(如性别域为{'男','女'})
2. 数据操作(关系代数与SQL)
- 基本操作:
- 选择(σ):筛选满足条件的行(如σ_{age>20}(Student))
- 投影(π):选取指定列(如π_{name,age}(Student))
- 连接(⋈):
- 自然连接:自动去重相同属性(如Student ⋈ SC)
- 外连接:保留未匹配元组(左/右/全外连接)
- 除法(÷):查找满足所有条件的元组(如选所有课的学生)
- 集合操作:并(∪)、差(-)、交(∩)、笛卡尔积(×)
3. 完整性约束
- 实体完整性:主键非空且唯一(如学号不能为空)
- 参照完整性:外键必须为其他表主键或空值(如课程号必须存在)
- 用户定义完整性:自定义规则(如年龄≥18)
二、关系代数与SQL高频考点
1. 关系代数表达式
CREATE TABLE Student (
Sno CHAR(9) PRIMARY KEY,
Sname VARCHAR(20) NOT NULL
);
- **DML**:
sql
-- 插入
INSERT INTO SC VALUES ('2021001', 'C001', 90);
-- 更新
UPDATE Student SET Sage=Sage+1 WHERE Sdept='CS';
-- 删除
DELETE FROM SC WHERE Grade < 60;
- **查询**:
sql
-- 嵌套查询
SELECT Sname FROM Student
WHERE Sno IN (SELECT Sno FROM SC WHERE Cno='C01');
-- 连接查询
SELECT Sname, Cname FROM Student
NATURAL JOIN SC JOIN Course USING(Cno);
```
三、范式理论与设计
1. 范式递进规则
| 范式 |
要求 |
消除依赖类型 |
| 1NF |
属性不可再分 |
- |
| 2NF |
消除非主属性对主属性的部分依赖 |
部分函数依赖(如学号→姓名) |
| 3NF |
消除非主属性的传递依赖 |
传递函数依赖(如学号→系名→系地址) |
| BCNF |
消除主属性对候选键的部分/传递依赖 |
所有非平凡函数依赖左侧包含候选键 |
2. 设计实例
- 反例:学生表(学号,姓名,系名,系主任)
问题:存在传递依赖(学号→系名→系主任)
解决:拆分为学生表(学号,姓名,系名) + 系表(系名,系主任)
四、事务与并发控制
1. ACID特性
- 原子性:事务全做或全不做(UNDO日志实现)
- 一致性:事务前后数据状态合法(如转账总额不变)
- 隔离性:事务间互不干扰(通过锁机制实现)
- 持久性:提交后永久生效(REDO日志实现)
2. 并发问题与解决方案
| 问题 |
描述 |
封锁协议 |
| 丢失修改 |
后提交覆盖前提交结果 |
一级封锁协议(X锁到事务结束) |
| 脏读 |
读取未提交的无效数据 |
二级封锁协议(S锁立即释放) |
| 不可重复读 |
同一事务两次读取结果不同 |
三级封锁协议(S锁到事务结束) |
| 幻读 |
范围查询结果数量变化 |
间隙锁(锁定范围) |
五、高频考点速记表
- 视图作用:简化查询、数据安全、逻辑独立性
- 索引类型:
- B+树:适合范围查询(如WHERE age>20)
- Hash:适合等值查询(如WHERE id=1001)
- 存储过程 vs 触发器:
- 存储过程:预编译SQL集合,需显式调用
- 触发器:事件驱动(如INSERT后自动更新统计)
- E-R图转换规则:
- 1:1联系:合并到任一实体表
- 1:n联系:在多方表添加外键
- m:n联系:新建关联表保存双方主键