【DBMS HKUST slides8】范式及分解算法 知识点总结

范式定义:符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度

形象化理解:一张数据表的表结构所符合的某种设计标准的级别

关系与关系模式:

关系“是”关系模式“的一个实例,你可以把”关系”理解为一张带数据的表,而“关系模式”是这张数据表的表结构。

1NF

1NF的定义为:符合1NF的关系中的每个属性都不可再分。

三种关系完整性约束

实体完整性:关系中的码所包含的任意一个属性都不能为空,所有属性的组合也不能重复。

(根据实体完整性的要求,主属性不能为空。)


2NF

2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖

在拆分的过程中,要达到更高一级范式的要求,这个过程叫做”模式分解“。

仍然存在非主属性系主任对于码学号的传递函数依赖。


3NF(第三范式,third normal form)

3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖

定义:考虑具有函数依赖集F的关系模式R,对于F+中所有形如α→β的函数依赖(α⊆R且β⊆R),如果以下至少一项成立:

  • α→β是平凡的函数依赖(i.e. β⊆α);

  • α是模式R的一个超码。

  • β - α中的每个属性A都包含于R的一个候选码中。(候选码:最小的超码)

则关系模式R属于3NF。

如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。

(至少要有三个属性才可能存在传递函数依赖关系)

符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。


BCNF(Boyce-Codd范式,Boyce-Codd Normal Form)

在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

可消除所有基于函数依赖能够发现的冗余。

定义:考虑具有函数依赖集F的关系模式R,对F+中所有形如α→β的函数依赖(α⊆R且β⊆R),如果以下至少一项成立:

  • α→β是平凡的函数依赖(i.e. β⊆α);

  • α是模式R的一个超码。

则关系模式R属于BCNF。


函数依赖(Functional dependencies)

考虑关系模式r(R),属性集α⊆R,属性集β⊆R。

如果对于给定一个r(R)的实例中所有元组对t1和t2总满足“若t1[α]=t2[α],则t1[β]=t2[β]”,则这个实例满足(satisfy)函数依赖α→β。

  • 平凡的函数依赖(Trivial Functional Dependency):如果β⊆α,则形如α→β的函数依赖是平凡的。

  • 非平凡的函数依赖(Non-Trivial Functional Dependency)

如果在r(R)的每个合法实例都满足函数依赖α→β,则该函数依赖在模式r(R)上成立(hold)。

闭包(closure):令F为一个函数依赖集,F的闭包是被F逻辑蕴含的所有函数依赖的集合,称为F+。

Armstrong公理(Armstrong’s axiom):可找出给定F的全部F+

  • 自反律(reflexivity rule:给定属性集α和β,若β⊆α,则α→β成立;

  • 增补律(augmentation rule):给定属性集α、β和γ,若α→β成立,则γα→γβ成立。(γα表示γ∪α)

  • 传递律(transitivity rule):给定属性集α、β和γ,若α→β成立且β→γ成立,则α→γ成立。

三条扩展规则:(简化计算)

  • 合并律(union rule):给定属性集α、β和γ,若α→β成立且α→γ成立,则α→βγ成立。

  • 分解律(composition rule):给定属性集α、β和γ,若α→βγ成立,则α→β成立且α→γ成立。

  • 伪传递律(pseudotransitivity rule):给定属性集α、β、γ和δ,若α→β成立且γβ→δ成立,则αγ→δ成立。

属性集的闭包

α的闭包α+:函数依赖集F下被α函数确定的所有属性的集合

计算属性闭包α+的高效算法:

【DBMS HKUST slides8】范式及分解算法 知识点总结_第1张图片

分解(decomposition)

无损连接分解(lossless-join decomposition)即为无损分解

  • 如果用两个关系模式r1(R)和r2(R)替代r(R)时没有信息损失,则我们称该分解是无损分解(lossless decomposition)

依赖保持(Dependency preservation)

保持依赖的分解(dependency-preserving decomposition)

  • 如果分解是保持依赖的,则给定一个数据库更新,所有的函数依赖都可以由单独的关系进行验证,无须计算分解后的关系的连接。
  • 3NF是保持依赖并且可以满足无损分解的最高范式

BCNF分解算法(BCNF decomposition algorithm)

  1. 首先令reslut = {R}

  2. 接着计算一下F的函数闭包F+(计算函数闭包还是挺麻烦的,所以在下面判断的时候挑一个函数依赖,判断一下是否被F逻辑蕴含即可)

  3. 然后判断结果集result中是否还存在哪个模式不满足BCNF范式,如果都满足,则直接跳到步骤5,如果存在某个模式 Ri ∈ result,不满足BCNF范式,则执行步骤4

  4. 选择一个在Ri上成立的非平凡函数依赖 α→β,并且 α→β 属于 F+,并且α∩β=∅。然后将模式Ri分解成两个模式,分别为 (Ri - β) 和 (α, β)。并且将Ri从result中移除,江新得到的两个模式添加到result中。接着回到步骤3继续判断

  5. 分解完成,输出结果

一定无损,但不一定保持依赖


3NF分解算法(3NF decomposition algorithm)

正则覆盖(Canonical Cover):极小函数依赖集

  • 如果去除函数依赖中的一个属性不改变函数依赖集的闭包,则称该属性是无关的extraneous
  1. 首先求出F的正则覆盖Fc(实际上就是利用Amstrong公式化简原来的函数依赖集的过程)

  2. 接着将Fc中的每一个函数依赖单独分解成一个模式,得到一个模式列表S = {R1, R2, ..., Ri}

  3. 如果上述模式列表S中的任意一个模式包含模式R的候选码,则跳到步骤5,否则执行步骤4

  4. 选取R的任意一个候选码,组成一个新的模式R', 将R'添加到模式列表S中

  5. (可选)如果模式列表中存在冗余(即某个模式被其他模式包含),则可以删除这个模式

  6. 输出S

该分解算法可以保持依赖,并且是无损分解

你可能感兴趣的:(【DBMS HKUST slides8】范式及分解算法 知识点总结)