美文网首页
Mysql六大范式

Mysql六大范式

作者: 翔子161919 | 来源:发表于2020-07-11 17:42 被阅读0次

一、数据库范式

1、第一范式(1NF)

数据库表中的字段都是单一属性的,即属性应该是不可再分的。这是关系型数据库的基本要求。

比如说属性地址,可以继续拆分成多个属性省、市、镇、街道、门牌号…

但仅仅符合1NF的设计,仍然会存在数据冗余过大,插入异常,删除异常,修改异常的问题。

2、第二范式(2NF)

在第一范式的基础上,消除非主属性对候选键的部分依赖。对于候选键只有一个属性的数据库表,其一定符合第二范式。

函数依赖:若在一张表中,在属性X确定的情况下,必定能确定属性Y的值,也就是说在一张表中,不存在任意两条属性,他们属性X的值相同,但属性Y的值不同。

那么就可以说Y函数依赖于X,写作X->Y。

函数依赖分为完全函数依赖、部分函数依赖、传递函数依赖。

码:

假设K为某个表中的一个属性或者属性组,若除K之外的所有属性都完全函数依赖于K,那么我们称K为候选码,简称。通常理解为:假如当K确定的情况下,该表除K之外的所有属性的值也就随之确定,那么K就是码。一张表中可以有超过一个码。实际中为了方便,通常选择其中一个作为主码。

非主属性:

包含在任何一个码中的属性称为主属性,其余称为非主属性。

判断是否符合2NF的方法是

第一步:找出数据表中所有的

第二步:根据第一步所得到的码,找出所有的主属性

第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了。

第四步:查看是否存在非主属性对码的部分函数依赖

为了达到2NF的要求,必须消除找到的这些部分函数依赖,只有一个办法,就是将大数据表拆分成两个或者更多个更小的数据表,在拆分的过程中,要达到更高一级范式的要求,这个过程叫做”模式分解“。

比如:

学生-课程表(学号,姓名,性别,课程名,学分)

可知存在如下函数依赖:

(学号,课程名)->(姓名,性别,学分)

(学号)->(姓名,性别)

(课程名)->(学分)

五个属性均不可再分,满足1NF,由2,3可知存在非主属性对候选键((学号,课程名))的的部分依赖,所以上述表结构不满足2NF,我们可以改造成以下三个表来满足2NF:

学生表(学号,姓名,性别)

课程表(课程号,课程名,学分)

学生-课程表(学号,课程号)

2NF仍然会存在删除和插入错误、部分数据冗余。

3,第三范式(3NF)

在第二范式的基础上,消除非主属性对于(候选码)的传递依赖。

比如:

学生表(学号,姓名,班级名,班主任)

可知存在如下依赖:

(学号)->(姓名,班级名,班主任)

(学号)->(班级名)

(班级名)->(班主任)

因为主键是单列键,显然,满足2NF,又由2,3可知存在(学号)->(班主任)的传递依赖,所以不满足3NF,可以改造为如下两个表使之符合3NF:

学生表(学号,姓名,班级ID)

班级表(班级ID,班级名,班主任)

4、巴斯-科德范式(BCNF)

在满足第三范式的基础上,消除主属性对于候选键的部分函数依赖和传递函数依赖

比如:

仓库(仓库名,管理员,物品名,数量)(仓库指定由唯一管理员管理,管理员管理唯一仓库)

可知存在如下依赖:

(仓库名,物品名)->(数量)

(管理员,物品名)->(数量)

(管理员)->(仓库名)

(仓库名)->(管理员)

可知,这里只有一个非主属性,即“数量”,且不存在非主属性对两个候选键的部分与传递函数依赖。所以以上表关系满足3NF。但存在着主属性对两个候选键的部分函数依赖,这会导致插入异常、删除异常、修改异常的存在,比如:

插入异常,不能插入一个空仓库(作为主属性的“物品名”不能为空);

删除异常,删除某个仓库内所有物品后,会一并将仓库的管理员信息删除;

修改异常,修改仓库的管理员信息,不得不进行批量修改,同理修改物品名、仓库名时也不得不批量修改。

可以改造如下两个表结构,使之符合BCNF:

仓库(仓库名,管理员)

仓储(仓库名,物品名,数量)

5、第四范式(4NF)

在BC范式的基础上,消除属性间非平凡且非函数依赖的多值依赖,这里提的多值依赖于之前的函数依赖不同。多值依赖标识属性间的一种依赖关系,比如有属性X、Y、Z,对于X的每个值,Y有一个值集,Z有一个值集,并且Y的值集合Z的值集彼此独立。

比如:

课程表(课程名,修读该课程的学生,教授该课程的教师)

上述关系满足BCNF,且可知一个课程对应N个学生的同时对应N个教师,且学生与教师是独立的,故不满足4NF,可以改造为如下的两个表结构,使之符合4NF:

学生-课程表(课程名,修读该课程的学生)

教师-课程表(课程名,教授该课程的教师)

6、第五范式(5NF)

在第四范式的基础上,消除关系中的所有冗余。5NF避免了所有的数据冗余,节省了存储空间,同时保持了数据的一致性,但是也付出了效率上的代价。在实际应用中,数据库适当的冗余其实有助于提高查询的效率,减少过多的表连接操作,所以5NF的应用少之又少。

比如:

选修课表(学生,课程,教师)(多个老师可以同时教授同一门选修课,多个学生能选修同一门选修课)

可知(学生,课程,教师)就是唯一一个候选键,所有属性都是主属性,且不满足属性间的多值依赖,故满足4NF,但是存在大量冗余,可以改造为以下三个表结构,使之符合5NF:

学生-课程表(学生,课程)

课程-教师表(课程,教师)

学生-教师表(学生,教师)

学习自:https://blog.csdn.net/qq_38309645/article/details/105051671

相关文章

  • Mysql六大范式

    一、数据库范式 1、第一范式(1NF) 数据库表中的字段都是单一属性的,即属性应该是不可再分的。这是关系型数据库的...

  • MySQL三大范式和反范式

    MySQL三大范式和反范式 第一范式 第二范式 第三范式 反范式

  • 数据库设计三范式与反范式

    MySql设计与优化系列笔记:一、数据库设计三范式与反范式二、MySql表设计与优化 第一范式: 1、数据库的所有...

  • MySQL-范式

    MySQL-范式 、 MySQL-范式是一种分层结构的规范,分为6层,每一次层都比上一层更加严格范式只为解决空间问...

  • 【Mysql优化分析】之InnoDB索引类型及原理、字段范式/逆

    Mysql优化的部分有很多,本文主要介绍Mysql执行过程、索引类型及原理、字段范式/逆范式设计、索引设计及使用。...

  • MySQL范式

    这里主要是记录一些学习数据库的笔记,其他的部分,在CSDN博客里,这里是链接https://blog.csdn.n...

  • MySQL范式

    范式介绍 目前关系型数据库有6种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(B...

  • MySql表设计与优化

    MySql设计与优化系列笔记:一、数据库设计三范式与反范式二、MySql表设计与优化 1、实体关系分析 实体关系需...

  • 【MySQL】范式与反范式

    一、数据库范式 1、第一范式(1NF): 无重复列,即表中每一列都是不可分割的,不满足第一范式的数据库不是关系型数...

  • mysql

    1. MySQL简介 MySQL是广泛应用的一种关系型数据库 1.1 三范式 第一范式(1NF):列不可拆分 第二...

网友评论

      本文标题:Mysql六大范式

      本文链接:https://www.haomeiwen.com/subject/boyicktx.html