Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > 后端数据库四大范式

后端MySQL数据库四大范式详细解析

作者:柯南二号

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,这篇文章主要介绍了后端MySQL数据库四大范式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

梳理一下 MySQL(或关系型数据库)中的第一、二、三、四范式,这是数据库设计中非常重要的规范化理论。

第一范式 (1NF:First Normal Form)

定义:字段具有原子性,不可再分。

✅ 举例:

不符合 1NF:

学生表
学号   姓名   联系方式
1     张三   1380000, 1391111

问题:联系方式有多个值,违反原子性。

符合 1NF:

学生表
学号   姓名   联系方式
1     张三   1380000
1     张三   1391111

第二范式 (2NF:Second Normal Form)

定义:在 1NF 的基础上,要求每个非主属性完全依赖于主键,不能只依赖主键的一部分。

✅ 举例:

不符合 2NF:

选课表
学号+课程号 (联合主键)   姓名   成绩
1+001                  张三   95

问题:姓名只依赖学号,而不是依赖于 (学号+课程号) 这个整体主键。

符合 2NF(拆表):

学生表
学号   姓名

选课表
学号   课程号   成绩

第三范式 (3NF:Third Normal Form)

定义:在 2NF 基础上,非主属性不依赖于其他非主属性(消除传递依赖)。

✅ 举例:

不符合 3NF:

学生表
学号   姓名   系编号   系名称

问题:系名称依赖于系编号,而系编号又依赖学号(学号 → 系编号 → 系名称,产生传递依赖)。

符合 3NF(拆表):

学生表
学号   姓名   系编号

系别表
系编号   系名称

第四范式 (4NF:Fourth Normal Form)

定义:在 3NF 基础上,要求多值依赖消除

✅ 举例:

不符合 4NF:

学生表
学号   爱好       擅长课程
1     足球       数学
1     足球       英语
1     篮球       数学
1     篮球       英语

问题:爱好与擅长课程之间是独立的多值依赖,导致大量冗余。

符合 4NF(拆表):

学生_爱好表
学号   爱好

学生_课程表
学号   擅长课程

总结

👉 实际开发中:

👌 那我帮你整理一个 1NF ~ 4NF 对比表,方便快速理解和记忆:

数据库范式对比表

范式要求典型问题示例(不符合)示例(符合)
第一范式 (1NF)字段必须原子化,不可再分字段中有多个值,违反原子性联系方式: 1380000, 1391111每条记录一条联系方式
第二范式 (2NF)在 1NF 基础上,非主属性必须完全依赖主键,不能部分依赖联合主键时,非主属性只依赖其中一部分(学号+课程号) → 姓名将姓名拆到“学生表”
第三范式 (3NF)在 2NF 基础上,非主属性不能依赖其他非主属性(消除传递依赖)非主属性依赖另一个非主属性学号 → 系编号 → 系名称把“系编号-系名称”拆到“系别表”
第四范式 (4NF)在 3NF 基础上,消除多值依赖(不能同时描述多个独立的多对多关系)一张表里既存储“爱好”,又存储“擅长课程”学号 → 爱好 和 学号 → 擅长课程分成“学生_爱好表”和“学生_课程表”

📌 记忆口诀

画一个 范式演进示意图(从 1NF → 4NF,逐步拆表的过程)这样更直观。

画一个 1NF → 4NF 的演进示意图,用一个「学生」场景,逐步展示规范化的过程:

范式演进示意图

未规范化

学生表
学号 | 姓名 | 联系方式           | 系名称  | 爱好   | 擅长课程
1    | 张三 | 1380000,1391111   | 计算机系 | 足球   | 数学

问题:

第一范式 (1NF)

解决字段不可再分 → 拆分联系方式

学生表
学号 | 姓名 | 联系方式 | 系编号 | 系名称 | 爱好 | 擅长课程
1    | 张三 | 1380000  | 01    | 计算机 | 足球 | 数学
1    | 张三 | 1391111  | 01    | 计算机 | 足球 | 数学

第二范式 (2NF)

解决部分依赖 → 拆分“学生”和“选课”

学生表
学号 | 姓名 | 系编号

选课表
学号 | 课程号 | 成绩

第三范式 (3NF)

解决传递依赖 → 把系名称单独拆表

学生表
学号 | 姓名 | 系编号

系别表
系编号 | 系名称

选课表
学号 | 课程号 | 成绩

第四范式 (4NF)

解决多值依赖 → 爱好、擅长课程单独拆表

学生表
学号 | 姓名 | 系编号

系别表
系编号 | 系名称

选课表
学号 | 课程号 | 成绩

学生_爱好表
学号 | 爱好

学生_课程表
学号 | 擅长课程

📌 最终结果

总结 

到此这篇关于后端MySQL数据库四大范式的文章就介绍到这了,更多相关后端数据库四大范式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文