当前位置: 首页 > news >正文

MySQL三范式详细解析

规范化


规范化(Normalization)是用于数据库设计的一系列原理和技术,它可以减少表中数据的冗余,增加数据完整性和一致性。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。


一般情况下满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般来说,数据库只需满足第三范式(3NF)就行了。

第一范式

第一范式(1NF)是指表中的字段都是不可再分的原子属性,同时表需要有一个主键。

第二范式

第二范式(2NF)首先需要满足第一范式,非主键字段必须完全依赖于主键字段,不能只依赖于主键的一部分。(部分依赖)

即在满足第一范式的基础上,还要满足数据表里的每一条数据记录,都是可唯一标识的,而且所有非主键字段,都必须完全依赖主键,不能只依赖主键的一部分。

例如不符合第二范式的:

学号姓名课程名成绩学分
1张三MySQL1002

1.此表中主键为学号和课程名复合主键

2.姓名只依赖于学号,不依赖于课程名,即部分依赖

3.学分只于课程名有关系,与学号没有关系

改进结果(分为三个表):

学号姓名年龄
课程编号课程名学分

学号课程编号成绩

第三范式

第三范式(3NF)首先需要满足第二范式,非主键字段

不能依赖于其他非主键字段。(传递依赖)

例如不符合第三范式的例子:

学号学生姓名学校名学院学院地址学院电话
2025小肖武汉大学计科院中国1069

1.学院地址与学院电话与主键学号没有依赖关系

2.学院地址与学院电话与学校有依赖关系

3.学院与主键学号有依赖关系,从而达到间接依赖

改进结果(分为两个表):

学号学生姓名学校名学院编号
学院编号学院地址学院电话

具体实例:

                                                                    ||

不符合第一范式的地方:

问题:表中电话中有的是手机电话,有的是手机电话和座机电话合并。

改进:将电话分为工作电话和个人电话,字段为null则没有该电话

不符合第二范式的地方:

问题:在上述该表中主键为姓名与部门名称组合的复合主键,而部分地址与姓名没有关系,只与部门名称存在关联,即部分依赖。

改进:1.创建一个部门表,含有部门名称和部门地址字段,以部门编号作为主键。

           2.在原来表中,删除部门名称和部门地址字段,并加入工号作为唯一标识即主键,将部门表中部门编号与主表中工号关联起来。


不符合第三范式的地方:

问题:主表中最低月薪与最高月薪与主键没有什么依赖关系,只与职位相依赖,而职位才与工号相关。

改进:1.创建一个职位表,其中含有职位编号作为主键,职位名称,最低月薪,最高月薪。

           2.在主键中将最低月薪和最高月薪,职位名称删去,用职位表中主键职位编号与主表中工号相关联

                                                                    ||

http://www.dtcms.com/a/390717.html

相关文章:

  • GitHub 仓库权限更改
  • 卷积神经网络(CNN)核心知识点总结
  • Python数据挖掘之基础分类模型_朴素贝叶斯
  • 数字工业化的终极形态:人、机器与算法的三重奏
  • [x-cmd] 在 Linux 与 MacOS 安装与使用 x-cmd
  • wkhtmltopdf 命令参数及作用大全
  • Windows路径转换成Cygwin中的Unix路径的方法
  • JavaWeb之Web资源与Servlet详解
  • [视图功能8] 图表视图:柱状图、折线图与饼图配置实战
  • TDengine IDMP 基本功能——数据可视化(5. 表格)
  • ViTables 安装与 HDF5 数据可视化全指南
  • Python爬虫实战:研究Pandas,构建最新网游数据采集与智能推荐系统
  • 在.NET中实现RabbitMQ客户端的优雅生命周期管理及二次封装
  • .NET自定义数据操作日志
  • 从“连不上网”到“玩转路由”:路由器配置与静态路由实战(小白也能轻松掌握)
  • R语言 生物信息如何解读geo数据集的说明,如何知道样本分类, MDA PCa 79(n = 3)n的含义
  • 你的第一个Node.js应用:Hello World
  • 【LVS入门宝典】LVS核心原理与实战:Real Server(后端服务器)高可用配置指南
  • TPAMI 25 ICML 25 Oral | 顶刊顶会双认证!SparseTSF以稀疏性革新长期时序预测!
  • rep()函数在 R 中的用途详解
  • 在Windows中的Docker与WSL2的关系,以及与WSL2中安装的Ubuntu等其它实例的关系
  • 编辑器Vim
  • 数字推理笔记——基础数列
  • 如何使用 FinalShell 连接本地 WSL Ubuntu
  • Node.js 进程生命周期核心笔记
  • 低空网络安全防护核心:管理平台安全体系构建与实践
  • 站内信通知功能websoket+锁+重试机制+多线程
  • Vue 3 <script setup> 语法详解
  • Redis三种服务架构详解:主从复制、哨兵模式与Cluster集群
  • 复习1——IP网络基础