1NF:强调的是列的原子性,即一个列不能再分成其它几列。
2NF:首先强调必须满足1NF,其次满足:一是表必须包含主键;而是非主键的列不能部分依赖主键,必须完全依赖。
3NF:首先遵循前面两个范式,同时任何非主属性不依赖其它非主属性(即非主属性之间不能相互依赖)。
范式化设计的优点:
避免数据库冗余(在范式化设计中一个数据只出现一次,相反在反范式设计中数据可能会被冗余存储在不同的表中)
减少数据库的空间且范式级别越高数据冗余越少。
注:所谓的减少数据冗余是指通过新建一张表来代替原来那些数据重复出现的冗余字段。
缺点:
等级越高设计出的表就越多,这样查询时就可能出现多表联合查询使得查询性能降低。
反范式化:
就是不满足范式化的模型,可以有适当的数据冗余,减少联合查询,实际就是使用空间来换取时间。
缺点:
除了数据冗余外,还有插入删除问题,即如果要修改某个冗余字段同步修改其它表相同的冗余字段,这个操作比较麻烦(其实就是更新操作代价大,需要更新多个表中的冗余信息)。