1NF,2NF,3NF,BCNF(3NF和BCNF的区别)

  • 候选码:若关系中的某一组属性的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码;
  • 主码:若一个关系有多个候选码,则选定其中一个为主码;
  • 主属性&&非主属性:候选码的诸属性都称为主属性,不包含在任何候选码中的属性称为非主属性;
  • 1NF

       满足最低要求的叫第一范式。

  • 2NF

      若R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF

  • 3NF

      若R中的每一个非主属性既不传递依赖于码,也不部分依赖于码,则R属于第三范式

  • BCNF
  1. 所有非主属性对每一个码都是完全函数依赖;
  2. 所有的主属性对每一个不包含它的码,也是完全函数依赖;
  3. 没有任何属性完全函数依赖于非码的任何一组属性。
  • 栗子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;

如有哪个地方写错了,欢迎指出来;

你可能感兴趣的:(数据库)