关系型数据库的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。部分依赖关系是指非主属性只依赖于部分主码。