zoukankan      html  css  js  c++  java
  • 数据库系统原理

    在关系模式R(U)中,对于U的子集X和Y,
    如果X→Y,但Y 不包含于 X,则称X→Y是非平凡的函数依赖
    若X→Y,但Y 包含于 X, 则称X→Y是平凡的函数依赖
    例:在关系SC(Sno, Cno, Grade)中,
    非平凡函数依赖: (Sno, Cno) → Grade
    平凡函数依赖: (Sno, Cno) → Sno
    (Sno, Cno) → Cno
    (通常,我们总是讨论非平凡的函数依赖)

    在R(U)中,如果X→Y,并且对于X的任何
    一个真子集X’,都有X’ -\->Y, 则称Y对X完全函数依
    赖,记作X -F-> Y。
    若X→Y,但Y不完全函数依赖于X,则称Y对X部分
    函数依赖,记作X -P-> Y。
    例:
    依赖关系{(Sno,Cno)→Grade,(Sno,Cno)→Sdept,Sno →Sdept}
    则:
    ①(Sno,Cno)-F->Grade完全函数依赖,
    ②∵(Sno,Cno)→Sdept,Sno →Sdept且Sno真包含于(Sno,Cno)
    ∴(Sno,Cno)-P->Sdept部分函数依赖

    在R(U)中,如果X→Y,(Y 不包含于X) ,Y-\->X
    Y→Z, 则称Z对X传递函数依赖。
    记为:X-传递-> Z
    注: 如果Y→X, 即X←→Y,则Z直接依赖于X。
    例:
    Sno → Sdept,Sdept → Mname( Sdept-\->Sno)
    Sno-传递->Mname

    设K为R(U,F)中的属性或属性组合。若K -F->U, 则K称为R的侯选码
    若候选码多于一个,则选定其中的一个作为主码


    包含在任何一个候选码中的属性,称为主属性

    不包含在任何码中的属性称为非主属性或非码属性

    整个属性组是码,称为全码
    如果一个关系模式R的所有属性都是不可分的基本数据项,
    则R∈1NF


    若R∈1NF,且每一个非主属性完全函数依赖于候选码,
    则R∈2NF。


    若R ∈2NF,且它的任何一个非主属性都不传递地依赖于任何候选码,
    则R∈3NF


    关系模式R(U,F)∈1NF,若X→Y且Y包含于X时,X必含有码,
    则R(U,F) ∈BCNF
    等价于:每一个决定因素都包含候选码


    例:
    在关系模式SJP(S,J,P)中,S表示学生,J表示课程, P表示名次。
    n F:{(S,J)→P,(J,P)→S}
    候选码: (S,J), (J,P);
    S,J,P都是主属性
    没有非主属性部分依赖或传递依赖于候选码
    ∴ STJ∈3NF
    ∵对F中任意一个X→Y,X都是候选码,
    ∴ STJ∈BCNF


    若X→→Y,而Z为非空集,则称X→→Y为
    【非 平凡】的多值依赖。


    若X→→Y,而Z为空集(即U=X+Y),则称X→→Y
    为平凡的多值依赖。


    关系模式R(U,F)∈1NF,如果对于R的每个【非平凡】多值依赖X→→Y(Y不包含于X),
    X都含有码,则R∈4NF。
    例: Teaching(C,T,B)不属于4NF
    存在非平凡的多值依赖C→→T, C→→B
    且C不是码
    用投影分解法把Teaching分解为如下两个关系模式:
    CT(C, T) ∈ 4NF
    CB(C, B) ∈ 4NF

    R(A,B,C,D),F{B→D,AB→C}
    候选码AB,非主属性C,D
    ∵存在非主属性对候选码的部分依赖
    ∴ R∈1NF


    关系模式R(S#, SD, SL)
    函数依赖:{S#→SD,SD→SL}
    候选码:S#,非主属性SD,SL
    ∵ SL传递函数依赖于S#,
    ∵ 不存在SL中存在非主属性对码的部分函数依赖。
    ∴R∈2NF


    R(A,B,C,D),F{B→D,D→B ,AB→C}
    候选码:AB,AD ,非主属性C
    ∵ B→D,B不是候选码
    ∴不属于BCNF
    ∵不存在非主属性对候选码的部分或传递依赖
    ∴ R∈3NF


    R(A,B,C),F{A→B,B→A ,A→C}
    候选码: A,B 非主属性C
    ∵ 对任意一个X→Y,X都是候选码
    ∴ R∈BCNF

    对于一个R(U,F),由F逻辑蕴涵的所有
    函数依赖称为F的闭包,记作F+


    对于R<U,F>,其中:U={X,Y, Z}, F={X→Y, Y→Z}}
    若F+={
    X→φ, Y→φ, Z→φ, XY→φ, XZ→φ, YZ→φ, XYZ→φ,
    X→X, Y→Y, Z→Z, XY→X, XZ→X, YZ→Y, XYZ→X,
    X→Y, Y →Z, XY→Y, XZ→Y, YZ→Z, XYZ→Y,
    X→Z, Y→YZ, XY→Z, XZ→Z, YZ→YZ, XYZ→Z,
    X→XY, XY→XY, XZ→XY, XYZ→XY,
    X→XZ, XY→YZ, XZ→XZ, XYZ→YZ,
    X→YZ, XY→XZ, XZ→XY, XYZ→XZ,
    X→XYZ, XY→XYZ,XZ→XYZ, XYZ→XYZ
    },

    例:
    设有关系模式R ( A , B , C , D ) ,
    F={B→A,D→C},则F+中左部为(BC)的函
    数依赖有8个
    BC+={B,C,A} 2^3=8

    关系模式R(U,F),U={A,B,C},F={A→B,B→C}
    如果X={A},则属性集闭包:
    X +F={A,B,C}
    如果X={B},则属性集闭包
    X +F={B,C}
    如果X={C},则属性集闭包
    X +F={C}


    设有关系模式R(A,B,C,D),其上的函数依赖集:
    F={A→C,C→A,B→AC,D→AC},试计算: (AD)+
    令X={AD},
    X(0)={AD},
    X(1)={ACD},
    X(2)={ACD}= X(1) ,
    故(AD)+={ACD}

    求Fm ={B→G, CE→B, C→A, CE→G, B→D,C→D}的候选键。
    1、只在左端出现的属性:CE,(M=CE)
    2、只在右端出现的属性:ADG,(N=ADG)
    3、余下的属性:B,(W=B)
    4、R的候选键只可能是CE或CEB
    5、计算CE+F=U,CE是候选键

    1.设有关系模式R(U,F),U={A,B,C,D,E},
    F={AB→E,DE→B,B→C,C→E,E→A}
    1).计算F中所有函数依赖左部属性集的闭包;
    1)、(AB)+={A,B,C,E}; (DE)+={A,B,C,D,E}
    B+={A,B,C,E};C+={A,C,E};E+={A,E}
    2).确定关系模式R上的所有侯选码
    2)、关系模式R上的所有侯选码;DE,DB,DC

    设F和G是两个函数依赖集:
    ①如果F 包含于G +,则称G是F的一个
    覆盖,或称G覆盖F;
    ②如果 F 包含于 G + 和 G 包含于 F + 同时成立,即F +=G +,
    则称F和G等价。


    设G和F是两个函数依赖集,F与G等价的充要条件是
    F包含于G+ 且 G包含于F+


    将较【低】等级的关系模式 分解为 若干个较【高】等级的关系模式过程称为 模式分解。


    模式分解的方法并不是唯一的。


    关系模式分解的目标: 【无损连接性】 和 【 函数依赖保持性】


    所谓分解的【无损连接性】:若将R(U,F)分解为K个子模式:ρ={R1(U1,F1),R2(U2,F2),…,Rk(Uk,Fk)},
    这K个子模式进行连接运算后,还可恢复为模式R。即:对R中满足F的每一个关系r,都有
    r=πR1(r) πR2(r) … πRk(r)


    所谓分解的【函数依赖保持性】:若将R(U,F)分解为
    K个子模式:ρ={R1(U1,F1),R2(U2,F2),…,Rk(Uk,Fk)},
    则Fi(0<=i<=K)并集与F等价。


    只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义。

    例:
    关系R(U,F),U={S#,SD,MN},F={S#→SD,SD→MN}


    1、对R进行分解:ρ1={R1(S#),R2(SD),R3(MN)}
    存在问题:
    A、原先的【函数依赖关系不存在】。
    B、R1XR2XR3笛卡尔积,元组增加,【不具无损连接】。


    2、对R进行另一分解:ρ2={R1(S#,SD),R2(S#,MN)
    ρ2对R的分解是可恢复的,【具有无损连接性】
    存在问题:SD→MN依赖关系丢失,【不具函数依赖保持性】


    3、对R的分解:ρ3={R1(S#,SD),R2(SD,MN)}
    既【具无损连接】,又【保持函数依赖】,同时解决插入、删除、更新异常


    R(U,F),U={A,B,C,D,E},F={AB→C,C→D,D→E},
    R的一个分解为
    R1(A,B,C), R2(C,D), R3(D,E)。
    ------A--- B---- C---- D ---E
    R1 -a1- a2 ---a3 ---b14- b15
    R2 b21 -b22--a3 ---a4-- b25
    R3 b31 -b32 -b33 --a4 --a5
    由C→D 【注释:找到 在C列中有相同符号 的行 有R1,R2;
    然后在R1,R2中看是否存在一个在D列有a4,有则R1,R2行的D列全部改为a4,否则改为b14】
    ------A--- B---- C---- D ---E
    R1--a1- a2 ---a3 --a4--- b15
    R2 b21 -b22 -a3-- a4--- b25
    R3 b31- b32- b33- a4 ---a5
    由D→E【注释:找到 在D列中有相同符号 的行 有R1,R2,R3;
    然后在R1,R2,R3中看是否存在一个在E列有a5,有则R1,R2,R3行的D列全部改为a5,否则改为b15】
    ------A--- B---- C---- D ---E
    R1 a1 --a2--- a3--- a4 --a5
    R2 b21- b22- a3--- a4 --a5
    R3 b31 -b32 -b33- -a4-- a5
    如果某次更改后,有一行成为a1,a2,……,an。则ρ具
    有无损连接性,否则ρ不具有无损连接性。

    设有关系模式R(A, B, C, D, E), 并有函数依赖
    {AB→D, AC→E, BC→D,D→A,E→B},现将R分解成关
    系模式S(A, B, C)和其他一些关系模式,请给出在关
    系模式S上成立的函数依赖。
    ∵ AB→D,D→A Þ AB→ A(平凡的函数依赖,删)
    ∵ AC→E, E→B Þ AC→ B
    ∵ BC→D, D→A Þ BC→ A}
    ∴ FS={AC→ B, BC→ A}


    设有关系模式R(ABC),ρ={AB,AC}是R的一个分解
    。试分析分别在F1={A→B},F2={A→C,B→C},F3={B→A}
    ,F4={C→B,B→A}情况下,ρ是否具有无损分解和保持
    FD的分解特性。
    F1:是无损分解且保持FD集的分解。
    F2:是无损分解,但不保持FD集的分解。B→C丢失。
    F3:是有损分解,但保持FD集的分解。
    F4:是有损分解且不保持FD集的分解。C→B丢失

    规范化理论提供了一套模式分解算法,按这些算法可以做到:
    ⒈ 若要求分解具有【无损连接性】,模式分解【一定】可以达到【4NF】(在函数依赖范畴,一定可达到BCNF)。
    ⒉若要求分解【保持函数依赖】,模式分解【一定】可以达到【3NF】,但不一定能够达到BCNF。
    ⒊若要求分解既要【保持函数依赖】,又具有无损连接性,模式分解【一定】可以达到【3NF】,但不一定能够达到BCNF。


    一.分解成【3NF】,并【保持函数依赖】的分解算法:
    1)对R(U,F)中的F进行极小化处理。
    2)找出不在F中出现的属性,形成一个关系模式。
    3)对F按具有相同左部的原则分组Fk,Fk所涉及的属性集Uk,
    若 Ui包含于Uj 且 i≠j ,
    则去掉Ui,合并Fi, Fj ,对每个Ui形成子模式Ri。


    例:
    例2:关系模式R(U,F),其中F={BE→G,BD→G,CDE→AB,CD→A,CE→G,BC→A,B→D,C→D},将R分解到3NF并具有函数依赖保持性。
    1)对R(U,F)中的F进行极小化处理。Fm={B→G,CE→B,C→A,B→D,C→D}
    候选键是CE。
    2)找出不在Fm中出现的属性,形成一个关系模式。
    3)对Fm按具有相同左部的原则分组Fk,Fk所涉及的属性集Uk,
    分解成三个模式,Ri∈3NF且具有函数依赖保持性。
    R1:U1=BDG,F1={B→G,B→D}
    R2:U2=ACD,F2={C→A,C→D}
    R3:U3=BCE,F3={CE→B}


    二.分解成【3NF】,既有【无损连接性】又【保持函数依赖性】算法
    (1)调用算法一产生R的分解ρ={R1…Rn}
    (2)构造分解τ={ R1,…,Rn ,RK},其中RK是由R的一个候选键K构成的关系


    关系模式R(U,F),其中F={BE→G,BD→G,CDE→AB,CD→A,CE→G,BC→A,B→D,C→D},将R分解到3NF并既具有无损连接性又保持函数依赖性。
    1)Fm={B→G,CE→B,C→A,B→D,C→D},候选键是CE,
    【注释算法一得到的
    R1:U1=BDG,F1={B→G,B→D}
    R2:U2=ACD,F2={C→A,C→D}
    R3:U3=BCE,F3={CE→B}】
    2)【注释:构造分解τ={ R1,…,Rn ,RK},其中RK是由R的一个候选键K构成的关系】
    R1:U1=BDG,F1={B→G,B→D}
    R2:U2=ACD,F2={C→A,C→D}
    R3:U3=BCE,F3={CE→B}
    R4:U4=CE,因R4的属性包含在R3中,可删去。
    Ri={ R1,R2,R3 }∈3NF,且分解既有无损连
    接性又保持函数依赖性。


    三、具有无损连接性的BCNF分解算法
    输入:关系模式R(U,F)
    算法:ρ={R1…Rn}
    循环:
    若.( ρ中存在非BCNF的关系模式 )
    {
    选一个非BCNF模式Rj∈ρ;
    选Rj的一个违反BCNF要求的函数依赖X→Y【注释:X 不包含 码/候选码/主键】
    把Rj分解得ρ2={Rt,Rm}, Ut=XY;Um= Uj-{Y}
    并用ρ2={Rt,Rm}代替ρ中的Rj;
    }
    停.(ρ中不存在非BCNF的关系模式)


    例:STJ(学生S,教师T,课程J)每门课程可有多位教师上课、每位教师只上一门课。
    F:{(S,J)→T,(S,T)→J,T→J}
    候选键:(S,J)、(S,T),
    ∵STJ ∈3NF,不属于BCNF
    对不满足BCNF的依赖关系:T→J【注释:T 不包含 码/候选码,*注意区分T 包含于 码/候选码】
    分解得
    { TJ(T,J), ST(S,T)} ∈BCNF
    该分解且具有【无损连接性】。
    【不保持函数依赖关系】丢失:(S,J)→T,(S,T)→J


    例:
    R(I,J,K,L,M,N)
    F={K→M,J→N,JK→L,N→I}
    分解R 使属于BCNF且具有无损连接性。
    ∵JK+=JKLMNI(J+=JNI,K+=KM)
    ∴JK是R的主键
    分解算法
    ---1、取N→I,N不是主键/候选码
    S1={N,I}∈BCNF , F1={N→I}
    S2={JKLMN},F2={K→M,J→N,JK→L}
    S2中JK+=JKLMN ∴JK是 主键/候选码
    ---2、取K→M ,K不是 主键/候选码
    S21={K,M}∈BCNF, F21={K→M}
    S22={JKLN},F22={J→N,JK→L},JK是 主键/候选码
    ---3、取J→N,J不是 主键/候选码
    S221={J,N} ∈BCNF ,F221={J→N}
    S222={J,K,L} ∈BCNF ,F222={JK→L}JK是 主键/候选码
    ∴对R的分解ρ={S1、S21、S221、S222}∈BCNF
    具有【无损连接性】,且【保持函数依赖】。


    四.具有【无损连接性】的4NF分解算法
    分解算法:ρ={R1…Rn}
    循环:
    若.(ρ中存在非4NF关系)
    {
    选择一个非4NF模式S∈ρ
    选择Rj的一个违反4NF要求的多值依赖X→→Y
    把Rj分解得ρ2={Rt,Rm}, Ut=XY;Um= Uj-{Y}
    并用ρ2={Rt,Rm}代替ρ中的Rj;
    }
    停.(ρ中不存在非4NF关系)


    例:
    R(U)=R(A,B,C),D={A→→B,A→→C}
    指出R不属于4NF,分解R使属4NF,具有无损连接性
    ⑴ R(A,B,C)不属于4NF
    存在非平凡的多值依赖A→→B,A→→C
    且A不是码
    ⑵对A→→B
    R1(A,B)
    R2 (A,C)=U-B,
    ρ={R1,R2}∈4NF


    例:
    R=(A,B,C),D={AB→C,C→→A}
    问R∈?NF,将R分解到4NF且具有无损连接性。
    主键AB, R∈BCNF
    分解CA(C,A),
    CB(B,C) ∈4NF
    以上子模式属4NF且具有无损连接性。
    函数依赖关系丢失。


    如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。
    亦称为最小依赖集或最小覆盖。
    (1) F中任一函数依赖的右部仅含有一个属性。
    (2) F中不存在这样的函数依赖X→A, X有真子集Z使得
    F-{X→A}∪{Z→A} 与 F 等价。
    (3) F中不存在这样的函数依赖X→A,使得
    F 与 F-{X→A} 等价。


    定理:每个函数依赖集合F均等价于一个最小函数依赖集合Fm


    极小化过程


    例:求F={BE→G,BD→G,CDE→AB,CD→A,CE→G,BC→A,B→D,C→D}
    的最小函数依赖集合Fm
    解:
    1)先分解右端, F={B→G,CE→B,CD→A,B→D,C→D}
    2)C+F=CDA,包含A, C→A代替CD → A
    3)从左向右逐一检查F中的函数依赖是否多余


    令:Fm ={B→G,CE→B,C→A,B→D,C→D}

    例:求F={A→BC,B→AC,C→A}的最小函数依赖集合Fm
    解:
    1)先分解右端,
    F= {A→B,A→C,B→A,B→C,C→A}
    2)左端都为单属性
    3)从左向右逐一检查F中的函数依赖是否多余:
    设G=F-{A→B},
    A+G =AC,不包含B, A→B保留
    设G=F-{A→C},
    A+G =ABC,包含C, A→C删除,

    令F=G={A→B,B→A,B→C,C→A}

  • 相关阅读:
    jscript 处理文件
    网页右键菜单制作小demo
    精通正则表达式(元字符)
    精通正则表达式(正则引擎)
    js动态加载脚本
    精通正则表达式(JavaScript)
    Flex帮助文档制作(ASDoc——html篇)
    Flex帮助文档制作(FAR——chm篇)
    最基础的发布服务小demo
    Flex帮助文档制作(ASDoc——注释篇1)
  • 原文地址:https://www.cnblogs.com/xujiayu/p/4875901.html
Copyright © 2011-2022 走看看