【Mysql数据库进阶02】第一范式~第四范式 Normal Form

news2024/11/22 8:07:59

第一范式~第四范式Normal Form

  • 0 引言
  • 1 第一范式
  • 2 第二范式
  • 3 第三范式
  • 4 BC范式
  • 5 第四范式
  • 总结

0 引言

因为软考,我又重新拾起了数据库,那么到底如何去判断它属于第几范式呢
在这里插入图片描述

1 第一范式

设R是一个关系模式,R属于第一范式当且仅当R中每一个属性A的值域只包含原子项,即不可分割的数据项。
1NF不能排除数据冗余和更新异常等问题,因为其中可能存在部分函数依赖。

第一范式要求数据库表中的每个字段都是原子性的,即每个字段只有一个值。
例如,如果一个“姓名”字段包含“姓”和“名”,则需要将其分开成独立的“姓”和“名”字段,以符合第一范式。

2 第二范式

设R是一个关系模式,R属于第二范式当且仅当R是1NF,且每个非主属性都完全函数依赖于候选码
除主键外的每一列都完全依赖于主键,即使主键是复合主键,要依赖它的全部。
属于 2NF 的关系模式R也可能存在数据几余和更新异常等问题,因为其中可能存在传递函数依赖。但不属于 2NF 的关系模式 R会产生插入异常、删除异常和修改复杂等问题。

例子:
在这里插入图片描述
主键是(零件号、供应商)
①看每个属性都是否是原子属性 ✓
②看非主属性有没有完全依赖于主键 ×
零件号→零件名称
零件名称部分依赖于主键中的零件号,没有完全依赖复合主键,所以不是完全依赖

3 第三范式

设R是一个关系模式,R属于第三范式当且仅当R是2NF,且每个非主属性都非传递函数依赖于候选码
一个不属于 3NF的关系模式R会产生插入异常、删除异常和修改复杂等问题。

例子:
在这里插入图片描述
主键是(时间,学生)
①看每个属性都是否是原子属性 ✓
②看非主属性有没有完全依赖于主键 ✓
③看非主属性是否没有传递依赖于主键 ×
(时间,学生)→教室 (时间,教室)→课程 ⇢ \dashrightarrow (时间,学生)→课程
可以用伪传递率推出此为传递依赖
在这里插入图片描述

4 BC范式

设R是一个关系模式,F是它的依赖集,R属于BCNF,当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。任何非主属性必须完全依赖于候选键,而非部分依赖。
由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:

  • 所有非主属性对每一个码都是完全函数依赖。
  • 所有的主属性对每一个不包含它的码,也是完全函数依赖
  • 没有任何属性完全函数依赖于非码的任何一组属性。一个满足BCNF的关系模式R已消除了插入和删除异常

5 第四范式

第四范式是一种更高级别的规范化形式,通过进一步减少冗余数据和处理多值依赖关系来提高数据库表的结构。第四范式通常用于解决表中出现多个多值依赖的情况,从而使数据库设计更加规范和灵活。

也就是取BCNF关系的投影,消去其中不是函数依赖的非平多值依赖(非平凡且非函数依赖的多值依赖),产生一组4NF关系。
说实话,后面两个范式不是很好理解啊

总结

设R是一个关系模式,当且仅当R中每一个属性都是原子项,R属于第一范式
在第一范式的基础上,每个非主属性都完全函数依赖于候选码,R属于第二范式
在第二范式的基础上,每个非主属性都非传递函数依赖于候选码,R属于第三范式
在这里插入图片描述

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

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

相关文章

P8805 [蓝桥杯 2022 国 B] 机房

P8805 [蓝桥杯 2022 国 B] 机房 分析 是一道lca题目,可以直接套模板 前缀和处理点权 具体思路: 1.n台电脑用n-1条网线相连,任意两个节点之间有且仅有一条路径(拆分成各自到公共祖先节点的路径——lca);…

MLP的代替:KAN

受柯尔莫哥洛夫-阿诺德表示定理的启发,作者提出柯尔莫哥洛夫-阿诺德网络(KAN)作为多层感知器(MLP)有前途的替代品。MLP 在节点(“神经元”)上具有固定的激活函数,而 KAN 在边&#x…

SAP CS07复制BOM简介

在比较大型的集团公司中会应用到这样一个场景,所有的BOM都是由总部研发统一管控,然后在下发到下属的工厂进行生产,当发生变更的时候BOM也是会随之进行变更。 同样的在相同的两家工厂中,使用的是一套的设计方案,并且当物料发起变更的时候BOM也要随之进行变更处理。 在对BO…

Linux程序开发(一):Linux基础入门安装和实操手册

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

C语言之旅:自定义类型(联合和枚举)

目录 一.联合体 1.1 联合体的声明 1.2 联合体的使用 1.3 为什么输出 4呢? 1.4 相同成员的结构体和联合体对比 1.5 联合体大小对比 1.6使用联合体判断大小端 二.枚举类型 2.1枚举类型的例举: 2.2枚举类型的优点 2.3 枚举类型的使用 在上篇文章中…

如何利用命令提示符列出文件?这里提供了几个实例供你参考

序言 什么命令可以用来列出目录中的文件?如何在命令提示符Windows 10/11中列出文件?很多人对这些问题感到困惑。在这篇文章中,我们详细解释了命令提示符列出文件的主题。 CMD(命令提示符)是一个功能强大的Windows内置…

Python学习之路 | Python基础语法(二)

Python3 面向对象 封装、继承、多态。 基础 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中…

与禹老师学前端vue3学习汇总

24.5.15: 创建Vue3工程 1.确定自己电脑有没有nodejs环境,在cmd中输入node,如果出现Node.js的版本号说明已经有这个环境了,否则搜索Node.js安装 2.先在D盘创建一个文件夹Vue3_Study,然后在这个空文件夹中右键选择终端…

【069】基于SpringBoot+Vue实现的企业资产管理系统

系统介绍 基于SpringBootVue实现的企业资产管理系统管理员功能有个人中心,用户管理,资产分类管理,资产信息管理,资产借出管理,资产归还管理,资产维修管理。用户可以对资产进行借出和归还操作。因而具有一定…

Git系列:Git Switch 高效使用技巧

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

实时网络监控 - 一目了然网络状况

网络问题排查一直是IT管理员头痛的问题。随着网络规模的不断扩大和业务复杂度的提升,如何快速定位和解决网络故障变得尤为关键。本文详细介绍了一款名为 AnaTraf 的网络流量分析工具,它能提供全流量回溯分析、实时网络监控、性能分析等功能,助力企业快速诊断和解决各…

每日两题 / 236. 二叉树的最近公共祖先 124. 二叉树中的最大路径和(LeetCode热题100)

236. 二叉树的最近公共祖先 - 力扣(LeetCode) dfs统计根节点到p,q节点的路径,两条路径中最后一个相同节点就是公共祖先 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* …

鸿蒙 DevEcoStudio:简单实现网络请求登录案例

使用http或axios实现登录案例 在entry/src/main/ets/pages路径下新建Page9.ets文件: import http from ohos.net.http import router from ohos.router Entry Component struct Page9 {State message: string Hello WorldState username: string State password:…

学习了java编程后,你就只能做java程序员吗?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 学习了Java编程后,…

KNN算法用于回归分析

生成数据集 from sklearn.datasets import make_regression import matplotlib.pyplot as plt# 生成特征数量为1, 噪音为50的数据集 X, y make_regression(n_features1, n_informative1, noise50, random_state8)# 散点图 plt.scatter(X, y, c"orange",…

CTF例题:[SWPU2019]Web1(无列名注入)

网址:BUUCTF在线评测 搜索web1 启动靶机 点击链接进入题目 进入题目后发现有登录和注册接口,直接注册登录。 首先通过1进行测试,查看是否有注入点 出现报错,说明可能存在注入点 然后继续测试发现该服务器过滤了: or、…

SFTPGO 整合minio AD群组 测试 |sftpgo with minio and ldap group test

SFTP-GO 研究 最近在测试sftpgo,发现中文的资料比较少,在企业中很多存储开始支持S3,比如netapp 于是想尝试把文件服务器换成sftpgoS3的存储,sftp go和AD 群组的搭配测试比较少 自己测试了一把,觉得还是没有server-u的A…

三类银行互联网贷款迎新规!速看菊风信贷智能双录解决方案

​​继2020年《商业银行互联网贷款管理暂行办法》(下称《办法》)和2021年《关于进一步规范商业银行互联网贷款业务的通知》之后,时隔三年,股份制银行、城商行、民营银行(简称“三类银行”)互联网贷款业务再…

shell脚本实现linux系统自动化配置免密互信

目录 背景脚本功能脚本内容及使用方法 1.背景 进行linux自动化运维时需要先配置免密,但某些特定场景下,做了互信的节点需要取消免密,若集群庞大节点数量多时,节点两两之间做互信操作非常麻烦,比如有五个节点&#x…

C++二叉搜索树搜索二叉树二叉排序树

C二叉搜索树 1. 二叉搜索树的概念 二叉搜索树(BST,Binary Search Tree),也称为二叉排序树或二叉查找树。它与一般二叉树的区别在于:每个结点必须满足“左孩子大于自己,右孩子小于自己”的规则。在这种规则的约束下,二…