作者|雷哥来源|Java面试真题解析(ID:aimianshi666)转载请联系授权(微信ID:GG_Stone)1.第一范式第一范式规定表中每一列都是不可分割的最小单元。例如下表中的address字段不是不可分割的最小单元,如下图:其中address也可以拆分为国家和城市,如下图:经过这样的转换,上表满足第一范式。二、第二范式第二范式是在满足第一范式的基础上,规定表中的非主键列不对主键有部分依赖,也就是说每张表只描述一件事。比如下面的订单表是不满足第二范式的,可以拆分成两个独立的表:订单表和产品表。1、不满足第二范式的订单表PS:上面的表可以拆分成两个独立的表:订单表和商品表。2.满足第二范式的表ordertable:commoditytable:3.第三范式第三范式是在满足第一范式和第二范式的基础上,规定表中的列没有对非主键列的传递依赖。比如下面的订单表中的客户名就不符合第三范式,因为它对非主键客户号有依赖,如下图:修改后的表结构(符合thirdnormalform)如下:总结第一范式规定表格中的每一列应该是不可分割的最小单位。第二范式是在满足第一范式的基础上,规定表中的非主键列不对主键有部分依赖。第三范式在满足第一范式和第二范式的基础上,规定表中的列对非主键列不具有传递依赖。使用数据库三种范式的好处是:表的结构更简单优雅,表的逻辑性和组织性更强,使用三种范式可以大大减少表中的冗余数据,这节省了数据库资源的存储。
