【MySQL】数据库三大范式

目录

一. 什么是范式

二. 第一范式

三. 第二范式

不满足第二范式时可能出现的问题

 四. 第三范式


一. 什么是范式

在数据库中范式其实就是一组规则,在我们设计数据库的时候,需要遵守不同的规则要求,设计出合理的关系型数据库,对于不同的规范要求就被称为不同的范式

关系型数据库的范式分类:

第一范式(1NF)

第二范式(2NF)

第三范式(3NF)

巴斯-科德范式(BCNF)

第四范式(4NF)

第五范式(5NF)

范式越高对于数据库数据冗余越小,对于实际应用中,数据库的设计通常只需要满足第三范式的要求即可。

二. 第一范式

第一范式的定义:

数据库表中的每一列都是不可分割的原子数据项

在关系型数据库的设计中,满足第一范式是对关系型数据库的基本要求,不满足第一范式的数据库不是关系型数据库

不可分割的原子数据项:只要可以用MySQL中的基本数据类型描述的列就是不可分割的原子数据项

 我们接下来看一个不满足第一范式的反例:
那么此时的学校就不能被称为是一个不可分割的原子数据项,学校此时可以说是一个对象,还可以继续进行拆分,所以不满足第一范式的要求,那么此时我们应该将学校进行拆分来满足第一范式的要求:

 总结:

在关系型数据库中,只要每一列都可以使用基本数据类型进行表示,那么此时就满足第一范式的要求

三. 第二范式

第二范式是值在满足第一范式(每一列都是不可分割的原子数据项)的基础上,并且不存在非关键字段任意候选键部分函数依赖,此时是在表中存在定义了复合主键的情况下。

名词解释:

非关键字段:即不被主键外键或者唯一键约束的列

候选键:可以唯一表示一行数据的列或者列的组合,可以从候选键中选一个或者多个当做表的主键

部分函数依赖:见下图解释

上图的学生表此时就不满足第二范式的要求:

  • 上图的学生表中其实是使用学号+课程名定义复合主键来标识一个学生某门课程的成绩,此时就是这张表的作用。
  • 但是学生的信息是通过学号来确定的,学生的信息和课程名没有关系,所以此时的学生信息只依赖学号,不依赖课程名。学分是由课程来确定的,此时的学分只依赖课程名,不依赖学号(那么此时就出现了部分依赖的情况)不满足第二范式的要求

 那么下面我们就来定义一个满足第二范式的表:

在上图的设计的表中:

  1. 学生表中,学号、姓名、年龄、性别都依赖于id列
  2. 课程表中,课程名、学分都依赖于id列
  3. 成绩表中,成绩依赖于学生id和课程id
  4. 对于每个表来说都不会出现部分函数依赖的现象,当一张表的主键只有一列时天然满足第二范式

不满足第二范式时可能出现的问题

拿之前的反例图为例:

1. 数据冗余

学生的姓名、年龄、性别和课程的学分在每条记录中重复出现,会造成大量的数据冗余(比如说张三不仅学了MySQL还学了Python和Java,那么此时就会多出2条记录,多出的两条记录就会重复包含姓名、年龄、性别、课程名、学分这些冗余信息)

 2. 更新异常

假设现在需要调整MySQL的学分,此时需要一个一个去更新每条学生信息中包含的学分信息,但是一旦更改时中断没有及时更新全部,那么此时就会造成表中不同学生的MySQL学分不同,出现数据不一致的问题

3.插入异常

此时当前表中,成绩与每一门课和学生都有对应的关系,此时只有学生参加了考试取得成绩才会生成记录,库中才会有课程的学分,但是学生取得成绩之前,这门课在数据库中就不存在,此时插入的成绩数据就是空没有任何意义

4.删除异常

此时将毕业学生的考试数据都进行删除,此时课程和学分的信息也会被删除,导致数据库中没有这门课和学分信息

 四. 第三范式

第三范式即在满足第二范式的基础上,并且不存在非关键字段任意候选键的传递依赖

反例演示:

 注意:

对于上面这张图大家可能会理解为,学号、姓名、年龄、性别依赖于id,而学院电话依赖于学院,那么此时不就是部分函数依赖的现象吗,此时就不满足第二范式了呀?
解释:
对于第二范式的例子,我们需要通过学生学号确定学生信息,通过课程来确定学分,此时通过学生学号+课程来标识出当前学生这一科的成绩,此时是需要通过学生学号和课程来作为复合主键标识一个学生某门课程的成绩的,所以不同的信息依赖于不同的主键列,这时候才是部分函数依赖的情况

但是上图我们只需要获取学生的信息,所以只定义id列为主键来标识某一个学生信息即可,但是现在可以看出学生的学号、姓名、年龄、性别和主键id是关联的,学院电话和学院是关联的(学院电话依赖的是非关键字段),此时通过学生id可以找到学生信息,学生信息中包含着学院名,学院名又有着自己的电话,此时就存在一种信息传递现象
这种现象称为传递依赖,所以当前的表不满足第三范式但是满足第二范式

 此时我们需要将学院信息拆分出来定义学院表,学生表和学院表做关联:


 

上图表:

学生表中:学号、姓名、年龄、性别、学院id依赖于id

学院表中:学院、学院电话依赖于id

此时就不会出现传递依赖的情况,满足第三范式的要求


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/908870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Coze工作流-语音故事创作-文本转语音的应用

教程简介 本教程将带着大家去了解怎么样把文本转换成语音,例如说我们要做一些有声故事,我们可能会用上一些语音的技术,来把你创作的故事朗读出来 首先我们创建一个工作流 对各个模块进行编辑,如果觉得系统提示词写的不好&#xf…

5.子网划分及分片相关计算

某公司网络使用 IP 地址空间 192.168.2.0/24,现需将其均分给 市场部 和 研发部 两个子网。已知: 🏢 市场部子网 🖥️ 已分配 IP 地址范围:192.168.2.1 ~ 192.168.2.30🌐 路由器接口 IP:192.16…

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…

机器学习算法时间复杂度解析:为什么它如此重要?

时间复杂度的重要性 虽然scikit-learn等库让机器学习算法的实现变得异常简单(通常只需2-3行代码),但这种便利性往往导致使用者忽视两个关键方面: 算法核心原理的理解缺失 忽视算法的数据适用条件 典型算法的时间复杂度陷阱 SV…

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…

OPENCV图形计算面积、弧长API讲解(1)

一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…

一.设计模式的基本概念

一.核心概念 对软件设计中重复出现问题的成熟解决方案,提供代码可重用性、可维护性和扩展性保障。核心原则包括: 1.1. 单一职责原则‌ ‌定义‌:一个类只承担一个职责,避免因职责过多导致的代码耦合。 1.2. 开闭原则‌ ‌定义‌&#xf…

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…

关于面试找工作的总结(四)

不同情况下收到offer后的处理方法 1.不会去的,只是面试练手2.还有疑问,考虑中3.offer/职位不满足期望的4.已确认,但又收到更好的5.还想挽回之前的offer6.确认,准备入职7.还想拖一下的1.不会去的,只是面试练手 HR您好,非常荣幸收到贵司的offer,非常感谢一直以来您的帮助,…

什么是高考?高考的意义是啥?

能见到这个文章的群体&#xff0c;应该都经历过高考&#xff0c;突然想起“什么是高考&#xff1f;意义何在&#xff1f;” 一、高考的定义与核心功能 **高考&#xff08;普通高等学校招生全国统一考试&#xff09;**是中国教育体系的核心选拔性考试&#xff0c;旨在为高校选拔…

L1和L2核心区别 !!--part 2

哈喽&#xff0c;我是 我不是小upper~ 昨天&#xff0c;咱们分享了关于 L1 正则化和 L2 正则化核心区别的精彩内容。今天我来进一步补充和拓展。 首先&#xff0c;咱们先来聊聊 L1 和 L2 正则化&#xff0c;方便刚接触的同学理解。 L1 正则化&#xff08;Lasso&#xff09;&…

字节推出统一多模态模型 BAGEL,GPT-4o 级的图像生成能力直接开源了!

字节推出的 BAGEL 是一个开源的统一多模态模型&#xff0c;他们直接开源了GPT-4o级别的图像生成能力。&#xff08;轻松拿捏“万物皆可吉卜力”玩法~&#xff09;。可以在任何地方对其进行微调、提炼和部署&#xff0c;它以开放的形式提供与 GPT-4o 和 Gemini 2.0 等专有系统相…

互联网大厂Java面试:从Spring Cloud到Kafka的技术考察

场景&#xff1a;互联网大厂Java求职者面试 面试官与谢飞机的对话 面试官&#xff1a;我们先从基础开始&#xff0c;谢飞机&#xff0c;你能简单介绍一下Java SE和Java EE的区别吗&#xff1f; 谢飞机&#xff1a;哦&#xff0c;这个简单。Java SE是标准版&#xff0c;适合桌…

18-Oracle 23ai JSON二元性颠覆传统

在当今百花齐放的多模型数据库时代&#xff0c;开发人员常在关系型与文档型数据库间艰难取舍。Oracle Database 23ai推出的JSON关系二元性&#xff08;JSON Relational Duality&#xff09;​​ 和二元性视图&#xff08;Duality Views&#xff09;​​ 创新性地统一了两者优势…

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …

DreamO字节开源图像编辑框架

DreamO是由字节跳动联合北京大学深圳研究生院电子与计算机工程学院共同研发的统一图像定制生成框架&#xff0c;支持多样化的编辑任务。 看下介绍的核心功能&#xff0c;还是很厉害的&#xff0c;今天咱们来体验下。 有正常本地部署版的。 https://github.com/bytedance/Drea…

EM储能网关ZWS智慧储能云应用(11) — 一级架构主从架构

ZWS智慧储能云针对储能场景下不同的架构体系进行了兼容&#xff0c;可以适配用户面临的复杂现场环境&#xff0c;满足更深层次的管理和维护需求。 简介 储能系统包含PCS、BMS、EMS等多个组件&#xff0c;不同储能架构管理和决策方式也有不同。为了适配用户面临的复杂现场环境&…

从0开始一篇文章学习Nginx

Nginx服务 HTTP介绍 ## HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 ## HTTP工作在 TCP/IP协议体系中的TCP协议上&#…