精华内容
下载资源
问答
  • 1:求关系模式候选码的方法 设关系模式R中的属性集U=ABC…,有N个属性,判断U中属性在FD中出现的位置 (1)左右出现; (2)只在左部出现; (3)只在右部出现; (4)不出现; 方法:按以下几步来候选键 1.只在FD右部出现的属性...

    1:求关系模式候选码的方法

    设关系模式R中的属性集U=ABC…,有N个属性,判断U中属性在FD中出现的位置
    (1)左右出现;
    (2)只在左部出现;
    (3)只在右部出现;
    (4)不出现;

    方法:按以下几步来求候选键

    1.只在FD右部出现的属性,不属于候选码;
    2.只在FD左部出现的属性,一定存在于任何候选码当中;
    3.两边均不出现的属性一定存在于任何候选码当中;
    4.其他属性逐个与2,3的属性组合,求属性集闭包,直至X的闭包等于U,若等于U,则X为候选码。(如果2.3被证明已经是候选码,所以就不用在继续4步骤)

    例: R(U)=(ABCDEG),F={AB->C,CD->E,E->A,A->G},求候选码。

    解答:
    1)观察猜测可能的候选码
    由F观察到BD(只在左边)一定包含在候选码中,G(只在右边)肯定不是主属性,先判断BD能否构成候选码,不能的话再判断:ACE(在两边)与BD组合可能形成候选码,需要求属性集的闭包进行验证。
    2)验证

    设X=ABD,(ABD)+F
    X(0)=X=ABD
    X(1)=X∪{CG}={ABDCG}≠X(0)≠ U
    X(2)=X(1)∪{E}={ABCDEG}=U
    即,X+F = (ABD)+F ={ABCDEG}=U,因此ABD是一个候选码。
    同样,来验证BDC、BDE是否候选码?
    再设X=BDC,求(BDC)+F   
    X(0)=X=BDC
    X(1)=X∪{E}={BDCE}≠X(0)≠ U
    X(2)=X(1)∪{A}={ABCDE} ≠ U
    X(3)=X(2)∪{GC}={ABCDEG} = U
    即,X+F = (BDC)+F ={ABCDEG}=U,因此BDC也是一个候选码。
    再设X=BDE,(BDE)+F
    X(0)=X=BDE
    X(1)=X∪{A}={ABDE}≠X(0)≠ U
    X(2)=X(1)∪{GC}={ABCDEG}=U
    即,X+F = (BDE)+F ={ABCDEG}=U,因此BDE也是一个候选码。
    

    总结关系模式R(U,F)有三个候选码:ABD、BDC、BDE。

    2:判断关系模式属于第几范式的方法

    举例:
    R(U)=(ABCDEG),F={AB->C,CD->E,E->A,A->G},
    判断关系模式R(U,F)属于第几范式?

    解答:
    1)确定R(U,F)的候选码(小结1已解决)。
    三个候选码:ABD、BDC、BDE。
    2)属性集U分成两个集合:
    码属性集,ABCDE
    非码属性集,G
    3)根据范式定义判断

    1NF
    ↓ 消除非主属性对码的部分函数依赖
    2NF

    消除非主属性对码的传递函数依赖
    3NF
    ↓ 消除主属性对码的部分和传递函数依赖
    BCNF
    ↓ 消除非平凡且非函数依赖的多值依赖
    4NF

    显然,只有一个非主属性G,A->G,G部分依赖于候选码,所以,
    R(U,F)属于1NF。

    3:如何求函数依赖集F的最小覆盖集Fm

    定理6.3 每一个函数依赖集F均等价于一个极小函数依赖集Fm。此Fm称为F的最小依赖集。
    证明:
    构造性证明,找出F的一个最小依赖集。

    方法:
    (1)应用分解规则,使F的每一个函数依赖的右部属性单一化。
    (2)去掉各函数依赖左部多余的属性。
    具体办法是: 逐个循环检查F中左边是非单属性的依赖X→Y。
    设X=B1B2…Bn, 若Y∈(X-Bi)+F, 则以(X-Bi)→Y取代X→Y,直到F不再改变为止。
    (3)去掉多余的函数依赖。
    具体办法是:
    循环检查F中各函数依赖X→Y,
    令G=F-{X→Y},
    若Y∈X+G, 则从F中去掉X→Y;
    否则, 不能去掉X→Y。
    直到F不再改变为止。

    【例】 设关系模式R(U)上的函数依赖集为F, U={A, B, C, D, E, G }; F={AB→C, BC→D, ACD→B, D→EG, C→A, BE→C, CG→BD, CE→AG}。 试计算其等价的极小函数依赖集Fm。

    解:
    (1)应用分解规则,
    使F的每一个函数依赖的右部属性单一化。
    结果为:

    F1={AB→C,BC→D, ACD→B, D→E, D→G,C→A,BE→C, CG→B,CG→D, CE→A,  CE→G}。
    F1={AB→C, BC→D, ACD→B, D→E, D→G,C→A, BE→C, CG→B,  CG→D, CE→A,  CE→G}
    

    (2)去掉各函数依赖左部多余的属性。 因为CE→A, C→A, 则E是多余的;
    对于ACD→B,由于(CD)+F1=ABCDEG,则A是多余的。
    其它函数依赖中无左部多余的属性。 删除函数依赖左部多余的函数依赖后的结果为:

     F2={AB→C,BC→D, CD→B,D→E, D→G, C→A, BE→C, CG→B,  CG→D,  CE→G}。 
    

    (3) 在F2中去掉多余的函数依赖。
    对于CG→B,
    由于去掉它之后(CG)+ =ABCDEG,
    包含B,所以CG->B是多余的。
    可以验证其他函数依赖都不能去掉,因此其等价的极小函数依赖集Fm的结果为:

    Fm={AB→C,BC→D, CD→B, D→E, D→G, C→A, BE→C, CG→D,  CE→G}。
    

    注意:最小覆盖不唯一。

    F={A->B,B->A,B->C,A->C,C->A}
    Fm1={A->B,B->C,C->A}
    Fm2={A->B,B->A,A->C,C->A}
    
    展开全文
  • 如何求关系模式候选码

    千次阅读 多人点赞 2020-06-27 19:44:47
    对于给定的关系模式R(A,A1,A2,…,An)和函数依赖集F,可以把属性分为以下四类 L类:仅出现在F中的函数依赖左边的左部属性 R类:仅出现在F的函数依赖右边右部属性 N类:在F的函数依赖左右边均未出现的属性 LR类...

    对于给定的关系模式R(A,A1,A2,…,An)和函数依赖集F,可以把属性分为以下四类

    • L类:仅出现在F中的函数依赖左边的左部属性
    • R类:仅出现在F的函数依赖右边右部属性
    • N类:在F的函数依赖左右边均未出现的属性
    • LR类:在F的函数依赖左右两边均出现的属性

    对于给定的关系模式R及其函数依赖集F,有以下结论

    • 若X(X ∈ R)是L类属性,则X必为R的任一候选码的成员
    • 若X(X ∈ R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选码
    • 若X(X ∈ R)是R类属性,则X不在任何候选码中
    • 若X(X ∈ R)是N类属性,则X必为R的任一候选码成员
    • 若X(X ∈ R)是R的N类和L类属性组成的属性集,且X+包含了R的全部属性,则X是R的唯一候选码
    • 若X(X ∈ R)是LR类属性属性,则X可能为R的任一候选码的成员,也可能不为R的任一候选码成员

    上面的内容过了一遍后,我们来用例子讲解

    关系模式R(A,B,C,D,E),函数依赖F(A→D,E→D,D→B,BC→D,CD→A),求R的候选码

    1. 首先把属性分类
    由函数依赖F知:
    	L类的属性有C、E;
    	R类的属性没有;
    	N类的属性没有;
    	LR类的属性有:A、B、D。
    
    1. 设X代表L、N类属性,Y代表LR类属性
    {C,E} ∈ X,{A、B、D} ∈ Y
    
    1. 求X+

    因为C→∅,所以C+ = ∅

    因为E → D,所以E+ = {DE};又因为D→B,所以 E+ = {BDE}

    因为E → D,所以(CE)+= {CDE};又因为D→B,所以 (CE)+ = {BCDE};又因为CD → A,所以(CE)+ = {ABCDE}

    故CE为R的唯一候选码


    注意:如果X+中没有R的全部属性,即从Y中拿出一个属性来和X中的属性组合

    假设上面X+中没有R的全部属性,即从Y中拿出属性A

    因为C→∅,所以(AC)+ = ∅,所以AC不是R的候选码
    因为E → D,所以(AE)+ = {ADE};又因为D→B,所以 (AE)+ = {ABDE},所以AE不是R的候选码
    然后求(ACE)+,如果ACE不是候选码,就重新从Y中选择一个属性组成BC、BE、BCE,依次类推

    如果拿Y中的一个属性求不出候选码,就拿Y中的两个属性组合求


    关系模式R(A,B,C,D,E,F),其函数依赖集F={AB→E,AC→F,AD→B,B→C,C→D}

    • L类属性:A
    • R类属性:E、F
    • LR类属性:B、C、D
    • 令L类属性的元素为X,LR类的为Y
    • X+ = A(A+ = A)
    • 从Y中取出一个元素B,与X结合得,(AB)+ = ABCDEF
    • 从Y中取出一个元素C,与X结合得,(AC)+ = ABCDEF
    • 从Y中取出一个元素D,与X结合得,(AD)+ = ABCDEF

    故关系模式的候选码有:AB、AC、AD

    注:A单独推导不出其它元素,因为函数依赖集中,没有A → ?,只有
    A?→ 元素


    哦对了,关系模式R的候选码可以多个


    欢迎大家关注下个人的「公众号」:独醉贪欢
    后台回复「无脑死磕数据库原理」即可获得练习题

    展开全文
  • 如何一个关系模式候选码

    千次阅读 2019-06-18 17:27:32
    首先来看候选码的定义:若关系中的某一属性组的...求候选码的简单方法方法: (1)如果有属性不在函数依赖集中出现,那么它必须包含在候选码中; (2)如果有属性不在函数依赖集中任何函数依赖的右边出现,那么它必...

    首先来看候选码的定义:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。

    若W是候选键,则必须满足两个条件:W的闭包是U;W没有冗余。

    设关系模式R中U=ABC.......等N个属性,U中的属性在FD中有四种范围:

    求候选码的简单方法方法: 
    (1)如果有属性不在函数依赖集中出现,那么它必须包含在候选码中;
    (2)如果有属性不在函数依赖集中任何函数依赖的右边出现,那么它必须包含在候选码中;
    (3)如果有属性只在函数依赖集的左边出现,则该属性一定包含在候选码中。
    (4)如果有属性或属性组能唯一标识元组,则它就是候选码;

    算法:按以下步骤求候选键:
    1.只在FD右部出现的属性,不属于候选码;
    2.只在FD左部出现的属性,一定存在于某候选码当中;
    3.外部属性一定存在于任何候选码当中;
    4.其他属性逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码。

    例1:R<U,F>,U=(A,B,C,D,E,G),F={AB-->C,CD-->E,E-->A.A-->G},求候选码。

      因G只在右边出现,所以G一定不属于候选码;而B,D只在左边出现,所以B,D一定属于候选码;BD的闭包还是BD,则对BD进行组合,除了G以外,BD可以跟A,C,E进行组合
      先看ABD
      ABD本身自包ABD,而AB-->C,CD-->E,A-->G,所以ABD的闭包为ABDCEG=U
      再看BDC
      CD-->E,E-->A,A-->G,BDC本身自包,所以BDC的闭包为BDCEAG=U
      最后看BDE
      E-->A,A-->G,AB-->C,BDE本身自包,所以BDE的闭包为BDEAGC=U

      因为(ABD)、(BCD)、(BDE)的闭包都是ABCDEG所以本问题的候选码有3个分别是ABC、BCD和BDE

     

    例2:R<U,F>,U=(A,B,C),F={AB-->C,C-->B},求候选码。

    因为A只出现在左边,所以A一定是候选键。A的闭包还是A,则对A进行组合,可以和B,C进行组合。

    首先看AB,AB本身自包AB,而AB-->C,所以AB的闭包是ABC=U。

    再看AC,AC本身自包AC,而C-->B,所以AC的闭包是ABC=U。

    因为AB,AC的闭包都是ABC,也就是U,所以候选键是AB,AC。
     

    展开全文
  • 关系模式候选码

    千次阅读 2019-02-20 13:59:02
    已知关系模式和函数依赖求候选码的步骤: 只在右边出现的属性,不属于候选码; 只在左边出现的属性,一定存在于某候选码当中; 左右都不出现的属性一定存在于任何候选码当中; 左右都出现的属性逐个与2,3的属性组合,...

    已知关系模式和函数依赖求候选码的步骤:

    1. 只在右边出现的属性,不属于候选码;
    2. 只在左边出现的属性,一定存在于某候选码当中;
    3. 左右都不出现的属性一定存在于任何候选码当中;
    4. 左右都出现的属性逐个与2,3的属性组合,求属性闭包,若闭包等于U,则为候选码。

    例如:
    关系模式R(A,B,C)
    存在函数依赖F={AB->C, C->B}
    求R的候选码。

    只在左边出现 L : A
    只在右边出现 R : 没有
    左右都不出现 N : 没有
    左右都出现的 LR : B, C

    首先看AB,AB本身自包AB,而AB->C,所以AB的闭包是ABC=U。
    再看AC,AC本身自包AC,而C->B,所以AC的闭包是ABC=U。
    故而R的候选码是AB,AC。

    展开全文
  • 求关系模式候选码

    千次阅读 多人点赞 2020-03-06 22:20:47
    (1)如果属性只在函数依赖集的左边出现,则该属性一定包含在候选码中。 (2)如果属性没有在属性依赖集中出现,则该属性一定包含在候选码中。 (3)如果属性只在函数依赖集右边出现,那么它必不包含在候选码中; ...
  • 浅析如何求解关系模式候选码

    千次阅读 2020-05-18 12:40:14
    摘要:本篇文章讲解的内容是“浅析如何求解关系模式候选码”。在做多属性函数依赖集候选码求解题目时,有些同学还是会不知所措,最主要原因是没有理解他们之间求解的思路和算法。本文通过理论分析和例题来浅析这块...
  • 首先来看候选码的定义:若关系中的某一属性...求候选码的简单方法方法: (1)如果有属性不在函数依赖集中出现,那么它必须包含在候选码中; (2)如果有属性不在函数依赖集中任何函数依赖的右边出现,那么它必须包...
  • 关系模式候选码

    千次阅读 2020-07-04 09:59:35
    关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码。 若W是候选键,则必须满足两个条件:W的闭包是U;W没有冗余。 求候选码的简单方法: (1)不在函数依赖集中出现的属性,必包含在候选码中; ...
  • 求解数据库关系模式候选码

    千次阅读 2020-05-03 10:54:02
    已知关系模式和函数依赖求候选码的步骤: 只在右边出现的属性,不属于候选码; 只在左边出现的属性,一定存在于某候选码当中; 左右都不出现的属性一定存在于任何候选码当中; 左右都出现的属性逐个与2,3的属性组合,...
  • (2)R的候选码 解:①首先用LRN法区分各属性 L: C, E R: A, G N: none LR: B, D ②闭包: C闭包 != U , E闭包 != U BC闭包 != U , CD闭包 != U , BE闭包 != U , DE闭包 != U ,...
  • 关系模式和范式判断、候选码主码(笔记)

    万次阅读 多人点赞 2019-05-27 18:32:39
    非主属性:不包含在任何一个候选码中的属性。 第一范式(1NF):无重复的列。第一范式是关系模式的基本要求。 第二范式(2NF):在满足第一范式的前提下,非主属性非部分依赖于主关键字。要求实体的属性完全依赖于...
  • 求解关系模式R的候选码

    千次阅读 2020-03-31 19:42:36
    设有关系模式R(U,F),其中U={A,B,C,D,E},函数依赖集F={ A→BC,CD→E,B→D,E→A},出R的所有候选码。 通过分析F发现,其所有的属性A、B、C、D、E都是LR类属性,没有L类、R类、N类属性。 (一)先从这些...
  • 关系模式全部候选关键字的算法,数据库的表与表之间关系模式等应用
  • 关系数据库模型的应用十分广泛,其候选码的求解已被证明是一个NP完全问题,从闭包的角度讨论了如何求解候选码,并对其求解过程进行了一定程度的优化.最后提出了一些比较合理的建议
  • 关系模式R(ABCDE),回答下面几个问题:...则:当属性组BC也是关系模式R的候选码时,R是BCNF。 此时有:A →BC,BC →A成立。 (2):对于左侧为多属性的函数依赖集所有候选码 ①:F={A →B,BC →D,DE →A} ②:令G=F-
  • 一个是最小依赖函数集,一个是求候选码,一个是闭包,一个是要把关系模式分解成3NF且保持函数依赖,一个是分解成3NF且保持函数依赖和无损连接。 记录一下我对这几个问题的法。可能会有哪里有漏洞,希望可以指...
  • 数据库求候选码的算法

    万次阅读 多人点赞 2019-03-01 15:48:06
    ,U={A,B,C,D},F={B→D,AB→C},R候选码。 在求解之前先要明白一些定理。我们把函数依赖集中F中的属性分为四类: L类:所有依赖关系中仅出现在函数依赖左部的属性。 R类:所有依赖关系中仅出现在函数依赖...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,735
精华内容 6,294
关键字:

求关系模式的候选码