数据库的三大范式是什么?

Sherwin.Wei Lv7

数据库的三大范式是什么?

回答重点

第一范式(1NF)

  • 确保每个列的值都是原子值,表中的每个字段只能包含单一的数据项,不允许重复的列和多值字段

第二范式(2NF)

  • 在满足第一范式的基础上,确保表中的每个非主键字段完全依赖于主键,而不是部分依赖。即,非主键字段必须依赖于整个主键

第三范式(3NF)

  • 在满足第二范式的基础上,确保非主键字段之间不依赖,即消除传递依赖。所有非主键字段只能依赖于主键,不应相互依赖。

扩展知识

三大范式进一步理解

数据库的三大范式是数据库设计中常用的规范,它们的目的是减少数据冗余,提高数据的完整性和一致性,使得表的设计更清晰。

第一范式(1NF):规范化

目的:确保数据表的每一列都是单一值,消除重复的列,从而保证数据的原子性。

例如地址作为一个字段,实际上可以拆分成省、市、区等,所以这就不符合第一范式。

第二范式(2NF):消除部分依赖

目的:消除非主键字段对主键部分依赖,从而避免数据冗余和更新异常。

例如 【员工ID、员工姓名、部门ID、部门名】 为一张表,员工 ID 为主键。此时,员工姓名依赖员工ID,部门名依赖部门ID,这就违反了第二范式。

符合范式的设计是:员工表【员工ID、员工姓名、部门ID】,部门表【部门ID、部门名】。

第三范式(3NF):消除传递依赖

目的:消除非主键字段对主键的传递依赖,从而进一步减少数据冗余和更新异常。

例如 【员工ID、员工姓名、部门ID、部门名、经理ID】 为一张表,员工 ID 为主键。此时,经理 ID 依赖部门 ID,部门 ID 依赖员工ID,这说明有依赖传递,违反了第三范式。

符合范式的设计是:员工表【员工ID、员工姓名、部门ID】,部门表【部门ID、部门名、经理ID】。

小结

  • 第一范式(1NF):确保每一列都是原子值,即是不可分割的基础数据项。
  • 第二范式(2NF):在满足1NF的基础上,消除非主键字段对主键部分依赖。
  • 第三范式(3NF):在满足2NF的基础上,消除非主键字段对主键的传递依赖。

不过现在业务上的表设计基本都是反范式的。当然不是说完全不遵守范式,而是适当的进行调整。

比如业务上经常需要冗余字段,减少联表查询,提升性能,特别是业务量比较大的公司,这种冗余是很有必要的!

Comments