BCNF理解与应用

1-如何判断是否为BCNF

假设存在关系RFD集合
=>找出关系R的所有最小化基本集
==>判断FD集合中的每一个FD的左侧是否包含最小化基本集(其中一个, 不一定是最小化, 超键即可), 只要有一个FD不满足, 即R不为BCNF

2-如何进行BCNF分解

假设存在关系RFD集合
=>首先判断FD集合中不满足BCNF的FD(根据上述的 1.如何判断是否为BCNF),构成一个新的违例FD集合
==>选定其中一个违反BCNF的FD, 举例X—>Y, 根据那个FD进行分解, 得到新生成的两个关系 ,R1={X的闭包}=
{x+}, R2={排除X后的其他属性,X}
,再依次判断, 直到两个关系均为BCNF
===>将所有的关系统一起来即可

3-例子

(1)在这里插入图片描述
在这里插入图片描述

(2)

《数据库系统基础教程 原书第3版》P52
习题3.3.1 对于下列关系模式和FD集合:
a) R(A,B,C,D) FD{AB→C,C→D,D→A}
b) R(A,B,C,D) FD{B→C,B→D}
c) R(A,B,C,D) FD{AB→C,BC→D,CD→A,AD→B}
d) R(A,B,C,D) FD{A→B,B→C,C→D,D→A}
e) R(A,B,C,D,E) FD{AB→C,DE→C,B→D}
f) R(A,B,C,D,E) FD{AB→C,C→D,D→B,D→E}
做下列事情:
i) 指出所有违反BCNF的FD。不要忘记考虑那些不在上述集合中、但可以由它们推断出但FD。但是,没有必要给出右边含有不止一个属性但BCNF违例。
ii) 根据需要把关系分解为一系列属于BCNF的关系集合。
(a)
(I)找出所有的键(最小基本化集):AB或BC或BD
   ===>得到违反BCNF的FD集合{C→D,D→A}
(II){C→D,D→A}中随机选取一个FD, 假设选取  C→D
   ===>{C→D,D→A}{c}+={ACD},所以R1={C,D,A},R2={C,B},分别对应的FD集合{C->D,D->A}{}, 再一次判断
   ====>R2={C,B},明显满足BCNF
   ====>R1={C,D,A}, FD集合{C->D,D->A}==>键为C, FD集合中{D->A}不满足BCNF,继续分解;
   ======>根据{D->A}分解 {D}+={A,D},则R1={A,D},R2={D,C},均满足BCNF
(III)所以结果为 {BC},{AD},{CD}
   
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值