范式
范式(Normal Format):是设计合理的关系型数据库时,遵从的不同的规范要求,这些不同的规范要求被称为不同的范式;
范式是为了解决数据的存储和优化问题,保存数据的存储之后,凡是能够通过关系寻找出来的数据坚决不再存储,最终目的是减少数据的冗余;
范式是一种分层的结构规范,分为6层,每一次都比上一层更加严格,若要满足下一层的规范,前提必须满足上一层规范;
六层范式,1NF、2NF、3NF、4NF、5NF、6NF,1NF是最底层,要求最低;6NF是最高层,要求最严格;
Mysql是关系型数据库,有空间浪费,也是致力于节省存储空间,与范式所要解决的问题不谋而合,会利用到范式来指导设计;
但是数据库不单是要解决空间问题,还要保证效率问题,范式只为解决空间问题,所以数据库设计时不能完全依照范式的要求实现,所以一般情况只需要满足前三种范式即可;
范式在数据库设计时有指导意义,但不是强制要求;
1NF
1NF要求字段的数据具有原子性;
2NF
在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)(这时的候选码一般为复合键)
解决办法:(1)将复合键拆分到不同的表中;
(2)取消复合键,使用逻辑主键;
3NF
在1NF基础上,任何非主属性不依赖于其他非主属性(在2NF的基础上消除传递依赖)