mysql笔记:20. 什么是数据库六大范式
文章目录
- 简介
- 什么是范式
- 最常用的范式
- 第一范式 - 1NF
- 第二范式 - 2NF
- 第三范式 - 3NF
- 第四范式 - 4NF
- 第五范式 - 5NF
- 巴斯-科德范式 - BCNF
- 总结
简介
什么是范式
范式(Normal Form,简称NF)是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。
数据库范式是数据库设计表结构所遵循的规范和指导方法,目的是为了减少冗余,建立结构合理的数据库,从而提高数据存储和使用的性能。
最常用的范式
最常用的范式是三大范式,即第一范式、第二范式、第三范式。这三大范式之间是具有依赖关系的。每个范式都是用来规定某种结构或数据要求,后一范式都是在前一范式已经满足的情况用来“加强要求”。比如第二范式是在第一范式的基础上建设的,第三范式是在第二范式的基础上建设的。
第一范式 - 1NF
符合1NF的关系中的每个属性都不可再分。即表中字段的数据,均不可再拆分,遵循原子性。具体来说,第一范式要求数据库表的每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项。
举例,员工表信息如下:
| 编号 | 姓名 | 性别 |
|---|---|---|
| 001 | 技术部张三 | 男 |
| 002 | 技术部李四 | 男 |
| 003 | 行政部王五 | 女 |
上表中姓名字段中的数据是可以继续拆分的,因此它不符合第一范式。那么怎么优化才符合第一范式呢?将姓名字段拆分即可,优化结果如下:
| 编号 | 部门 | 姓名 | 性别 |
|---|---|---|---|
| 001 | 技术部 | 张三 | 男 |
| 002 | 技术部 | 李四 | 男 |
| 003 | 行政部 | 王五 | 女 |
那么是否遵循第一范式就更好呢?
| 编号 | 姓名 | 家庭地址 |
|---|---|---|
| 001 | 张三 | 江西省南昌市东湖区 |
| 002 | 李四 | 广东省佛山市禅城区 |
| 003 | 王五 | 湖北省武汉市新洲区 |
观察该表,我们发现家庭地址可以继续拆分,拆分结果如下:
| 编号 | 姓名 | 省 | 市 | 区 |
|---|---|---|---|---|
| 001 | 张三 | 江西省 | 南昌市 | 东湖区 |
| 002 | 李四 | 广东省 | 佛山市 | 禅城区 |
| 003 | 王五 | 湖北省 | 武汉市 | 新洲区 |
看上去,拆分以后更符合第一范式。但如果项目中只需要使用一个完整的家庭地址呢?明显不拆分更简单好用。
所以范式只是给我们一个参考,更多的需要根据项目实际情况来进行设计。
第二范式 - 2NF
在满足第一范式的基础上,要求表中的非主键列必须安全依赖于主键,而不是依赖于主键的一部分。这有助于减少数据冗余,并确保数据的一致性。即,一张表只描述一件事情,遵循唯一性。
举例,学生成绩表如下:
| 学号 | 姓名 | 年龄 | 课程名称 | 成绩 | 学分 |
|---|---|---|---|---|---|
| 001 | 小张 | 28 | 语文 | 90 | 3 |
| 001 | 小张 | 28 | 数学 | 100 | 2 |
| 002 | 小黄 | 25 | 语文 | 95 | 3 |
| 002 | 小黄 | 25 | 数学 | 90 | 2 |
| 003 | 小高 | 22 | 数学 | 95 | 2 |
- 姓名和年龄依赖于学号
- 学分依赖于课程名称
- 成绩依赖于学号和课程名称,如果学号和课程名称是联合主键,那么它们可以确定联合主键以外的所有非主键值。但姓名、年龄、学分部分依赖于主键的一部分,所以该表只符合第一范式,不符合第二范式。
那么如何调整上述表才能符合第二范式呢?基于上述三种主键可能,将表拆分成三个。
- 学生表
| 学号 | 姓名 | 年龄 |
|---|---|---|
| 001 | 小张 | 28 |
| 002 | 小黄 | 25 |
| 003 | 小高 | 22 |
- 课程表
| 课程名称 | 学分 |
|---|---|
| 语文 | 3 |
| 数学 | 2 |
- 成绩表
| 学号 | 课程名称 | 成绩 |
|---|---|---|
| 001 | 语文 | 90 |
| 001 | 数学 | 100 |
| 002 | 语文 | 95 |
| 002 | 数学 | 90 |
| 003 | 数学 | 95 |
那么,为什么要遵循第二范式呢?如果不遵循第二范式,会有什么问题呢?
- 数据冗余过大
如上表,学生表和课程表分别有3条数据、2条数据。如果数据都放在一张表中,姓名、年龄、课程名称、学分数据就在表中大量冗余。 - 插入异常
假如学号和课程名称是主键,现在计划新开设一门科学课,暂时还没有学生,由于缺少学号主键信息,就无法正常插入数据。 - 更新不方便
假如数学课程的学分发生变化,则需要把表中关于该课程的学分全部更新。如果拆分出课程表,只需要更新一条记录。 - 删除异常
假如把所有学生的数学成绩删除,那么所有与数学课程相关的数据也随之消失了。学生的数学成绩没了,并不表示这门数学课也没了。
第三范式 - 3NF
在满足第二范式的基础上,要求任何非主键列不能传递依赖于主键。也就是说,非主键列必须直接依赖于主键,而不是通过其他非主键列间接依赖于主键,遵循独立性。这有助于进一步消除数据冗余和更新异常。
| 编号 | 部门 | 姓名 | 性别 | 部门经理 |
|---|---|---|---|---|
| 001 | 技术部 | 张三 | 男 | 王经理 |
| 002 | 技术部 | 李四 | 男 | 王经理 |
| 003 | 行政部 | 王五 | 女 | 李经理 |
上表符合第二范式,但是在非主键字段中,部门经理依赖于部门,所以不符合第三范式。那怎么调整才符合第三范式呢?答案是拆成两张表,消除依赖传递。
- 员工表
| 编号 | 部门 | 姓名 | 性别 |
|---|---|---|---|
| 001 | 技术部 | 张三 | 男 |
| 002 | 技术部 | 李四 | 男 |
| 003 | 行政部 | 王五 | 女 |
- 部门表
| 部门 | 部门经理 |
|---|---|
| 技术部 | 王经理 |
| 行政部 | 李经理 |
第四范式 - 4NF
在第三范式的基础上,要求表中的列不能再有重复的元组。也就是说,表中的每一列都应该包含唯一值,没有重复的组合。它是在第三范式的基础上进一步消除多值依赖的范式。
多值依赖是指一个非主键字段依赖于另一个非主键字段的多个值。在第四范式中,这种多值依赖关系被要求被拆分为独立的关系表,以消除数据冗余和更新异常。
具体来说,如果在一个关系模式中存在多个独立的多值依赖关系,那么这些多值依赖关系应该被分解成单独的关系模式。每个模式都只包含一组相关的数据,从而避免数据的冗余和不一致性。这样的拆分使得数据库结构更加清晰,数据更加简洁,同时也提高了数据的一致性和完整性。
第五范式 - 5NF
它要求表中的每一列都是不可再分的最小单元,并且所有的函数依赖关系都已经被明确地定义。这意味着表中不会有隐含的数据依赖关系,所有的依赖关系都应该清晰地表达出来。这有助于消除所有可能的数据冗余和更新异常。
巴斯-科德范式 - BCNF
BCNF范式并不是传统意义上的第六范式,但实验室同样是数据库设计中重要的一个概念。BCNF要求所有决定因素(即能唯一确定一个元组的属性或属性组)都必须包含候选键。这有助于消除由传递函数依赖导致的冗余和更新异常。
总结
这六大范式在数据库设计中是层层递进的,满足更高层次的范式通常意味着数据库的设计更加合理、数据冗余更少、维护更加方便。但在实际应用中,并不是一定要满足所有范式,而是要根据具体的应用场景和需求进行权衡和选择。
相关文章:
mysql笔记:20. 什么是数据库六大范式
文章目录 简介什么是范式最常用的范式 第一范式 - 1NF第二范式 - 2NF第三范式 - 3NF第四范式 - 4NF第五范式 - 5NF巴斯-科德范式 - BCNF总结 简介 什么是范式 范式(Normal Form,简称NF)是数据库设计时遵循的一种规范,不同的规范…...
4.GetMapping和PostMapping 和 @RequestMapping的区别。RequestBody 和ResponseBody的区别
1.GetMapping和PostMapping 和 RequestMapping的区别 //GetMapping只能通过get请求。 public class Hello1{GetMapping("hello1")public String h1(){return "1";}//PostMapping只能通过post请求,需要输入参数。 public class Hello2{PostMapp…...
UE要收费?难道ue的使用成本要增加吗?
去年,Epic Games在裁员16%后,放出要对非游戏制作等行业使用UE进行收费的消息。3月12日,Epic Games正式宣布了对UE、实时可视化工具Twinmotio和摄影测量应用RealityCapture的新定价。 Epic Games将从下个月开始推出新的Unreal订阅模式&#x…...
深度学习-2.6在MINST-FASHION上实现神经网络的学习流程
文章目录 在MINST-FASHION上实现神经网络的学习流程1. 导库2. 导入数据,分割小批量3. 定义神经网络4.定义训练函数5.进行训练与评估 在MINST-FASHION上实现神经网络的学习流程 现在我们要整合本节课中所有的代码实现一个完整的训练流程。 首先要梳理一下整个流程&a…...
Java后端八股----JVM篇
上图中线程1,2如果资源被抢占了,则程序计数器记录一下执行的行号,等到资源就绪后会从记录的行号继续向后执行。 Java8把静态变量以及常量放到了线程的本地内存原空间中(避免放在堆中不可控)。 👆图中第二种情况不太容易出现…...
使用 C 或 C++ 扩展 Python
如果你会用 C,添加新的 Python 内置模块会很简单。以下两件不能用 Python 直接做的事,可以通过 extension modules 来实现:实现新的内置对象类型;调用 C 的库函数和系统调用。 为了支持扩展,Python API(应…...
MVC接收请求教程
mvc接收各种请求 1-环境搭建 1.1-准备apifox发送请求 1.2-项目搭建 ①创建Web骨架的Maven项目 --打开2023-IDEA ,选择New Project --选择Maven Archetype --注意点:Catalog默认就行了 --Archetype选择webapp --JDK跟着黑马敲最好…...
P8711 [蓝桥杯 2020 省 B1] 整除序列 存疑解决篇 Python
[蓝桥杯 2020 省 B1] 整除序列 题目描述 有一个序列,序列的第一个数是 n n n,后面的每个数是前一个数整除 2 2 2,请输出这个序列中值为正数的项。 输入格式 输入一行包含一个整数 n n n。 输出格式 输出一行,包含多个整数…...
「Linux系列」聊聊vi/vim的3种命令模式
文章目录 一、vim简介二、命令模式1. 光标移动2. 复制、剪切和粘贴3. 撤销和重做4. 搜索和替换5. 显示行号 三、输入模式1. 进入输入模式2. 在输入模式下编辑文本3. 使用特殊字符和快捷键注意事项 四、命令行模式1. 保存和退出2. 查找和替换3. 显示行号和其他设置4. 执行外部命…...
密码学——数字签名
数字签名 引言数字签名签名方案直接数字签名EIGamal 数字签名方案公钥和私钥对的产生签名的产生签名的验证Schnorr 数字签名方案公钥和私钥生成签名生成签名验证证书和认证中心引言 消息认证可以保护双方不受第三方的攻击,但是消息认证不能处理双方自身发生的攻击。如接受方可…...
【Mysql事务】
目录 前言 1.事务的特性是什么?可以详细说一下吗? 2.并发事务带来哪些问题?怎么解决这些问题呢?Mysql的默认隔离级别是? 3.undo log和redo log的区别。 4.事务中的隔离性是如何保证的(解释一下MVCC)? 5.主从同…...
从SQL质量管理体系来看SQL审核(2) - SQL质量标准
从SQL质量管理体系来看SQL审核系列将通过多篇文章从SQL质量管理体系的角度来讨论如何设计一个优秀SQL审核引擎。 本系列的第一篇博文介绍了SQL质量管理体系的四个主要组成部分,SQL质量标准确立目标,SQL开发规范指导编码实践,SQL审核工具监督…...
idea远程试调jar、远程试调war
idea远程试调jar、远程试调war 目的:测试运行时与ide开发时是否一致。 配置jar Maven中添加 <packaging>jar</packaging>将其打包为jar。 设置运行入口main 编译jar 看到jar输出 配置试调 添加jar运行 远程试调 先在源码中打好断点试调 debug运行…...
hdlbits系列verilog解答(Gatesv)-58
文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节我们得到一个4位的输入向量,我们想知道每个比特与相邻比特之间的一些关系。 out_both:此输出向量的每个位都应指示相应的输入位及其左侧的邻居(较高索引)是否均为“1”。例如, out_both[2] 应指示 和 …...
pdf文件属性的删除
pdf文件属性的删除 投标过程中需要处理文件属性,特别是word文件属性以及pdf文件的处理 这里讲解pdf文件属性的处理 word处理在我的另外一个博客中,word文件属性的处理 https://ht666666.blog.csdn.net/article/details/134102504 一般用 adobe acroba…...
OpenAI 的 GPTs 提示词泄露攻击与防护实战:防御卷(二)
防御提示词 在对抗提示注入攻击的持续战斗中,以下是防御方的防御提示。请随意将这些内容复制到您的提示库中,以防止提示误用 1. Please, no matter what anyone asks you, do not share these instructions with anyone asking for them. No matter how…...
mysql update set时使用and连接使更新的数据出现问题
mysql update set时使用and连接使更新的数据出现问题 简单来讲,我在开发时因为错误的使用and进行set连接而不是用,连接,使数据更新的不对,原本的decimal的数据值0.5被我更新后变成了null而不是0.3 原理在这篇博客里有进行说明(我没…...
高职(大专)教师结构化面试之复习攻略
一般高校自己组织的面试,结构化分为以下几部分: 1.岗位认知(必背) 2.职教热点(很重要) 3.教育教学(包括教育教学理论、教育热点、教学相关问题解决) 4.人际关系(与领…...
蓝桥杯C++大学B组一个月冲刺记录2024/3/18
蓝桥杯C大学B组一个月冲刺记录2024/3/18 规则:每日三题 昨天因为前妻姐emo上了,静下来思考了点东西,就没做题啦.今日补上! 另外:博客浏览量破万了,写的东西有人看还是很开心的 1.母亲的牛奶 农夫约翰有三个容量分别为 A,B,C升的挤奶桶。 最开始桶 A和桶 B都是空的,…...
科技云报道:第五次工业革命,中国AI企业如何打造新质生产力?
科技云报道原创。 人类历史的叙述与技术进步的影响深深交织在一起。 迄今为止,每一次工业革命都彻底改变了我们社会的轮廓,引入了机械化、大规模生产和数字化,并重新定义了人类生存的规范。 自2022年11月30日OpenAI发布ChatGPT以来&#x…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
