BCNF无损分解例题

例2. 关系模式R<U,F>,其中:U={A,B,C,D,E},F={A→C,C→D,B→C,DE→C,CE→A},将其分解成BCNF并保持无损连接;
  • 第一步:求取码

首先查找L属性,即只在依赖函数左端出现过的属性,结果为B,E。

然后计算B在F上的闭包为BCD,E在F上的闭包为E,显然都不等于U,但是BE的闭包等于U

因此BE为R的唯一候选码

候选码求法

  • 第二部:逐步分解
  • 第一次分解

    A->C违背BCNF的定义,单独拿出构成关系模式R11(A,C),F11(A->C),key11=A。

    同样,函数依赖右端中不必再出现C,可以通过传递依赖尽可能消除C,那么得到

    B->D,DE->D,BE->A,A->D,AE->A,把能换的全换了保险。然后就将R分解成了

    R12(A,B,D,E),F12(B->D,DE->D,BE->A,A->D,AE->A),key12=BE

    然后计算F11与F12求最小依赖集

    F11不变,本身就是,F12经过单属性化,无冗余化,既约化后变为

    R12(A,B,D,E),F12(B->D,BE->A,A->D),key12=BE

    最小依赖集求法

    综上R分解成为:R11(AC),F11(A->C),key11=A,R12(A,B,D,E),F12(B->D,BE->A,A->D),key12=BE

  • 第二次分解

    鉴于R11已经为BCNF,故可以不再分解。但R12显然不是,需要继续分解。

    显然R12中的A->D不满足BCNF定义,单独拿出,R21(A,D),F21(A->D),key=A,

    函数依赖右端中不必再出现D,可以通过传递依赖尽可能消除D,那么得到

    R22(A,B,D,E),F12(B->D,BE->A),key22=BE

    此时F21与F22均是最小依赖集不需要变

    综上R12分解成为:R21(A,D),F21(A->D),key=A,R22(A,B,D,E),F12(B->D,BE->A),key22=BE

  • 第三次分解

    鉴于R21已经为BCNF,故可以不再分解。但R22显然不是,需要继续分解。

    显然B->D不满足BCNF定义直接拿出

    R31(B,D),F31(B->D),key=B,那么剩余的BE->A也可以构成BCNF

    R32(ABE),F32(BE->A),key=BE

    显然R31与R32都满足BCNF,分解完毕

    综上R22分解成为:R31(B,D),F31(B->D),key=B,R32(ABE),F32(BE->A),key=BE

  • 综上所述R分解为下表

    R11(AC),F11(A->C),key11=A
    R21(A,D),F21(A->D),key=A
    R31(B,D),F31(B->D),key=B
    R32(ABE),F32(BE->A),key=BE
  • 第三步:验证上述BCNF分解就是无损连接
  • 做表

    ABCDE
    ACa1b12a3b14b15
    ADa1b22b23a4b25
    BDb31a2b33a4b35
    ABEa1a2b43b44a5
  • 观察函数依赖F

  • A->C,改表
ABCDE
ACa1a2a3b14b15
ADa1a2b23a4b25
BDb31a2b33a4b35
ABEa1a2b43b44a5
  • B->C,改表
ABCDE
ACa1a2a3b14b15
ADa1a2a3a4b25
BDb31a2a3a4b35
ABEa1a2a3b44a5
  • C->D,改表
ABCDE
ACa1a2a3a4b15
ADa1a2a3a4b25
BDb31a2a3a4b35
ABEa1a2a3a4a5

此时,第五行全部为a,是无损连接,证明完毕

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值