1NF,2NF,3NF,BCNF(3NF和BCNF的区别)
候选码:若关系中的某一组属性的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码;
主码:若一个关系有多个候选码,则选定其中一个为主码;
主属性&&非主属性:候选码的诸属性都称为主属性,不包含在任何候选码中的属性称为非主属性;
1NF
满足最低要求的叫第一范式。
- 2NF
若R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF
- 3NF
若R中的每一个非主属性既不传递依赖于码,也不部分依赖于码,则R属于第三范式
- BCNF
- 所有非主属性对每一个码都是完全函数依赖;
- 所有的主属性对每一个不包含它的码,也是完全函数依赖;
- 没有任何属性完全函数依赖于非码的任何一组属性。
- 栗子1
关系模式SJP(S,J,P)中,S是学生,J表示课程,P表示名次,每一个学生选修每门课程的成绩都会有一定的名次,每门课程中每一个名次只有一个学生(即没有并列名次)。
函数依赖(S,J)决定P,(J,P)决定S;
所以(S,J)与(J,P)都可以作为候选码,这两个码由两个属性组成,不存在非主属性,显然没有非主属性对码的传递和部分函数依赖,所以SJP属于第三范式;而且满足上面1,2,3三条,所以SJP属于BCNF;
- 栗子2
关系模式STJ(S,T,J)中,S是学生,T是教师,J是课程。每一教师只教一门课,每门课有若干教师,某一学生选定某课程,就得到一个固定的教师。
函数依赖:(S,J)决定T;(S,T)决定J;T决定J;
这里候选码(S,J),(S,T);
不存在非主属性对码的部分或传递函数依赖,所以STJ属于第三范式;
但是J部分函数依赖于码(T,S),不满足第2条,所以STJ不属于BCNF;