数据库关系理论模式分解理解和总结

Armstrong公理系统

逻辑蕴涵

定义/解释

好比A->B B->C 在关系模型R<U,F>中成立,能够获得A->C字R中也成立,因此称F逻辑蕴含A->C。html

闭包

定义/解释

在关系模型R中,F所逻辑蕴涵全部函数依赖叫作F的闭包,记为\(F^{+}\)算法

某个属性集关于依赖集的闭包

定义/解释

即已有X这个属性集做为左部,经过依赖集F的全部函数依赖,能够推导出的全部函数依赖,称为X关于F的闭包,记为\(X_F^{+}\)闭包

例题

已知关系模型R<U,F>,其中U={A,B,C,D,E} F={AB->C,B->D,C->E,EC->B,AC->B},求\((AB)_F^{+}\)函数

算法:把AB做为左部,而后从F中找到左部是彻底属于AB的,把对应的右部并到AB里,做为新的左部,重复直到不能再增长左部或者已经等于全集。spa

结果:\((AB)_F^{+}\)=ABCDE3d

最小依赖集

例题

F={abd->e,ab->g,b->f,c->j,cj->i,g->h}htm

算法:blog

  1. 将右部有多个的拆开,好比ab->cd 变成 ab->c,ab->d
  2. 尝试删除左侧的冗余函数依赖,具体操做是对于每一个函数依赖X->A,假设将该依赖删除,而后求X在剩下的依赖集中的闭包\(X_G^{+}\),若是A属于这个闭包,那么就能够删除。
  3. 尝试删除左侧的冗余属性,具体操做是对于剩下的每一个有多个属性的函数依赖X->A,对于每一个属性,假设将该属性删除,而后求剩下的属性集在F中的闭包\((X-B_i)^{+}_F\),若是A属于这个闭包,则能够删除。

结果:F={abd->e,ab->g,b->f,c->j,c->i,g->h}递归

求候选码

例题

已知关系模型R<U,F>,其中U=(A,B,C,D,E,G),F={AB-->C,CD-->E,E-->A.A-->G},求R的候选码。get

算法:

  • 找出只在函数依赖左部出现的属性集X,X确定是任意一个候选码的成员,由于只在左边出现,因此少了它确定推不出全集U。
  • 只在右部出现,确定不属于任何一个候选码。
  • 其余的状况尝试组合求闭包,若是闭包是全集U,那么就是候选码。

结果:

只在左边出现的是B和D,因此肯定了BD,只在右边出现的是G,因此排除G,剩下A,C,E。

先考虑一个的组合,ABD,BCD和BDE,三个的闭包都是全集U,因此三个都是候选码,算法结束。

模式分解

判断是否无损链接

算法

  • 对于一个分解,有k个子集,n个属性,创建一张k行n列的初始表,对于每一行也就是分解的每一个子集,把该分解子集出现的属性对应的列写上\(a_j\),不然写上\(b_{ij}\)
  • 对于每个依赖,找到左部属性对应的列,根据行的值分组,对于行的值相同的这些行,查看对应右部属性的列,若是这些格子里有a值,那把全部这些格子改为a值,若是没有,改为行最小的b值。若是某个b值改为a值,那么其余行(不属于当前操做的行)的相同b值也要改为a值
  • 若是不变则中止,若是出现有一行为a1 a2 ... an,那么说明该链接为无损链接。

例题

参考

已知R<U,F>,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一个分解为R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判断这个分解是否具备无损链接性。

  • 根据每一个分解的属性,构造出初始表
  • img
  • 而后看第一个依赖A->C,找到A对应的第一列,其中1 2 5行的值相等,找到C对应的第三列,对应格子没有a值,因此所有改为\(b_{13}\)
  • img
  • 同理看第二个依赖,B->C,把\(b_{33}\)改为\(b_{13}\)
  • img
  • 以此类推
  • img
  • img
  • img
  • 最后第三行有a1 a2 a3 a4 a5,因此该分解具备无损链接性。

3NF和保持函数依赖的分解

算法

  • F=F的最小依赖集
  • \(U_0\)={不在F出现的属性}
  • U=U-\(U_0\)
  • 若F中有函数依赖X->A,使得XA=U,那么分解就是R自己
  • 若是没有,将剩下的F按左部分组,获得\(U_i\),分解就是{\(R_1\)<\(U_1\),\(F_1\)>,...} ∪ \(R_0\)<\(U_0\),\(F_0\)>

3NF和保持函数依赖和具备无损链接性的分解

算法

  • 求出3NF和保持函数依赖的分解。
  • X是R的码,让已有的分解∪上一个{\(R^{*}\)<X,\(F_X\)>}。
  • 若是分解中有某个\(U_i\)属于X,那么删掉该\(U_i\),若是X属于某个\(U_i\),那么删掉。

BCNF和具备无损链接性的分解

算法

  • 相似递归的方法,首先判断自身是否是BC范式,若是是,无需分解。
  • 不然,找到当前关系R的主码,找到一个左边不含主码的依赖X->A,设U1=A,分解出去,剩下的U2=U-{A}做为一个关系模式,继续重复上面的步骤。
  • 根据X->A的选择的不一样,获得的分解也是不一样。

4NF和具备无损链接性的分解

算法

  • 求出BCNF和具备无损链接性的分解。
  • 对于一个关系R<U,F>,若是多值依赖X-->Y成立,则分解{R1<X,Y>,R2<X,Z>)}具备无损链接性,其中Z=U-X-Y。
相关文章
相关标签/搜索