惭愧,惭愧,不知道以前学的时候搞明白没。俩数据库彪壮的自行车唠半天总算是搞明白了。
第一范式 【定义】如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。简单的说,就是每一个列(属性),不能再分割成多个列(属性)。
【理解】一范式较好理解,不过多阐述。就是简单地说,属性不能再拆分,比如不能把学生ID和姓名存成一个属性。
第二范式 【定义】
在1NF的基础上,非主属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)。
【部分函数依赖】那么,什么又是部分函数依赖呢?来看看完全函数依赖的定义。
【完全函数依赖】如果非主属性B函数依赖于构成某个候选关键字的一组主属性A,而且A的任何一个真子集不能被B函数依赖,则称B完全函数依赖于A;反之,若B函数能依赖于A的真子集,则称B部分函数依赖于A。
【非主属性】那么什么是非主属性呢? 这个非常重要哦,是后续BC范式中的一个关键。来看下主属性的定义。
【主属性】在一个关系中,如一个属性是构成某一个候选关键字的属性集中的一个属性,则称它为主属性。
也就是说,主要一个属性是候选键,无论选不选他作为主键,他都依然是主属性。
【理解】总结一下,2范式就是在1范式的基础上再保障非主属性完全依赖于主属性。
第三范式 【定义】
在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。
【理解】三范式就比较好理解,就是除去函数依赖,比如A→B,B→C,那么ABC就不能放在一个关系中,而是要拆分成AB,BC。
BC范式 【定义】 【一范式基础】
对于关系模式R,若 R为第一范式,且每个属性都不部分依赖于候选键也不传递依赖于候选键,那么称R是BC范式 。
【三范式基础】相对于第三范式,BC范式的要求更加严格。第三范式只是要求R为第二范式且非键属性不传递依赖于R的候选键,而BC范式则是对R的每个属性都做要求。
【理解】用大白话来说,在三范式的基础上,BC范式就是要每个属性都不函数依赖于主属性。这就涉及到刚才的定义了。什么叫主属性,也就是能作为候选键的属性,都能被称为主属性。也就是说,一张表里,主属性也不能依赖于主属性,才能被称为BC范式。BC范式既检查非主属性,又检查主属性。当只检查非主属性时,就成了第三范式。满足BC范式的关系都必然满足第三范式。