正则覆盖与候选码

1.正则覆盖

一般用Fc表示。具有如下性质:

  • Fc中的任何函数依赖都不含有无关属性
    如存在函数依赖AB->C,A->C,那么B在AB->C中是无关的。因为有没有B,A->C总成立。
  • Fc中函数依赖的左半部分是唯一的。

正则覆盖结果不唯一。
其中的一个方法:

  1. 把右部分化为单属性

  2. 去掉左部分的冗余属性
    比如AB->C

    1. 假设A冗余,那么看是否B+包含C
    2. 假设B冗余,…
  3. 去掉冗余的函数依赖

    • 如去掉A->B, 那么看是否可由其他依赖推出A->B
  4. 合并函数依赖


简单例子:
模式(A,B,C)上的函数依赖集F:
A->BC
B->C
A->B
AB->C

  1. 把右部分化为单属性后
    A->B
    A->C
    B->C
    AB->C
  2. 去掉左边冗余属性后,
    A->B
    A->C
    B->C
  3. 去掉冗余函数依赖后
    A->B
    B->C
  4. 合并
    A->B
    B->C
    即得正则覆盖

关系模式r(A,B,C,D,E)的函数依赖集F:
A->BC
CD->E
B->D
E->A

  1. 右部分化为单属性后,
    A->B
    A->C
    CD->E
    B->D
    E->A
  2. 去掉左边冗余属性
    A->B
    A->C
    CD->E
    B->D
    E->A
  3. 去掉冗余函数依赖
    A->B
    A->C
    CD->E
    B->D
    E->A
  4. 合并
    A->BC
    B->D
    CD->E
    E->A

函数依赖集F:A->BCD,BC->DE,B->D,D->A

  1. 右部分化为单一属性
    A->B,
    A->C,
    A->D
    BC->D,
    BC->E
    B->D
    D->A
  2. 去掉左部冗余属性以及冗余函数依赖
    A->B,
    A->C,
    B->D,
    D->A
    B->E(由BC->E得出,B+=BDACE)
  3. 合并
    A->BC
    D->A
    B->ED

2.候选码

关系模式R
LHSA:属性只出现在函数依赖集中的左部分。
RHSA:属性只出现在函数依赖集中的右部分。如A->BC,则B和C为RHSA
LRSH:出现在左右部分的。
NONA:没有出现在函数依赖集中属性的集合。

  1. 构造LHSA和NONA集合,构成并集X。如果X的闭包为U,则完毕。否则执行2
  2. 对于LRSH中每个属性A,如果AX的闭包是U,加到答案中且LRSH-{A}
  3. 对于LRSH中的每两个属性Z,如果ZX的闭包是U,加到答案中。
  4. 对于LRSH中每3个,每4个。。。。属性Z,如果ZX的闭包是U,加到答案中.

例子:
U={A,B,C,D,E},F={AC->BC,AC->E.B->C,C->D,CE->B}

  1. LHSA={A},NONA={∅},显然A的闭包不是候选码
  2. LRSH={B,C,E},由于AB,AC,AE的闭包都是U,所以都是候选码。此时LRSH为空,结束
  3. 故候选码为AB,AC,AE.

设关系模式R=(A,B,C,D,E,F),
函数依赖集F={A→BC,BC→A,BCD→EF,E→C},求R 的候选码

  1. LHSA={D}, RHSA={A,B,C,E}
  2. 观察AD,BD,CE,ED ,得到AD的闭包为R. 去掉A之后的LRSA={B,C,E}
  3. 观察BCD,BED,CED,得到 BCD,BED的闭包为R
  4. 观察BCED,他的闭包是R,但由于包含候选码BCD,BED,所以他是个超码,去掉
  5. 得到候选码为AD,BCD,BED
  • 43
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值