第一范式 (1NF) 并没有消除冗余,而是消除了重复组。
不是在记录中包含多列相同类型的数据(0NF 或非规范化形式),而是将重复信息删除到单独的关系中,并将它们表示为行。这就是1NF的构成。
第二范式(2NF):
第二范式 (2NF) 基于全功能依赖的概念。第二范式适用于具有复合键的关系,即具有由两个或多个属性组成的主键的关系。具有单属性主键的关系自动至少为 2NF。不在 2NF 中的关系可能会受到更新异常的影响。
要成为第二范式,关系必须是第一范式,并且关系不能包含任何部分依赖。如果一个关系没有部分依赖,即没有非主要属性(不属于任何候选键的一部分的属性)依赖于表的任何候选键的任何适当子集,那么它就属于 2NF。
换句话说,
A relation that is in First Normal Form and every non-primary-key attribute is fully functionally dependent on the primary key, then the relation is in Second Normal Form (2NF).
注 –如果候选键的真子集确定了非主属性,则称为部分依赖。
1NF 关系到 2NF 的规范化涉及去除部分依赖。如果存在部分依赖,我们通过将它们与它们的行列式的副本一起放置在新关系中来从关系中删除部分依赖属性。
考虑下面给出的例子。
示例 1:
考虑下表。
STUD_NO COURSE_NO COURSE_FEE
1 C1 1000
2 C2 1500
1 C4 2000
4 C3 1000
4 C1 1000
2 C5 2000
{请注意,有许多课程的课程费用相同。 }
这里,
COURSE_FEE 不能单独决定 COURSE_NO 或 STUD_NO 的值;
COURSE_FEE 和 STUD_NO 不能决定 COURSE_NO 的值;
COURSE_FEE 和 COURSE_NO 不能决定 STUD_NO 的值;
因此,
COURSE_FEE 将是一个非主要属性,因为它不属于唯一的候选键 {STUD_NO, COURSE_NO} ;
但是,COURSE_NO -> COURSE_FEE,即COURSE_FEE 依赖于COURSE_NO,COURSE_NO 是候选键的适当子集。非主属性 COURSE_FEE 依赖于候选键的一个真子集,这是一个部分依赖,所以这个关系不属于 2NF。
要将上述关系转换为 2NF,
我们需要将表拆分为两个表,例如:
表 1:STUD_NO、COURSE_NO
表 2:COURSE_NO、COURSE_FEE
Table 1 Table 2
STUD_NO COURSE_NO COURSE_NO COURSE_FEE
1 C1 C1 1000
2 C2 C2 1500
1 C4 C3 1000
4 C3 C4 2000
4 C1 C5 2000
2 C5
注 – 2NF 试图减少存储在内存中的冗余数据。例如,如果有 100 名学生参加 C1 课程,我们不需要将所有 100 条记录的费用存储为 1000,而是可以将其存储在第二个表中,因为 C1 的课程费用为 1000。
示例 2:
考虑以下关系 R (A, B, C, D ) 的函数依赖
AB -> C [A and B together determine C]
BC -> D [B and C together determine D]
在上述关系中,AB 是唯一的候选键,不存在部分依赖,即 AB 的任何真子集都不能确定任何非主属性。