MySQL基础知识整理 ---- 范式

概述

1.什么是范式?范式是我们设计数据库是需要遵守的规范。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

2.范式之间的关系:5NF ⊂ 4NF ⊂ BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF。即如果一个范式是第五范式,那么它一定是第4范式。也就是说越高级别的范式都在其前一个范式的基础上而来,由低级别的范式到高级别的范式的过程就是我们常说的规范化
在这里插入图片描述
3.规范化:一个低一级范式的关系模式,通过模式分解可以转化为若干个高一级范式的关系模式的集合,这种过程就叫做规范化。规范化是为了解决数据库中数据的插入、删除、修改异常等问题的一组规则。

当我们设计一个数据库时如果能够满足前面的三种范式,那么数据的性能就相对比较良好的。所以本文将对第一范式(1NF),第二范式(2NF),第三范式(3NF)展开讲解。

几个重要的基本概念

1.函数依赖:如果通过A属性(属性组)可以唯一确定B属性(属性组),那么我们称B依赖于A。
2.完全函数依赖:如果A是一个属性组,B属性(属性组)值的确定需要依赖于A属性组中所有的属性值,称B完全函数依赖于A。
3.部分函数依赖:如果A是一个属性组,B属性(属性组)值的确定只需要依赖于A属性组中的一部分的值即可,称B部分函数依赖于A。
4.传递函数依赖:如果通过A属性(属性组)的值,可以唯一确定B属性(属性组),B属性组的值又可以唯一确定C属性(属性组)的值,则C传递函数依赖于A。
5.码:可以区别一个元组(表中的一行数组)的属性或属性的集合。
6.候选码:能够唯一标识一个元组的最小属性集(可能有多个)。
7.主码:某个能够唯一标识一条记录(一个元组)的最小属性集(是从候选码里人为挑选的一条)。
8.主属性:包含在任一候选码中的属性称主属性。简单来说,主属性是候选码所有属性的并集。
9.非主属性:包含在候选码中的属性称为非主属性,非主属性是相对于主属性来定义的。

第一范式(1NF)

1.概念
所谓第一范式(1NF)是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。

2.问题分析
对于下表,判断其是否满足第一范式?
在这里插入图片描述
观察此表,明显学院这个字段不满足原子性,可以分割为学院名称和学院院长,所以此表不满足第一范式。将其做如下修改边满足了第一范式。
在这里插入图片描述

第二范式

1…概念
在1NF的基础上,非主属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

2.问题分析
对于上表,明显存在严重的数据冗余现象,而且存在删除和修改的麻烦。比如当我们要删除张三这个人时,其对应的学院名称,学院院长…等字段也会跟着删除,而当我们只需要增加学院信息时,使用单纯的增添学院又会产生错误,这样的表结构,明显是不合理的。那么该如何解决这个问题呢?这就要求其必须满足第二范式。

假设姓名和学院名称不可重复。首先分析该表候选码,分析可得,该表的候选码为属性组(学号,课程名称)。姓名,学院名称,学院院长部分依赖于候选码中的序号,分数完全依赖于候选码。为了满足第二范式就必须对表进行拆分。如下明显解决了数据冗余的问题。
在这里插入图片描述
在这里插入图片描述

第三范式

1.概念
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

2.问题分析
当表满足第二范式后明显改进了数据冗余的问题,但在数据删除和添加上仍然存在问题。学院名称依赖于学号,学院院长有依赖于学院名称,即学院院长传递依赖于学号。这样的问题会影响数据的删除和插入,如果要解决该问题,便要满足第三范式,我们在将表进行拆分。
如下设计该表将可以解决数据的插入和删除的问题。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值