数据库复习 3NF分解算法

算法描述

输入:关系R和其上成立的函数依赖集F。
输出:又R分解出的关系集合,其中每个关系均属于3NF。分解具有无损链接依赖保持性质。
方法:依次执行下列步骤:

  1. 找出F的一个最小基本集,记为G。
  2. 对于G中的每一个FD X→A,将XA作为分解出的某个关系的模式。
  3. 如果第2步分解出的关系的模式均不包含R的超键,则增加一个关系,其模式为R的任何一个键。

举例

《数据库系统基础教程 原书第3版》P60
习题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) 指出所有的3NF违例。
ii) 如有必要,将关系分解为一系列属于3NF的关系。

a) R(A,B,C,D) FD{AB→C,C→D,D→A}

键:AB、BC、BD
主属性:A B C D
满足3NF

b) R(A,B,C,D) FD{B→C,B→D}

键:AB
主属性:B C
不满足3NF的FD:B→C,B→D,BC→D,BD→C

最小函数依赖集:B→C,B→D
故分解为BC,BD
均不包含R的超键,故增加AB

分解结果为BC,BD,AB

c) R(A,B,C,D) FD{AB→C,BC→D,CD→A,AD→B}

键:AB、BC、CD、AD
主属性:A B C D
满足3NF

d) R(A,B,C,D) FD{A→B,B→C,C→D,D→A}

键:A、B、C、D
主属性:A B C D
满足3NF

e) R(A,B,C,D,E) FD{AB→C,DE→C,B→D}

键:ABE
主属性:A B E
非主属性:C D
不满足3NF的FD:AB→C,DE→C,B→D,AB→D,BC→D,BE→C,BE→D,ABC→D,ABD→C,ADE→C,BCE→D,BDE→C

最小函数依赖集:AB→C,DE→C,B→D
故分解为ABC,CDE,BD
均不包含R的超键,故增加ABE

分解结果为ABC,CDE,BD,ABE

f) R(A,B,C,D,E) FD{AB→C,C→D,D→B,D→E}

键:AB、AC、AD
主属性:A B C D
不满足3NF的FD:C→E,D→E,BC→E,BD→E,CD→E,BCD→E
AB→E(AB→C,C→E)
AC→E(AC→D,D→E)
AD→E(AD→C,C→E)

最小函数依赖集:AB→C,C→D,D→B,D→E
故分解为ABC,CD,DB,DE
包含R的超键,即为分解结果

  • 21
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值