第一范式(1NF)
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。
类似 字段名称为 className_studentName = ‘软工205_张三’ 这个就可分为className和studentName 所以就不满足第一范式
每个字段分的最细的类型,不能再往下分的那种。
第二范式(2NF)
第二范式是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式1NF。
2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。
函数依赖
我们可以这么理解(但并不是特别严格的定义):若在一张表中,在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作 X → Y。
通过前面的X,可以找到后面唯一的一个Y。
第三范式(3NF)
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
即不能有传递依赖
三范式就是要消除传递依赖,方便理解,可以看做是“消除冗余”。
BCNF范式
反范式化
反范式化是针对范式化而言的,为了性能和读取效率的考虑而适当的对第三范式的要求进行违反,而允许存在少量的数据冗余。
反范式化就是使用空间来换取时间。
总结:
1NF: 字段是最小的的单元不可再分
2NF:满足1NF,表中的字段必须完全依赖于全部主键而非部分主键 (一般我们都会做到)
3NF:满足2NF,非主键外的所有字段必须互不依赖
4NF:满足3NF,消除表中的多值依赖