证明范式关系的逻辑推导:从3NF到2NF及BCNF之间的包含性分析
文章目录
证明:若关系模式 R 满足第三范式(3NF),则它也一定满足第二范式(2NF)
定义回顾:
-
第二范式(2NF):
-
关系 R 满足 2NF 的条件是:
- R 满足第一范式(1NF),即每个属性的值都是不可再分的基本单元。
- R 的所有非主属性 完全函数依赖 于任意候选键(即不存在部分依赖)。
-
-
第三范式(3NF):
-
关系 R 满足 3NF 的条件是:
-
R 满足 2NF。
-
R 的所有非主属性对任意候选键都不存在传递函数依赖,或者非主属性是某个候选键的一部分。
-
-
要证结论:
若 R 满足 3NF,则必定满足 2NF。
证明过程:
-
假设 R 满足 3NF,但不满足 2NF:
-
R 满足 3NF,因此:
-
R 中的每个非主属性 A 对任意候选键 K 都满足以下至少一个条件:
-
A 是完全函数依赖于 K;
-
A 是部分函数依赖于 K 且 A 是某个候选键的一部分;
-
A 是传递函数依赖于 K 且 A 是某个候选键的一部分。
-
-
-
假设 R 不满足 2NF,则存在至少一个非主属性 A,它对候选键 K 存在部分函数依赖,即 A⊆K1,其中 K1 是 K 的一个真子集。
-
部分函数依赖的存在违反了 2NF 的定义。
-
-
分析矛盾:
- 根据 3NF 的定义:
- 如果 A 对 K 存在部分函数依赖,但 A 是候选键的一部分,这满足 3NF 的条件,不影响 2NF;
- 如果 A 是传递函数依赖,这种情况必然在候选键的某部分上依赖完全,或属于主属性本身,仍然不会违反 2NF。
- 如果 A 对 K 存在部分函数依赖,而 A 既不是候选键的一部分,也不存在传递依赖,这种情况会违背 3NF 定义,导致假设矛盾。
- 根据 3NF 的定义:
-
结论:
- 假设 R 满足 3NF,但不满足 2NF,会导致逻辑矛盾。
- 因此,R 若满足 3NF,则必定满足 2NF。
补充说明:
从代数角度,3NF 的条件包含了 2NF 的所有要求,并对非主属性的传递依赖提出了更严格的限制,因此 3NF 自然包含了 2NF 的要求。
证明:若关系模式 R 满足BCNF,则它一定满足3NF
定义回顾:
-
第三范式(3NF):
-
关系 R 满足 3NF 的条件是:
-
R 满足 2NF。
-
R的所有非主属性 A对任意候选键 K的依赖满足以下至少一个条件:
-
A 是完全函数依赖于 K。
-
A 是某个候选键的一部分(即 A 是主属性)。
-
-
-
-
Boyce-Codd范式(BCNF):
-
关系 R 满足 BCNF 的条件是:
- 对于 R 中的所有函数依赖 X → A,X 必须是超键。
-
超键是可以唯一标识关系中每一元组的属性集合。
-
要证结论:
若关系模式 R 满足 BCNF,则它也一定满足 3NF。
证明过程:
-
假设 R 满足 BCNF:
-
根据 BCNF 的定义,对于 R 中的任意函数依赖 X→A,都满足 X 是一个超键。
-
超键的定义是一个属性集合,可以唯一标识关系中的每一元组。
-
这意味着 X→A 不可能引起部分依赖或传递依赖:
-
部分依赖:X→A 中 X 是超键,因此 A 不可能仅依赖于 X 的一部分。
-
传递依赖:由于 X 是超键,A 不可能通过其他属性间接依赖于候选键。
-
-
-
验证 3NF 的定义:
- 根据 3NF 的要求,对于任意函数依赖 X→A ,要么 X 是超键,要么 A 是主属性。
- R 满足 BCNF,意味着每个 X→A 中 X 都是超键,因此满足 3NF 的第一个条件(X 是超键)。
-
结论:
- R 满足 BCNF,因此 R 中的任意函数依赖 X→A 都满足 3NF 的要求。
- 换言之,BCNF 是 3NF 的更严格形式,因此 R 满足 BCNF 时必然满足 3NF。
补充说明:
- BCNF vs 3NF:
- BCNF 的约束更强,所有非平凡的函数依赖都要求左部 X 是超键。
- 3NF 允许一些特殊情况(非主属性依赖于非超键),但这些情况不满足 BCNF。
- 因此,BCNF 是 3NF 的真子集。
相关知识点
非主属性
非主属性是数据库中指一个关系模式中不属于任意候选键的属性。简单来说,它不能作为唯一标识关系中元组的属性。
超键(Super Key)
超键是数据库关系模式中一个属性或属性的集合,用来唯一标识关系表中每一行数据。也就是说,在关系 R 中,超键的值可以唯一区分每一元组(记录)。
超键的特性:
- 唯一性:
- 对于关系 R 中任意两条元组 t1 和 t2,如果 t1[X]≠t2[X],则 X 是超键。
- 即,超键的值在整个关系中是唯一的。
- 冗余性:
- 超键可以包含多余的属性。如果从超键中去掉某些属性后,仍然能唯一标识元组,则这个超键包含了冗余。
- 例如,如果 {A,B,C} 是超键,而 {A,B} 也是超键,那么 {A,B,C} 包含冗余。
候选键(Candidate Key)
候选键是超键的一个子集,它满足以下条件:
- 唯一性: 候选键可以唯一标识关系中的每一元组。
- 最小性: 候选键不能再去掉任何属性,否则将失去唯一标识的能力。
候选键的特性:
- 一个关系模式可以有多个候选键。
- 候选键是超键的最简形式(无冗余),也是构造主键的候选项。
主键(Primary Key)
主键是从候选键中选定的,用于唯一标识关系中每一元组的键。主键具有以下特性:
- 主键的值必须唯一。
- 主键的值不能为 NULL(空值)。
- 在一个关系中,主键只能有一个,但候选键可以有多个。
主键的作用:
- 确保关系表中的每一行数据的唯一性。
- 通常用于与外键建立参照完整性约束。
候选键与主键的关系:
- 候选键是潜在的主键,数据库设计者从候选键中选择一个作为主键。
- 其余未选为主键的候选键可被称为备用键(Alternate Key)。
区别总结
类别 | 定义 | 是否包含冗余 | 数量限制 |
---|---|---|---|
超键 | 唯一标识关系中每一元组的属性或属性集 | 可能包含冗余 | 可以有多个 |
候选键 | 满足唯一性和最小性的超键 | 无冗余 | 可以有多个 |
主键 | 从候选键中选出的用于唯一标识元组的键 | 无冗余 | 只能有一个 |
外键(Foreign Key)
外键是一个属性或属性集合,用于建立两个表之间的关联。它的值必须匹配另一个表中的主键或候选键的值,确保参照完整性。
外键的作用:
- 确保表之间的数据一致性。
- 实现关系数据库的约束机制,避免孤立数据或破坏数据完整性。