数据库第六章 关系数据理论 完整笔记(考试必考)
前言
本章是数据库最难、分值最高、计算题必考章节。
核心解决问题:数据表冗余太大、插入异常、删除异常、更新异常,通过「函数依赖+范式分解」优化表结构。
一、关系模式的问题(为什么要规范化)
1. 劣质表结构四大问题
1. 数据冗余:大量重复数据,占用空间
2. 插入异常:该插的数据插不进去(主键缺失)
3. 删除异常:删一条数据,连带删掉有效信息
4. 更新异常:改一个数据,需要改多行,不改全就数据不一致
2. 根本原因
属性之间存在不合理的函数依赖 → 解决:拆分表、规范化范式
二、函数依赖(本章核心基础)
1. 定义
设关系模式 R(U),X、Y 是属性子集,若 X 的值确定,Y 的值唯一确定,则称:
X \to Y (X函数决定Y,Y函数依赖于X)
通俗理解:知道X,就一定知道Y
2. 函数依赖分类
(1)平凡/非平凡依赖
- 平凡依赖:X \to Y,且 Y \subseteq X(自己推自己,无意义)
- 非平凡依赖:X \to Y,且 Y \nsubseteq X(考试只考这个)
(2)完全 / 部分函数依赖(2NF核心)
设主键为复合码 (X_1,X_2)
- 完全依赖:必须主键全部才能推出 Y
- 部分依赖:主键其中一部分就能推出 Y(违规,产生冗余)
(3)传递函数依赖(3NF核心)
若 X\to Y,Y\nrightarrow X,Y\to Z
则:X\to Z 传递依赖(间接推导,违规)
三、码的求解(必考计算题)
1. 属性分类(快速找候选码)
- L类:只出现在依赖左边 → 一定在候选码中
- R类:只出现在依赖右边 → 一定不在候选码中
- LR类:左右都出现 → 待定
- N类:左右都不出现 → 一定在候选码中
2. 候选码求解步骤
1. 找出所有 L、N 类属性,组合起来
2. 验证:该组合能否推出所有属性
3. 能推全 → 就是候选码
4. 所有候选码的属性 → 主属性
5. 不在任何候选码的属性 → 非主属性
3. 相关名词
- 候选码:最小的能唯一标识整条记录的属性组
- 主键:从候选码里选一个当主码
- 主属性:所有候选码包含的属性
- 非主属性:不包含任何候选码的属性
- 全码:所有属性组合才是候选码
四、六大范式(从低到高,考试重中之重)
范式等级越高,冗余越低、表越规范
开发通用标准:满足3NF即可
1. 1NF 第一范式(最基础)
规则:列具有原子性,单元格不可再分
- 禁止:一个字段存多个数据(如手机号111/222)
- 问题:仍存在部分依赖、传递依赖,冗余大
2. 2NF 第二范式
前提:满足1NF
核心规则:消除非主属性对主键的部分函数依赖
- 简单说:所有非主属性,必须完全依赖完整主键
- 解决:解决部分依赖带来的冗余、插入、删除异常
- 残留问题:仍存在传递依赖
3. 3NF 第三范式(工程常用)
前提:满足2NF
核心规则:消除非主属性对主键的传递函数依赖
- 简单说:非主属性之间不能互相推导,只能依赖主键
- 效果:基本消除大部分冗余与异常
4. BCNF 巴斯-科德范式(修正第三范式)
前提:满足3NF
核心规则:消除主属性的部分、传递依赖
- 针对:主键内部属性互相依赖的问题
- 地位:函数依赖范畴的最高范式
5. 4NF、5NF(了解)
- 4NF:解决多值依赖问题,禁止无关多值依赖
- 5NF:最高范式,极少使用,考试仅概念
五、范式快速判定口诀(做题秒杀)
1. 不是1NF:字段可拆分
2. 是1NF不是2NF:存在部分依赖
3. 是2NF不是3NF:存在传递依赖
4. 是3NF不是BCNF:主属性存在依赖问题
六、函数依赖集最小化(极小依赖集 Fm)
最小依赖集三个条件
1. 所有依赖右侧都是单属性
2. 没有多余的函数依赖(删不掉)
3. 每个依赖左侧没有多余属性
求解步骤
1. 拆分右侧,全部变成单属性
2. 逐个删除依赖,看能否被其他推导,能删则删
3. 精简左侧多余属性
七、关系模式分解(大题必考)
1. 分解原则
1. 无损连接:拆分后合并和原数据一致,不丢数据
2. 保持函数依赖:原有约束不丢失
2. 两种必考分解算法
1. 分解为3NF(既无损又保依赖)
2. 分解为BCNF(无损,但不一定保依赖)
3. 无损连接判定(Chase算法)
1. 构造初始表格
2. 根据函数依赖修改相同行字段
3. 最终出现全a行 → 无损连接
八、本章高频错题总结
1. 2NF只管部分依赖,不管传递依赖
2. 3NF只管非主属性传递,不管主属性
3. BCNF管所有属性的依赖异常
4. 部分依赖只存在于复合主键,单主键无部分依赖
5. R类属性绝对不可能出现在候选码
九、考试简答题必背
1. 1NF:属性原子性,不可再分
2. 2NF:1NF基础上,无非主属性部分依赖
3. 3NF:2NF基础上,无非主属性传递依赖
4. BCNF:3NF基础上,消除所有主、非主属性不合理依赖
5. 范式作用:降低数据冗余、杜绝增删改异常、保证数据完整性