MySQL-六范式

MySQL-六范式

数据库范式是关系数据库设计的基本理论,优秀的数据库设计离不开数据库范式支撑;数据库范式规范了数据库设计原则,使得数据库能够更好的融入到互联网产品当中。

数据库范式的意义

数据库范式是主要解决 关系数据库中 数据冗余,更新异常,插入异常,删除异常 等问题设计的数据库理念,简单来说,数据库范式是解决上述问题的良方,可以避免数据冗余,减少数据库存储空间,减轻维护成本。

分类

数据库范式一共分为六类,设计数据库时常用前三类;范式是评价数据库模型设计的规范程度从低到高有:第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯.科德范式(BCNF),第四范式(4NF),第五范式(5NF、又称完美范式);

1NF 第一范式--无重复的列
是指数据库表的每一列都是不可分割的基本数据项;表中的每个字段都是该事件属性的基本原子单元。即每个字段必须遵循原子性。

2NF 第二范式--属性完全依赖于主键[消除部分子函数依赖]
如上图,第二范式是在第一范式基础之上,那就是说在 字段原子性的基础之上,要保证一张表中 所有非主键字段 都完全依赖于主键;一张表只描述一件事。注意:是完全依赖于主键,不是部分依赖。
​
举例:一张表中(学号  学生姓名  社团号 社团名)四个字段,显然社团名完全依赖于社团号,学生姓名 完全依赖于学号,所以这张表中不是描述一件事,且社团名 与 学号不存在完全依赖关系,所以不满足第二范式,可以将其拆分成两张表,学生信息表:(学号  学生姓名),社团信息表:(社团号 社团名);这样就OK了。

3NF 第三范式--属性不依赖于其它非主属性[消除传递依赖]
第三范式 意思是 表中的字段不依赖其他非主字段,继续解释 还不是大白话 :就是 非主键字段 之间 不存在任何依赖关系。
举例 还是上面的表 如果想要知道学生加入了哪个社团?现在就要给两表之间做一个关联,也就是说 学生信息表:(学号  学生姓名  社团号),社团信息表:(社团号 社团名);
要把社团号放到学生信息表中做关联,如果你社团名也放过来就违反了第三范式了。

一般来说,只要遵循前三个范式,数据库基本就可以满足。

BCNF(Bovce Codd Normal Form 巴克斯范式)
BCNF范式是为了 消除传递依赖,也就是说非主键之间不能存在传递依赖,消除了主属性对候选码的部分和传递函数依赖
例如:BCNF比较抽象,略作解释:在学生信息表里,学号是一个候选码,学号可确定学生姓名;(班级,学生姓名)也是一组候选码,有(班级,学生姓名)->学号,因此在主属性间形成了传递依赖

4NF 第四范式
限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
显然一个关系模式是4NF,则必为BCNF。也就是说,当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值,若有多值就违反了4NF。

5NF 第五范式
(1)必须满足第四范式;(2)表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。
​
第五范式是在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@大龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值