6 .数据库规范化与关系理论复习大纲
数据库规范化与关系理论复习大纲
一、范式(Normal Forms)
-
第一范式(1NF)
• 核心要求:所有属性值不可再分(原子性)。• 示例:若“联系方式”包含电话和地址,需拆分为独立列。
-
第二范式(2NF)
• 前提:满足1NF。• 核心要求:所有非主属性完全函数依赖于候选码(消除部分依赖)。
• 示例:候选码为{学号, 课程},若“成绩”仅依赖两者,但“姓名”仅依赖学号,需拆分。
-
第三范式(3NF)
• 前提:满足2NF。• 核心要求:所有非主属性不传递依赖于候选码。(非主属性对候选码的传递依赖)
• 示例:学号→学院→院长,需拆分为学生表和学院表。
-
BCNF(Boyce-Codd范式)
• 前提:满足3NF。• 核心要求:所有非平凡函数依赖的决定因素(X→Y的X)必须是候选码。 消除主属性对候选码的依赖
• 示例:若课程→教师,但课程非候选码,需拆分为课程表。
-
第四范式(4NF)
• 前提:满足BCNF。• 核心要求:消除非平凡多值依赖(X→→Y的决定方X必须包含候选码)。
• 示例:导师→→学生(多学生),需拆分为导师-学生表和导师-课程表。
二、关键概念
-
候选码(Candidate Key)
• 定义:能唯一标识元组的最小属性组。• 特性:唯一性、最小性。
• 示例:学号、身份证号均可作为学生表的候选码。
-
主属性(Prime Attribute)
• 定义:属于至少一个候选码的属性。• 非主属性:不属于任何候选码的属性。
-
函数依赖类型
• 平凡依赖:Y⊆X(如{学号,姓名}→学号)。• 完全依赖:Y完全依赖X,X的任意真子集不能决定Y。
• 部分依赖:Y可由X的真子集决定(违反2NF)。
• 传递依赖:X→Y→Z(违反3NF)。
• 多值依赖:X→→Y(X决定Y的一组值,与R-X-Y无关,违反4NF)。
-
闭包(F⁺)
• 定义:从F出发,通过Armstrong公理推出的所有依赖集合。• 唯一性:闭包唯一确定,与推导路径无关。
-
最小依赖集(最小覆盖)
• 定义:无冗余依赖、左部简化、右部单属性的等价依赖集。• 特性:可能不唯一,但闭包相同。
三、分解原则
-
无损连接性
• 判定:分解后的子表通过自然连接可完全恢复原表。• 方法:公共属性是某一子表的候选码(如R₁∩R₂→R₁或R₂)。
-
保持函数依赖
• 判定:原依赖集F的闭包F⁺能被分解后的子表依赖集推出。• 示例:若原依赖A→B,需确保A和B在同一个子表中。
四、Armstrong公理系统
-
基本公理
• 自反律:若Y⊆X,则X→Y。• 增广律:若X→Y,则XZ→YZ。
• 传递律:若X→Y且Y→Z,则X→Z。
-
导出规则
• 合并规则:X→Y且X→Z ⇒ X→YZ。• 分解规则:X→YZ ⇒ X→Y且X→Z。
五、易混淆点对比
概念 | 区别点 |
---|---|
3NF vs BCNF | BCNF要求所有非平凡依赖的决定方是候选码,而3NF允许主属性传递依赖。 |
函数依赖 vs 多值依赖 | 函数依赖是X→Y(一对一),多值依赖是X→→Y(一对多,且与R-X-Y无关)。 |
候选码 vs 主属性 | 候选码是唯一标识元组的属性组,主属性是候选码中的任一属性。 |
闭包 vs 最小依赖集 | 闭包唯一,最小依赖集可能有多个,但闭包相同。 |
六、示例与应用
• 示例1(BCNF分解)
• 原表:选课(学号, 课程, 教师)
• 问题:课程→教师(课程非候选码)→ 违反BCNF。
• 分解:选课表(学号, 课程) + 课程表(课程, 教师)。
• 示例2(无损分解验证)
• 分解R(A,B,C)为R₁(A,B)和R₂(B,C),若B是R₁或R₂的候选码,则无损。
总结:数据库规范化通过分解表结构消除冗余和异常,核心是理解各范式的约束条件及依赖关系。掌握闭包计算、候选码判定、无损分解方法,结合实例分析,可高效设计高范式数据库。