本文整理了数据库中函数依赖、码、范式1NF/2NF/3NF/BCNF的核心定义、关系及应用补充了关键知识点和易混点解析适合数据库学习与面试备考。一、函数依赖1. 基本定义设关系模式R(U)X、Y为属性集U的子集若对于R(U)的任意一个可能的关系不存在两个元组在X上的属性值相等而在Y上的属性值不等则称X 函数确定 Y或Y 函数依赖于 X记作X→Y。示例学号Sno确定姓名Sname和所在系Sdept即Sno→Sname、Sno→Sdept类似数学函数yf(x)自变量确定则因变量唯一。注意函数依赖基于数据语义而非数据值。例如姓名→年龄仅在无同名人的语义下成立。2. 函数依赖的分类1平凡 / 非平凡函数依赖若一个关系模式满足 BCNF则必然满足以下三点5. BC 范式BCNFBoyce-Codd Normal Form定义若R∈1NF且对于任何非平凡函数依赖X→YX 必包含码则R∈BCNF。核心解读BCNF 是函数依赖范畴内的最高范式核心要求是每一个决定因素都包含码与 3NF 的核心区别在于3NF 仅约束非主属性对码的依赖关系而 BCNF 同时约束主属性对码的依赖关系彻底消除了 3NF 的 “不彻底性”。非平凡函数依赖X→Y且Y⊈X这是实际有意义的依赖比如Sno→Sdept就属于这类。平凡函数依赖X→Y且Y⊆X任一关系模式都能满足该依赖无实际业务意义比如(Sno,Cno)→Sno。结论数据库研究和应用中重点关注的是非平凡函数依赖。2完全 / 部分函数依赖设X→Y若对于X的任何一个真子集X′都有X′↛Y则称Y 对 X 完全函数依赖记作X→FY若X存在真子集X′使得X′→Y则称Y 对 X 部分函数依赖记作X→PY。示例在关系模式SC(Sno,Cno,Grade)中(Sno,Cno)→FGrade成绩完全依赖于学号与课程号的组合而(Sno,Cno)→PSdept系别仅由学号就能确定属于对组合码的部分依赖。3传递函数依赖设X→Y(Y⊈X)Y↛X且Y→Z(Z⊈Y)则称Z 对 X 传递函数依赖记作传递。关键条件必须满足Y↛X若Y→X则X↔Y此时X→Z为直接函数依赖而非传递依赖。示例Sno→SdeptSdept→Mname系主任且Sdept无法反向确定Sno则Sno通过系别传递确定系主任即3. 函数依赖的基本性质自反性若Y⊆X⊆U则X→Y该性质对应平凡函数依赖增广性若X→Y且Z⊆U则XZ→YZ传递性若X→Y、Y→Z则X→Z合并性若X→Y、X→Z则X→YZ分解性若X→YZ则X→Y、X→Z。二、码键的定义与分类码是关系模式中唯一标识元组的属性或属性组合是关系模式规范化的核心基础其核心定义均基于完全函数依赖。1. 核心定义设关系模式RU,FK为U的属性或属性组合各类码的定义如下候选码Candidate Key若即属性集U完全函数依赖于K则K为候选码候选码的任何真子集都不能完全确定U一个关系模式可以存在多个候选码。超码Super Key若K→U仅要求函数依赖成立无需满足完全函数依赖则K为超码候选码是最小的超码超码的真子集有可能是候选码。主码Primary Key若一个关系模式的候选码多于一个会人为选定其中一个作为主码用于唯一标识元组。主属性 / 非主属性包含在任何一个候选码中的属性称为主属性不包含在任何候选码中的属性称为非主属性也叫非码属性。全码All-Key整个属性集U作为候选码即所有属性共同构成唯一标识不存在单独的候选属性。示例关系模式R(P,W,A)其中 P 表示演奏者、W 表示作品、A 表示听众该模式的码为(P,W,A)属于全码。外码Foreign Key关系模式R中的属性或属性组X并非R的码但X是另一个关系模式的码则称X为R的外码。作用主码与外码是关系间建立关联的核心手段。示例SC(Sno,Cno,Grade)中Sno不是SC的码但Sno是S(Sno,Sdept,Sage)的码因此Sno是SC的外码。2. 码的判定技巧从数据语义出发结合业务场景判断比如 “学号唯一标识学生”则 Sno 可直接判定为候选码从函数依赖推导若X→U且X的任意真子集都无法确定U则X为候选码多候选码场景需结合所有函数依赖关系综合判断比如STJ(S,T,J)学生、教师、课程中(S,J)和(S,T)均为候选码。三、范式Normal Form范式是关系模式的规范化等级核心作用是消除关系模式中的插入异常、删除异常、更新异常和数据冗余。低一级范式的关系模式可通过模式分解投影分解转换为若干个高一级范式的关系模式这个转换过程即为规范化。1. 范式的层级关系核心关系1NF⊂2NF⊂3NF⊂BCNF⊂4NF⊂5NF本文重点讲解函数依赖范畴内的 1NF、2NF、3NF 和 BCNF4NF 和 5NF 分别基于多值依赖和连接依赖属于拓展知识点。基本前提所有范式的判定都以满足 1NF 为基础1NF 是关系模式的最低要求。2. 第一范式1NF定义关系模式RU,F的所有属性都是原子属性即属性值不可再分不存在复合属性和多值属性。解读1NF 是关系数据库的基本要求不满足 1NF 的结构不能称为关系模式。反例属性 “地址” 包含 “省、市、区” 多个子信息属于复合属性不满足 1NF需将其拆分为 “省”“市”“区” 三个原子属性方可满足要求。3. 第二范式2NF定义若R∈1NF且每一个非主属性都完全函数依赖于任何一个候选码则R∈2NF。核心问题2NF 的核心作用是解决 1NF 中存在的非主属性对候选码的部分函数依赖问题。反例分析关系模式S−L−C(Sno,Sdept,Sloc,Cno,Grade)其中Sloc为学生住处且规定一个系的学生住在同一个地方该模式的候选码为(Sno,Cno)。该模式存在的函数依赖包括由此可推导出存在问题非主属性、对候选码存在部分依赖会导致数据冗余比如一个学生选多门课时其系别和住处信息会重复存储同时会引发更新异常修改学生系别时需要修改该学生所有选课记录中的系别信息。解决方法模式分解将S−L−C分解为两个满足 2NF 的关系模式分解后消除了非主属性对候选码的部分依赖SC(Sno,Cno,Grade)候选码为(Sno,Cno)非主属性 Grade 完全函数依赖于候选码S−L(Sno,Sdept,Sloc)候选码为 Sno非主属性 Sdept、Sloc 完全函数依赖于候选码。4. 第三范式3NF定义若R∈1NF且不存在这样的码 X、属性组 Y 及非主属性 ZZ \nsubseteq Y使得X→Y、Y→Z、Y↛X成立则R∈3NF。核心解读3NF 要求非主属性既不部分依赖于码也不传递依赖于码由此可推出重要结论若R∈3NF则必有R∈2NF即 3NF 是 2NF 的升级版对关系模式的约束更严格。反例分析上述分解后的S−L(Sno,Sdept,Sloc)满足 2NF但存在传递函数依赖Sno→Sdept、Sdept→Sloc且即因此该模式不满足 3NF。存在问题仍存在数据冗余一个系有多个学生时该系的住处信息会重复存储同时会引发删除异常当删除一个系的最后一个学生记录时该系的住处信息也会随之丢失。解决方法继续分解将S−L进一步分解为两个满足 3NF 的关系模式分解后消除了非主属性对码的传递依赖S(Sno,Sdept)候选码为 Sno无传递函数依赖Dept(Sdept,Sloc)候选码为 Sdept无传递函数依赖。所有非主属性对每一个码都是完全函数依赖所有主属性对每一个不包含它的码都是完全函数依赖没有任何属性完全函数依赖于非码的任何一组属性。核心结论BCNF⊂3NF即满足 BCNF 的关系模式一定满足 3NF但满足 3NF 的关系模式不一定满足 BCNF。BCNF 的性质若一个关系模式满足 BCNF则必然满足以下三点所有非主属性对每一个码都是完全函数依赖所有主属性对每一个不包含它的码都是完全函数依赖没有任何属性完全函数依赖于非码的任何一组属性。核心结论BCNF⊂3NF即满足 BCNF 的关系模式一定满足 3NF但满足 3NF 的关系模式不一定满足 BCNF。示例分析示例 1满足 3NF 且满足 BCNF关系模式C(Cno,Cname,Peno)其中 Cno 为课程号、Cname 为课程名、Peno 为教师编号该模式的候选码为 Cno唯一的决定因素为 Cno且 Cno 包含码因此该模式既满足 3NF 也满足 BCNF。示例 2满足 3NF 但不满足 BCNF关系模式STJ(S,T,J)其中 S 表示学生、T 表示教师、J 表示课程语义为 “一个教师教一门课一门课有多个教师一个学生选一门课的一个教师”。该模式的函数依赖为(S,J)→T、(S,T)→J、T→J候选码为(S,J)和(S,T)所有属性 S、T、J 均为核心属性无非主属性因此该模式满足 3NF。存在问题在函数依赖T→J中决定因素 T 不包含任何一个候选码因此该模式不满足 BCNF这会导致插入异常新增一个教师教某门课的信息时若无学生选该教师的这门课相关信息无法插入同时会引发删除异常删除最后一个选该教师某门课的学生记录时教师的授课信息会随之丢失。解决方法模式分解将STJ分解为两个满足 BCNF 的关系模式分解后所有决定因素均包含码3. 规范化的注意事项答案提示ST(S,T)候选码为(S,T)所有决定因素都包含码TJ(T,J)候选码为 T所有决定因素都包含码。四、模式分解的基本原则规范化的核心操作是模式分解分解过程中需遵循两个基本准则否则分解后的关系模式会丢失原有的数据信息或函数依赖关系失去规范化的意义。1. 无损连接性分解后的若干个关系模式通过自然连接操作可以恢复为原关系模式且连接后的结果不会产生额外的冗余数据也不会丢失原有的数据信息。核心要求是连接后的结果与原关系完全一致无丢失、无新增。2. 保持函数依赖性分解后的所有关系模式中原关系模式的所有函数依赖仍能保持即每一个函数依赖都能在分解后的某个关系模式中找到对应的存在形式。核心要求是不丢失原有的数据语义约束保证业务规则的完整性。3. 分解的理想目标在函数依赖的范畴内模式分解的理想目标是分解后的所有关系模式都属于 BCNF且同时满足无损连接性和保持函数依赖性。需要注意的是并非所有关系模式都能同时满足这三个要求若无法兼顾需优先保证无损连接性避免数据信息的丢失。五、规范化的总结与应用1. 各范式的核心解决问题1NF 要求属性原子化、不可再分解决的是非关系模式的基础结构问题2NF 要求非主属性完全依赖于码解决的是非主属性对码的部分函数依赖问题3NF 要求非主属性不传递依赖于码解决的是非主属性对码的传递函数依赖问题BCNF 要求所有决定因素都包含码解决的是主属性对码的部分 / 传递依赖问题以及非码属性作为决定因素的问题。2. 规范化的基本步骤明确关系模式的属性集 U 和函数依赖集 F梳理所有属性和业务对应的函数依赖关系基于函数依赖关系推导关系模式的候选码准确区分主属性和非主属性检查当前关系模式是否满足目标范式的要求若不满足通过投影分解的方式消除对应的依赖问题验证分解后的关系模式是否满足无损连接性和保持函数依赖性确保数据和语义约束的完整性重复上述第三步和第四步直到所有关系模式都达到目标范式实际应用中通常以 3NF 或 BCNF 为目标。范式并非越高越好高范式的关系模式会将原有的单一模式拆分为多个模式查询时需要进行多表连接会降低查询效率。实际应用中需权衡规范化与查询效率通常优先采用 3NF兼顾规范化效果和查询性能基于数据语义函数依赖的判定、码的推导以及范式的选择都必须基于实际业务的数语义不能单纯依靠数学推导避免过度规范化若多表连接带来的性能损耗远大于数据冗余带来的影响可适当保留一定的数据冗余降低查询的复杂度保证业务的执行效率。六、拓展知识点1. 多值依赖与 4NF拓展BCNF 解决了函数依赖带来的所有异常问题但存在多值依赖的关系模式仍会出现数据冗余和操作异常。多值依赖指的是设R(U)若对于X的一个值Y有一组值与之对应且该对应关系与Z无关则称X→→Y即 X 多值决定 Y。4NF 的定义为若R∈BCNF且对于任何非平凡多值依赖X→→YX 必包含码则R∈4NF。2. 函数依赖的闭包与最小函数依赖集面试重点属性集闭包X指的是由属性集X通过函数依赖关系能推导出的所有属性的集合属性集闭包的核心作用是判定候选码若XU且X的任意真子集的闭包都不等于U则X为候选码。最小函数依赖集是满足三个条件的函数依赖集分别是无平凡依赖、无冗余依赖、每个依赖的左部无冗余属性最小函数依赖集是模式分解的重要基础。3. 实际开发中的范式应用在实际的数据库开发中3NF 是应用最广泛的范式比如电商系统中将用户表、订单表、商品表分离用户表存储用户基础信息订单表通过外码关联用户表和商品表避免数据冗余教务系统中将学生表、课程表、选课表分离通过主码和外码建立关联既满足 3NF 的要求又能保证业务查询的效率。七、经典例题巩固练习已知关系模式R(A,B,C,D)函数依赖集F{A→B,B→C,A→D,D→C}要求推导该关系模式的候选码判断其属于第几范式并将其分解为满足 3NF 的关系模式。关系模式R(Sno,Sname,Sdept,Sage,Cno,Grade,Mname)函数依赖F{Sno→Sname,Sno→Sdept,Sdept→Mname,(Sno,Cno)→Grade}要求将其分解为满足 BCNF 且满足无损连接性的关系模式。该关系模式的候选码为A由于存在非主属性 C 对 A 的传递依赖该模式属于 2NF可将其分解为R1(A,B,D)、R2(B,C)分解后的模式均满足 3NF。可将该模式分解为S(Sno,Sname,Sdept,Sage)、SC(Sno,Cno,Grade)、Dept(Sdept,Mname)分解后的三个关系模式均满足 BCNF且满足无损连接性。