• 【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下被α函数确定的所有属性的集合

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

    分解(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

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

  • 相关阅读:
    sessionStorage 、localStorage 和 cookie 之间的区别 及共同点:
    [转]css文件和js文件后面带一个问号
    Asp.net中动态设置标题Title,Keyword,Descripton标签的方法
    【11.7校内测试】【倒计时3天】【不想写题解】
    【洛谷】1600:天天爱跑步【LCA】【开桶】【容斥】【推式子】
    【11.6校内测试】【倒计时4天】【找规律?思维】【二分+倍增】
    【洛谷】3960:列队【Splay】
    CF733F Drivers Dissatisfaction【链剖】【最小生成树应用】
    【11.5校内测试】【倒计时5天】【DP】【二分+贪心check】【推式子化简+线段树】
    【11.2晚校内测试】【装桶模拟】【单调栈】
  • 原文地址:https://www.cnblogs.com/Ryan0v0/p/11222160.html
Copyright © 2020-2023  润新知