第一范式(1NF)
第一范式要求数据库表中的每个字段都是不可分割的原子值,即每一列都是不可再分的最小数据单元。例如,一个包含“地址”字段的表,如果地址可以拆分为“省”、“市”、“街道”等子字段,则不符合1NF。解决方法是将“地址”拆分为多个独立的字段。
第二范式(2NF)
第二范式在满足1NF的基础上,要求非主键字段必须完全依赖于主键,而不是部分依赖。适用于主键由多个字段组成的情况。例如,订单明细表中,若主键是“订单ID”和“产品ID”,但“产品名称”仅依赖于“产品ID”,则不符合2NF。解决方法是拆分表,将部分依赖的字段移到新表中。
第三范式(3NF)
第三范式在满足2NF的基础上,要求非主键字段之间不能存在传递依赖,即非主键字段必须直接依赖于主键。例如,学生表中包含“学号”(主键)、“学院”、“学院电话”,若“学院电话”依赖于“学院”而非直接依赖“学号”,则不符合3NF。解决方法是拆分表,消除传递依赖。
注意事项
- 范式设计的目的是减少数据冗余和操作异常,但过度范式化可能导致查询性能下降。实际应用中需根据业务场景权衡范式化与反范式化。
- 更高阶的范式(如BCNF、4NF等)通常用于解决更复杂的数据依赖问题,但三大范式已覆盖多数常见场景。