关系型数据库的1NF、2NF、3NF

一直是似懂非懂,今天似乎搞明白了,当然也希望有人帮我指正。

这有一文,说得不错:https://zhidao.baidu.com/question/624751186930899444.html

首先我们明确符合3NF的,必然符合2NF;符合2NF,也符合1NF;三者是一个包含关系。所以我认为重点是如何界定符合2NF,但不符合3NF的情形。

先来看看这个关系

R(学号,姓名,性别,年龄,所在系的编号,所在系的名称)

在这个关系中,主码是(学号),各个非主属性对主码的依赖关系有:学号→姓名,学号→性别,学号→年龄,学号→所在系编号,

另外还存在依赖关系:所在系的编号→所在系的名称,即所在系名称对主码(学号)存在传递依赖,所以属于2NF。

2NF是关系中存在传递依赖,但不存在部分依赖的关系,3NF是关系中既不存在部分依赖,也不存在传递依赖的关系。

可以分割为两个关系,以消除传递依赖,使其符合3NF:
R1(学号,姓名,性别,年龄,所在系的编号),R2(所在系的编号,所在系的名称)

那么什么叫部分依赖关系呢?

看这个关系

R(课程号,学生编号,姓名,性别,考试成绩,课程名)

在这个关系中,主码是(课程号,学生编号),各大非主属性对主码的依赖关系有:(课程号,学生编号)→考试成绩,同时存在部分依赖关系学生编号→姓名,学生编号→性别,课程号→课程名

所以以上关系不属于2NF,只能算是1NF。部分依赖关系是指非主属性只依赖于部分主码。

原文地址:https://www.cnblogs.com/kevin-Y/p/14813763.html