尽管第二范式 (2NF) 关系比 1NF 中的关系具有更少的冗余,但它们仍然可能遭受更新异常的影响。如果我们只更新一个元组而不更新另一个,数据库将处于不一致状态。此更新异常是由传递依赖引起的。我们需要通过进入第三范式 (3NF) 来消除这种依赖关系。
第三范式(3NF):
一个关系是第三范式,如果非素数属性没有传递依赖以及它是第二范式。
如果在每个非平凡函数依赖项 X –> Y 中至少满足以下条件之一,则关系属于 3NF:
- X 是一个超级键。
- Y 是主要属性(Y 的每个元素都是某个候选键的一部分)。
换句话说,
A relation that is in First and Second Normal Form and in which no non-primary-key attribute is transitively dependent on the primary key, then it is in Third Normal Form (3NF).
注 –如果 A->B 和 B->C 是两个 FD,则 A->C 称为传递依赖。
2NF 关系到 3NF 的规范化涉及去除传递依赖。如果存在传递依赖,我们通过将属性与行列式的副本一起放置在新关系中来从关系中删除传递依赖属性。
考虑下面给出的例子。
示例 1:
在表 4 中给出的关于 STUDENT 的关系中,
FD套装:
{STUD_NO -> STUD_NAME、STUD_NO -> STUD_STATE、STUD_STATE -> STUD_COUNTRY、STUD_NO -> STUD_AGE}
候选键:
{STUD_NO}
对于表 4 中的这种关系,STUD_NO -> STUD_STATE 和 STUD_STATE -> STUD_COUNTRY 为真。所以 STUD_COUNTRY 传递依赖于 STUD_NO。它违反了第三范式。为了将其转换为第三范式,我们将关系 STUDENT (STUD_NO, STUD_NAME, STUD_PHONE, STUD_STATE, STUD_COUNTRY_STUD_AGE) 分解为:
STUDENT (STUD_NO, STUD_NAME, STUD_PHONE, STUD_STATE, STUD_AGE)
STATE_COUNTRY (STATE, COUNTRY)
示例 2:
考虑关系 R(A, B, C, D, E)
A -> BC,
CD -> E,
B -> D,
E -> A
上述关系中所有可能的候选键是 {A, E, CD, BC} 所有属性都在右侧所有功能依赖项都是素数。
笔记 –
第三范式 (3NF) 被认为适用于正常的关系数据库设计,因为大多数 3NF 表都没有插入、更新和删除异常。此外,3NF始终确保功能依赖保留和无损。