1NF | 2NF | 3NF的区分以及什么是函数依赖、部分函数依赖、值传递依赖

符合3NF一定符合2NF、一定符合1IF

简单区分。2NF不存在部分函数依赖,3NF不存在传递函数依赖

第一范式1NF

  • 符合1NF的关系中的每个属性都不可再分。

在这里插入图片描述

第二范式2NF

  • 消除了1NF非主属性对主属性的部分函数依赖。

函数依赖:在属性(属性组)X的值确定的情况下,必定能够确定属性Y的值。
例如:学号–>班主任。(学号,课程名称)–>分数。

完全函数依赖:在一张表中,如果X–>Y,对于X的任意子集都不能确定Y。
例如(学号,课程)–>分数。单独的学号、和课程都不能确定分数。一个学号多个课程分成绩,一个课程对应多个同学的成绩。只能由学号和课程共同确定具体的分数。

部分函数依赖:Y函数依赖X函数,但是Y函数不完全依赖X函数。就称函数Y部分依赖函数X。
例如:(学号,课程名)–>姓名。一个学号对应一个学生姓名,但是课程名并不能对应具体的学生。

传递函数依赖:Z函数依赖Y函数,Y函数依赖X函数(Y不包含X,X不依赖Y前提)。Z函数依赖X函数。

判断是否是2NF:查看表中是否存在非主属性对于码的部分函数依赖。不存在部分函数依赖就是2NF

判断方法:

  • 1、找出数据表所有的码
  • 2、根据码找出主属性
  • 3、找出非主属性
  • 4、查看非主属性对码的部分函数依赖

找码的过程:
1、查看一个单一属性,其他属性值是否都能确定
2、查看两个属性:其他属性值能否全部确定
3、…

例如:(学号,课名,姓名,系名,系主任,分数)。
单一的学号不能确定分数,分数的确定需要学号和课程。

码(学号,课名)

(学号,课名)–>系名.单独的学号就可以确定。部分依赖

改为2NF,消除部分依赖
将分数搞出去,选课(课程名,学号,分数)
学生(学号,姓名,系名,系主任)

选课的码(课程名,学号)–>分数
学生的码(学号)–> 只有一个主属性,不存在部分函数依赖

第三范式:3NF

  • 消除了非主属性对码的传递函数依赖。

选课表(课程名,学号,分数)不存在传递函数依赖。(课程名,学号)为主码,传递也需要另外两个属性。

学生表中,学号–>系名。系名–>系主任。存在传递函数依赖。不符合3NF。
消除这个传递函数依赖
系(系名、系主任)
学生(学号,姓名,系名)

posted on 2022-08-28 22:20  热爱技术的小郑  阅读(715)  评论(0编辑  收藏  举报