六大范式

设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同规范要求被称为不同的范式,各范式呈递次规范,越高范式数据库的冗余越小。只要符合前三大范式就不会发生插入(insert)、删除(delete)和更新(update)操作异常。

  • 分类
    目前关系型数据库被分为6种范式,分别为:
    第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯一科德范式(BCNF)、第四范式(4NF)、第五范式(5NF,又称完美范式)
  • 简单理解
    1NF : 列不能混着用就行了。
    2NF:要有一个主键,它能决定其他列的值。
    3NF:对于除了主键外的列,不存在某个列,它能决定其他列。
  • 概念解释

    • 码:表中,通过一个属性或属性组,可以决定唯一的一条记录,那么这个属性或属性组就被称为候选码,简称码;
      • 主属性:码中的所有属性(示例中的绿色背景列);
      • 非主属性:除开码中属性的其他属性;
    • 函数依赖:A->B,通过A属性(组)的值,可以确定唯一的B属性的值,则称B依赖于A,数学函数表示B=f(A) ;
      • 完全函数依赖:A->B,B属性值的确定需要依赖于A属性组中的所有属性值;
      • 部分函数依赖:A->B,B属性值的确定需要依赖于A属性组中的部分属性值;
      • 传递函数依赖:A->B,B->C,如果通过A属性(组)的值,可以确定唯一B属性的值,再通过B属性的值可以确定唯一C属性的值,则称C传递函数依赖于A。

        1NF

        每一列都是不可分割的原子数据项

  • 解决了

关系型数据库表的建立必须满足1NF,否则就不是关系型数据库表

  • 存在的问题

1.数据冗余;
2.插入异常;

  • 如果需要新建一个系,并且有系主任,但是因为还没有学生,所以主键是空的,会导致无法插入

3.删除异常;

  • 如果需要把某个系下面学生信息都清空,那么这个系也就不存在了

4.修改异常;

  • 如果需要把学生的系进行更换,就需要把三条数据里面的系名和系主任都修改才可以。
  • 仅符合1NF: | 姓名 | 系名 | 系主任 | 课名 | 分数 | | —- | —- | —- | —- | —- | | 小花 | 搬砖系 | 小花花 | 高数 | 60 | | 小花 | 搬砖系 | 小花花 | 英语 | 99 | | 小花 | 搬砖系 | 小花花 | 编程 | 99 | | 小明 | 英语系 | 小明明 | 高数 | 80 | | 小明 | 英语系 | 小明明 | 英语 | 59 | | 小明 | 英语系 | 小明明 | 编程 | 99 |

问题:非主属性 “系名” 仅仅依赖于主属性 “姓名” 而不依赖于主属性 “课名”,即存在非主属性部分依赖于码。

2NF

在1NF的基础上,非主属性必须完全依赖于码(在1NF基础上消除非主属性对码的部分函数依赖);
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

  • 判断是否符合2NF

判断是否符合2NF,就是看数据表中是否存在非主属性对于码的部分函数依赖,若存在则不符合2NF,若不存在,则符合2NF。

  • 解决了

1.消除非主属性对码的部分函数依赖;
2.数据冗余、修改异常

  • 存在的问题

1.非主属性对码的传递依赖;
2.插入异常、删除异常

  • 仅符合2NF: | 姓名 | 课名 | 分数 | | —- | —- | —- | | 小花 | 高数 | 60 | | 小花 | 英语 | 99 | | 小花 | 编程 | 99 | | 小明 | 高数 | 80 | | 小明 | 英语 | 59 | | 小明 | 编程 | 99 |
姓名 系名 系主任
小花 搬砖系 小花花
小花 搬砖系 小花花
小花 搬砖系 小花花
小明 英语系 小明明
小明 英语系 小明明
小明 英语系 小明明

问题:非主属性 “系主任” 不直接依赖于主属性 “姓名”,它通过非主属性 “系名”传递依赖于主属性 “姓名”;

3NF

在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖);
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关,即不存在传递函数依赖。

  • 解决了

1.消除了非主属性对码的传递依赖;
2.数据冗余、插入异常、删除异常、修改异常

  • 仅符合3NF: | 姓名 | 课名 | 分数 | | —- | —- | —- | | 小花 | 高数 | 60 | | 小花 | 英语 | 99 | | 小花 | 编程 | 99 | | 小明 | 高数 | 80 | | 小明 | 英语 | 59 | | 小明 | 编程 | 99 |
姓名 系名
小花 搬砖系
小明 英语系
系名 系主任
搬砖系 小花花
英语系 小明明

巴斯一科德范式

属于第三范式的修正版,在3NF基础上不允许主属性间存在依赖关系。

通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。

4NF

非主属性不应该有多值。如果有多值就违反了第四范式。4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。

⚠️:如果只考虑函数依赖,关系模式规范化程度最高的范式是BCNF;如果考虑多值依赖则是4NF。

5NF

第五范式属于最终范式,消除了4NF中的连接依赖