关系型数据库设计规范中的第二范式(2NF, Second Normal Form)是在第一范式(1NF)的基础上进一步对数据库表的设计进行规范化,以减少数据冗余和确保数据完整性。
在理解2NF之前,我们先回顾一下第一范式(1NF):
第一范式(1NF):数据库表的每一列都是不可分割的原子项。
接下来,我们来看第二范式(2NF)的定义:
第二范式(2NF):一个关系满足1NF,并且非主键列完全依赖于整个主键(而不是主键的一部分)。
为了更好地理解2NF,我们来看一个例子:
假设我们有一个学生课程
表,其中包含了学号
、课程号
、课程名
和成绩
四个字段。在这个表中,学号
和课程号
组合起来作为主键。
学号
:唯一标识一个学生。课程号
:唯一标识一门课程。课程名
:描述课程的名称。成绩
:学生在该课程上的成绩。
这个表违反了2NF,因为课程名
这一列并不直接依赖于主键的全部(即学号
和课程号
),而只是依赖于课程号
。这导致了一个潜在的问题:如果我们有多条记录对应于同一个课程号
但不同的学号
,那么课程名
会在表中被重复多次,造成数据冗余。
为了符合2NF,我们可以将课程名
字段移到一个新的表课程
中,其中只包含课程号
和课程名
两个字段。然后,在学生课程
表中,我们只需要保留学号
、课程号
和成绩
三个字段,并通过课程号
与课程
表进行关联。
通过这样的设计,我们可以确保每个非主键列都完全依赖于主键,从而减少了数据冗余并提高了数据的完整性。