数据库第六章 关系数据理论 完整笔记考试必考前言本章是数据库最难、分值最高、计算题必考章节。核心解决问题数据表冗余太大、插入异常、删除异常、更新异常通过「函数依赖范式分解」优化表结构。一、关系模式的问题为什么要规范化1. 劣质表结构四大问题1. 数据冗余大量重复数据占用空间2. 插入异常该插的数据插不进去主键缺失3. 删除异常删一条数据连带删掉有效信息4. 更新异常改一个数据需要改多行不改全就数据不一致2. 根本原因属性之间存在不合理的函数依赖 → 解决拆分表、规范化范式二、函数依赖本章核心基础1. 定义设关系模式 R(U)X、Y 是属性子集若 X 的值确定Y 的值唯一确定则称X \to Y X函数决定YY函数依赖于X通俗理解知道X就一定知道Y2. 函数依赖分类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 YY\nrightarrow XY\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. 2NF1NF基础上无非主属性部分依赖3. 3NF2NF基础上无非主属性传递依赖4. BCNF3NF基础上消除所有主、非主属性不合理依赖5. 范式作用降低数据冗余、杜绝增删改异常、保证数据完整性