• 函数依赖的公理化系统


    阿姆斯特朗公理

    包含规则

    若属性集Y属于X, 则有属性集Y函数依赖于X

    传递规则

    若属性集A,B, C之间存在函数依赖关系A->B, B->C, 则A->C

    增广规则

    若A->B则AC->BC

    合并规则

    若A ->B, A->C 则 A->BC

    分解规则

    若A->BC, 则A->B,A->C

    伪传递规则

    若A->B,XB->C则AX->C

    集合累积规则

    若A->BC, C->X则 A->BCX

    闭包

    函数依赖集的闭包

    对于关系模式上R的函数依赖集F, 若F可以导出X->Y则称F逻辑蕴含X->Y.

    把F中的函数依赖关系, 及被F逻辑蕴含的函数依赖的集合称为F的闭包, 记作(F^{+})

    计算关系R的函数依赖集F的闭包的步骤如下:

    (1) 设最终将成为闭包的函数集为G,把G初始化为F

    (2) 检查G中的每一个函数依赖A->B,尝试应用分解规则和增广规则将新得到的依赖关系添加到G中

    (3) 检查G中所有函数依赖可能的组合, 尝试应用传递规则和合并规则将新得到的依赖关系添加到G中

    (3) 重复(2)直至全部添加

    属性集的闭包

    闭包是由函数依赖集F导出的属性集, 闭包中一个属性A可以依据F导出其它所有属性, 记作((A)^{+}_{F})

    下面给出数学定义:

    设X和Y均为关系R的属性集的子集,F是R上的函数依赖集,若对R的任一属性集B,若X->B,必有B⊆Y,且对R的任一满足以上条件的属性集Y1 ,必有Y⊆Y1,此时称Y为属性集X在函数依赖集F下的闭包,记作(X^{+}_{F})

    如 f={a->b,b->c,a->d,e->f};由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d}

    阿姆斯特朗公理为闭包的完备性和有效性提供了理论支持.

    计算关系R的属性集X的闭包的步骤如下:

    (1) 设最终将成为闭包的属性集是Y,把Y初始化为X

    (2) 检查F中的每一个函数依赖A->B,如果属性集A中所有属性均在Y中,而B中有的属性不在Y中,则将其加入到Y中

    (3) 重复(2)直到全部添加为止

    函数依赖集的覆盖

    设F,G是关系模式R上的两个函数依赖集, 若G属于F的闭包(F^{+}), 则称F覆盖G.

    F与G拥有相同的闭包,这一性质可以用来进行检验.

    最小覆盖(最小函数依赖集)

    关系模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC}

    计算函数依赖集F的最小函数依赖集M步骤如下:

    (1)右部分化为单属性

    {ADG->BC} ==>{ADG->B, ADG->C}
    
    M ={B->D, DG->C, BD->E, AG->B, ADG->B, ADG->C}
    

    (2) 掉左部冗余属性

    对于ADG->B可以看出 ‘ADG’ 去掉 ‘D’ 子属性后 AG->B是仍然成立的, 所以‘D’被认为是冗余属性,如此类推(左边是单个属性不用判断), 得:

    M = {B->D, DG->C, BD->E, AG->B}
    

    (3) 去掉多余函数依赖

    去掉F中某依赖关系(经过前两步,一般只需要判断左边属性为多个的关系),如去掉(DG->C)

    (DG)+ = {D, G}, 缺少C, 不冗余。 所以求得:
    
    M = {B->D, DG->C, BD->E, AG->B}
    

    正则覆盖 canonical cover

    函数集F的正则覆盖集Fc满足条件:

    • F与Fc互相逻辑蕴含

    • Fc中任何函数依赖都不含无无关属性

    • Fc中函数依赖的左半部分都是唯一的

    若去除函数依赖中的属性不会改变函数依赖集F的闭包,就称该属性是该函数依赖的无关属性.

    如AB->C, 若F蕴含(F-{AB->C} cup {B->C})即使用B->C替换AB->C不改变F的闭包.

    若有函数依赖关系AB->C, (A_{F}^{+})包含C, 则A是AB->C的无关属性. 在FC中用B->C替换.

    另一种形如A->BC的情况类似, 若用A->C替换AB->C不改变F的闭包, 则C为无关属性.

    示例:

    在关系模式R<U, F>, U = {A, B, C}, F={A-> BC, B -> C, A -> B, AB -> C}

    求F的正则覆盖方法如下:

    (1) 右部分分解为单属性

    G = {A -> B, A -> C, B -> C, AB -> C}
    

    (2) 去掉左部无关属性

    两边都是单属性的不必考虑, 求左侧多属性中任一属性关于F的闭包.

    对AB -> C,((A)_{F1}^{+} = ABC)即存在A->C,A为无关属性故用B -> C替换之。

    G = {A -> B, A -> C, B -> C}
    

    (3) 去掉多余函数依赖

    去掉可以由F1中其它关系导出的依赖关系.

    对A -> C, 可以由A->B, A->C 导出去掉。

    (4) 合并函数依赖

    将左部相同的函数依赖进行合并, 保证左部唯一

    G = {A -> B, B -> C}
    

    依赖关系的分解

    无损连接分解(lossess join)

    关系模式R,其上的函数依赖集F.

    若将关系R分解为R1, R2, 若R1, R2自然连接可以得到R, 则R1, R2为R的无损连接分解.

    若将关系R分解为R1, R2. 若R1与R2属性的交集是R的Super Key, 则R1, R2为R的无损连接分解.

    保持依赖

    关系模式R分解后的各个Ri上函数依赖集Fi并集的闭包等于原函数依赖集的闭包, 则该分解保持了函数依赖关系.

  • 相关阅读:
    React PC端悬浮锚点吸顶导航
    LESS 移动端一像素1px线条CSS解决方案
    React Swiper轮播图
    Win10 虚拟机安装mac系统
    ReactNative Windows环境初始化项目
    Win10 安装AndroidStudio
    Win10 环境安装JDK
    【mysql基础学习篇】mysql服务器架构简介
    uniapp封装小程序雷达图组件实现
    这12道Spring面试题要是还不会的话?就白干了!
  • 原文地址:https://www.cnblogs.com/Finley/p/5582256.html
Copyright © 2020-2023  润新知