知识卡片

范式体系1NF-BCNF的层层递进标准及各自消除的冗余类型

结构图卡

内容

从1NF到BCNF,每一级范式都是在上一级的基础上,专门针对[[函数依赖的 三种子类型:部分/完全/传递函数依赖]]里的某一种依赖类型施加更严格的 禁止条件,层层收紧,包含关系是BCNF⊂3NF⊂2NF⊂1NF(越往右范围越大、 约束越松)。1NF是关系模型的地基:每个属性的取值必须是原子的,不能 再拆分——不满足这一条根本不算关系模型,讨论不到规范化。2NF在1NF 基础上要求每个非主属性都完全函数依赖于候选码,即消灭部分函数依赖—— 只要存在非主属性依赖候选码的某个真子集,就说明这部分数据该跟着那个 子集独立成表。3NF在2NF基础上进一步要求每个非主属性都不传递依赖于 候选码——只消灭了部分依赖还不够,非主属性之间互相决定(如学院决定 电话)依然会造成冗余,3NF把这种”绕一手”的依赖也切断。BCNF比3NF 更严格的地方在于:3NF只约束非主属性,对主属性之间的依赖关系不管, BCNF要求关系上成立的每一个函数依赖,其决定因素都必须是超码——不再 区分主属性还是非主属性,只要有一个函数依赖的决定因素不是超码,就 不满足BCNF,即使这个函数依赖的被决定因素是主属性也不行。四级范式 对应的正是”消除部分依赖”和”消除传递依赖”这两类手术分别在非主属性 和全体属性两个范围上逐步深入实施的过程。

结构图

flowchart TD
    A["1NF: 所有属性原子不可分<br/>关系模型的基本前提"] --> B["2NF: 每个非主属性<br/>完全函数依赖候选码<br/>消除部分函数依赖"]
    B --> C["3NF: 每个非主属性<br/>不传递依赖候选码<br/>消除非主属性间的传递依赖"]
    C --> D["BCNF: 每个函数依赖的<br/>决定因素都是超码<br/>约束扩展到主属性"]

参考来源

- 位置:《数据库原理(微课版)》第7章《关系数据库规范化理论》7.2.2节 "范式"(源文件:_epub-src/index_split_004.html) - 结论依据:原文明确"若其每个非主属性都完全函数依赖于一个候选码, 则R∈2NF……若R的每个非主属性都不传递依赖于任何一个候选码,则 R∈3NF……对任意在关系模式R上成立的函数依赖α→β,要么β⊆α,要么 α→R,则R∈BCNF""BCNF的约束条件没有区分主属性和非主属性,对主 属性也有约束能力",并给出BCNF⊂3NF⊂2NF⊂1NF的包含关系,因此可以 推出四级范式层层递进、各自消除不同冗余类型的结论。 - 原始内容:若R的每个非主属性都不传递依赖于任何一个候选码……BCNF的 约束条件没有区分主属性和非主属性,对主属性也有约束能力……存在一些 关系模式属于3NF、不属于BCNF。