第一范式:
只要满足所有字段不可再分,即不存在 “一个字段中有不同的数据类型” 这种情况,例如手机号这个字段不能既有手机号又有姓名年龄这些。
第二范式:
在第一范式的前提下,每个非主属性都完全函数依赖于主键。
首先什么是主属性和非主属性?
主属性就是候选键中的每一个属性,候选键可能是多个属性。不包含在候选键的属性叫非主属性。
候选键可以有多组,例如候选键为AB或者AC或者AD,属性ABCD都包含在候选键中,那么ABCD都是主属性。
什么是完全函数依赖和部分函数依赖?
举个例子,X–>Y , X’ 是X的真子集,若满足X’–>Y,那么Y 部分函数依赖于X,这就是部分函数依赖
X–>Y , X’ 是X的真子集,若对所有的X’!–>Y , 那么Y完全函数依赖于X,这就是完全函数依赖。
例如:–>,身份证–>姓名,姓名部分函数依赖于(学号和身份证)
–>,身高不能决定肥胖指数,体重也不能决定肥胖指数,只有才能决定,所以,肥胖指数完全函数依赖于(身高和体重)
,是要有主键就是第二范式!,必须满足每个非主属性都完全函数依赖于主键,也就说主键的真子集都不能决定非主属性!只有主键才能决定所有非主属性。
第三范式:
在第二范式的基础上,如果每个非主属性都不传递函数依赖于主键,就是第三范式。
举个例子,非主属性C依赖于非主属性B,非主属性B有依赖于主键A,在第二范式的情况下,如果不存在这种情况,就是第三范式!如果一个属性集所有属性都是主属性,那么一定是第三范式了。
BC范式:
满足BC范式的关系将消除任何属性(主属性和非主属性)对关系键的部分函数依赖和传递函数依赖。
在第三范式下,举个例子
如果不存在 –>C , B–>C 类似这样的情况,也就是说部分函数依赖。 A–>B , B–>C 这种情况,也就是传递函数依赖,不管这些ABC属性是主属性还是非主属性,反正就是不存在 “部分函数依赖和传递函数依赖” ,这就是