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