代码改变世界

数据库函数依赖诸问

2013-03-26 20:34  FireFoxPlus  阅读(292)  评论(0)    收藏  举报

一.求正则覆盖

  1).若有x->y,若y=A1A2A3......An,则用x->Aj(j遍取1到n)取代x->y

  2).有X->A,令G=F-{X->A},若有A∈XG+,则X->A冗余

  3).有x->y,x=A1A2A3......An,若去掉Aj仍成立,Aj多余

二.对于分解后的关系的判断

  1).是否无损?

  分解后,用自然链接可以恢复,且若分为R1,R2两个关系,则应有R1∩R2为R1或R2的超码

  2).保持依赖

  分解后如果为R1,R2两个关系,若原关系F上的每个函数依赖均在R1或R2上成立的话,则为保持依赖

三.向3nf转换

  1).先转换为保持依赖的

    1.对R<U,F>的函数依赖集F进行极小化(即以上的正则覆盖)

    2.找出不在F中出现的属性,将这属性构成一个关系模式,并从U中去掉

    3.若有x->A∈F且xA=U则结果ρ{R}算法终止

    4.否则,对F按具有相同左部原则进行分组,每组函数依赖Fi所涉及全部属性形成属性集Ui,若Ui⊆Uj(i不等于j),去掉Ui,U=∪Ui(i从1取至k),构成保持依赖分解

  2)向1)中结果添加一个主键,构成无损分解

参考笔者自己n年前学习数据库时写的一篇笔记,如有不对之处,请指正。