MySQL篇(数据库范式)(持续更新迭代)

ops/2024/9/25 21:21:23/

目录

一、什么是范式

二、三大范式

第一范式(1NF)

第二范式(2NF)

第三范式(3NF)

三、其他大三范式

巴斯-科德范式(BCNF,Boyce-Codd Normal Form)

第四范式(4NF)

第五范式(5NF)


一、什么是范式

范式(数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。

构造数据库必须遵循一定的规则。

在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。

二、三大范式

第一范式(1NF)

在任何一个关系数据库中,

第一范式(1NF是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库

所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,

即实体中的某个属性不能有多个值或者不能有重复的属性。

如果出现重复的属性,就可能需要定义一个新的实体,

新的实体由重复的属性构成,新实体与原实体之间为一对多关系。

在第一范式(1NF)中表的每一行只包含一个实例的信息。

简而言之,第一范式就是无重复的列。

第一范式 (1NF) 示例:

订单表 (Orders):

OrderID

CustomerName

Products

1

John

Product1, Product2

2

Jane

Product3

3

Bob

Product1, Product3

在上面的表中,每个单元格包含原子值,没有多值属性,因此符合第一范式(1NF)。

第二范式(2NF)

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,

即满足第二范式(2NF)必须先满足第一范式(1NF)。

第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。

为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

这个唯一属性列被称为主关键字或主键、主码。

第二范式(2NF)要求实体的属性完全依赖于主关键字。

所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。

如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,

新实体与原实体之间是一对多的关系。

为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

简而言之,第二范式就是非主属性完全依赖于主关键字。

第二范式 (2NF) 示例:

如果我们将产品表(Products)引入,它包含了产品信息,包括产品号(ProductID)、产品名称(ProductName)和产品描述

(ProductDescription)。

订单表 (Orders):

OrderID

CustomerName

1

John

2

Jane

3

Bob

产品表 (Products):

ProductID

ProductName

ProductDescription

1

Product1

Description1

2

Product2

Description2

3

Product3

Description3

产品表(Products)和订单表(Orders)之间存在关系,通过“产品号”(ProductID)来连接

这符合第二范式(2NF),因为非主键属性(如“产品描述”)依赖于整个候选键(“产品号”)。

第三范式(3NF)

满足第三范式(3NF)必须先满足第二范式(2NF)。

简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。

那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息

表中。

如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

简而言之,第三范式就是属性不依赖于其它非主属性。

第三范式 (3NF) 示例:

如果我们在订单表(Orders)中添加一个新的属性,比如“客户地址”(CustomerAddress):

订单表 (Orders):

OrderID

CustomerName

CustomerAddress

1

John

Address1

2

Jane

Address2

3

Bob

Address1

在这种情况下,客户地址(CustomerAddress)依赖于“客户名称”(CustomerName),而不是订单号

(OrderID)。这违反了第三范式(3NF)。

为了符合3NF,我们应该将“客户地址”移动到一个独立的客户表,其中“客户名称”是主键,然后在订单表中使

用客户名称作为外键来建立关联。

三、其它范式

巴斯-科德范式(BCNF,Boyce-Codd Normal Form)

某些特殊情况下,即使关系模式符合3NF的要求,仍然存在着插入异常,修改异常与删除异常的问题。

BCNF由Boyce与Codd提出,通常被认为是修正的第三范式。

巴斯-科德范式即在满足第三范式(3NF)基础上,任何非主属性不能对主键子集依赖

(即在3NF基础上,消除主属性对候选码的部分函数依赖和传递函数依赖)。

BC范式既检查非主属性,又检查主属性。当只检查非主属性时,就成了第三范式。

满足BC范式的关系都必然满足第三范式。

或者还可以换一种说法:

若一个关系达到了第三范式,并且它只有一个候选码,

或者它的每个候选码都是单属性,则该关系自然达到BC范式。

一般来说,一个数据库设计符合3NF或BCNF就可以了。

第四范式(4NF)

多值依赖的概念:

多值依赖即属性之间的一对多关系,记为K→→A。函数依赖事实上是单值依赖,所以不能表达属性值之间的一对

多关系。

平凡的多值依赖:

全集U=K+A,一个K可以对应于多个A,即K→→A。此时整个表就是一组一对多关系。

非平凡的多值依赖:全集U=K+A+B,一个K可以对应于多个A,也可以对应于多个B,A与B互相独立,即

K→→A,K→→B。

整个表有多组一对多关系,且有:“一”部分是相同的属性集合,“多”部分是互相独立的属性集合。

第四范式即在满足巴斯-科德范式(BCNF)的基础上,消除非平凡且非函数依赖的多值依赖(即把同一表内的多对多关系删除)。

第五范式(5NF)

即在满足第四范式(4NF)的基础上,消除不是由候选码所蕴含的连接依赖。

如果关系模式R中的每一个连接依赖均由R的候选码所隐含,则称此关系模式符合第五范式。

函数依赖是多值依赖的一种特殊的情况,而多值依赖实际上是连接依赖的一种特殊情况。

但连接依赖不像函数依赖和多值依赖可以由语义直接导出,而是在关系连接运算时才反映出来。

存在连接依赖的关系模式仍可能遇到数据冗余及插入、修改、删除异常等问题。


http://www.ppmy.cn/ops/115954.html

相关文章

Web3技术在元宇宙中的应用:从区块链到智能合约

随着元宇宙的兴起,Web3技术正逐渐成为其基础,推动着数字空间的重塑。元宇宙不仅是一个虚拟世界,它还代表着一个由去中心化技术驱动的新生态系统。在这个系统中,区块链和智能合约发挥着至关重要的作用,为用户提供安全、…

计算机毕业设计之:基于微信小程序的校园流浪猫收养系统(源码+文档+讲解)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

【Linux】Linux的基本指令(1)

A clown is always a clown.💓💓💓 目录 ✨说在前面 🍋知识点一:Linux的背景 •🌰1.Unix发展的历史 •🌰2.Linux发展历史 •🌰3.企业应用现状 •🌰4.发行版本 &…

正向科技|格雷母线定位系统的设备接线安装示范

格雷母线安装规范又来了,这次是设备接线步骤 格雷母线是格雷母线定位系统的核心部件,沿着移动机车轨道方向上铺设,格雷母线以相互靠近的扁平状电缆与天线箱电磁偶合来进行信号传递,从而检测得到天线箱在格雷母线长度方向上的位置。…

K8s flink-operator 例子

1.参考官网: https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-stable/docs/try-flink-kubernetes-operator/quick-start/ 2.首先环境具备 k8s、helm 我的环境 k8s 1.30 最新版本了 [rootk8s-master ~]# kubectl get no -owide NAME …

天润融通发布微藤智能体平台,中国客户联络正式进入“智能体时代”

9月19日,以“云启智跃,产业蝶变”为主题的2024云栖大会在杭州正式开幕。大会持续三天,聚焦AI时代的技术升级与实践应用,设有三大主论坛、400多个分论坛,并开放4万平方米的智能科技展区,展示全球百余款AI应用…

前端工程记录:Vue2 typescript项目升级Vue3

由于typescript飞速发展,某些vue2项目也在vue3出现之前集成了typescript开发,例如我的个人网站,当时花费了不少时间。而vue3我使用一段时间后,在2022年左右开始投入生产,但是这个个站就没怎么维护了。若是想继续&#…

MySQL5.7.42高可用MHA搭建及故障切换演示

系列文章目录 rpmbuild构建mysql5.7RPM安装包 MySQL基于GTID同步模式搭建主从复制 文章目录 系列文章目录前言一、MHA架构介绍1.MHA的功能2.MHA组成3.MHA故障转移过程4.MHA架构优缺点 二、环境准备1.服务器免密2.基于GTID主从复制搭建3.下载mha组件 三、MHA组件安装1.安装依赖…