数据库的三大范式是关系数据库设计中用于规范化数据结构的三种主要规则,它们分别是:
-
第一范式 (1NF):原子性
- 每个字段中的值必须是原子值(不可再分的基本数据项),即每个字段只能存储单一的、不可分割的值。
- 例如,不能将多个电话号码存储在一个字段中,而是应该将它们拆分为多个记录或字段。
举例:
错误的表结构(违反1NF):ID Name Phone Numbers 1 Alice 12345, 67890 正确的表结构(符合1NF):
ID Name Phone Number 1 Alice 12345 1 Alice 67890 -
第二范式 (2NF):消除部分依赖
- 1NF的基础上,要求每个非主键字段必须完全依赖于主键,而不是只依赖于主键的一部分。
- 如果一个表的主键是复合键(由多个字段组成),那么表中的每个非主键字段必须依赖于整个主键,而不是依赖于主键的一部分。
举例:
错误的表结构(违反2NF):StudentID CourseID Instructor Grade 1 CS101 Dr. Smith A 1 CS102 Dr. Brown B 在这个表中,
Instructor
依赖于CourseID
,而不是StudentID
和CourseID
的组合主键,因此违反了2NF。正确的表结构(符合2NF):
-
表1:学生课程成绩
StudentID CourseID Grade 1 CS101 A 1 CS102 B -
表2:课程信息
CourseID Instructor CS101 Dr. Smith CS102 Dr. Brown
-
第三范式 (3NF):消除传递依赖
- 在2NF的基础上,要求每个非主键字段必须直接依赖于主键,而不能依赖于其他非主键字段。
- 如果一个非主键字段依赖于另一个非主键字段,那么就存在传递依赖,需要将这些字段分到新的表中。
举例:
错误的表结构(违反3NF):StudentID Name Advisor AdvisorPhone 1 Alice Dr. Lee 123456789 2 Bob Dr. Kim 987654321 在这个表中,
AdvisorPhone
依赖于Advisor
,而Advisor
依赖于主键StudentID
。因此,AdvisorPhone
间接依赖于主键,这种依赖关系是传递依赖,违反了3NF。正确的表结构(符合3NF):
-
表1:学生信息
StudentID Name AdvisorID 1 Alice 1 2 Bob 2 -
表2:导师信息
AdvisorID Advisor AdvisorPhone 1 Dr. Lee 123456789 2 Dr. Kim 987654321
总结
- 第一范式 (1NF):确保数据原子化,每个字段只能存储单一值。
- 第二范式 (2NF):在1NF的基础上,消除部分依赖,确保非主键字段完全依赖于主键。
- 第三范式 (3NF):在2NF的基础上,消除传递依赖,确保非主键字段直接依赖于主键。