数据库原理系统设计、七个算法-上

275 阅读2分钟

1.1 函数依赖的定义

设有关系模式 R(U) ,X和Y是属性集U的子集,函数依赖(FD),是形成 X->Y的命题,即只要r是R的当前关系,对Y中任意的两个元组1s和t,都有 s[X] = t[Y] 蕴涵 t[Y] = s[Y],那么FD X->Y在关系模式中成立。

1.2 算法1 求属性集的闭包

例: 属性集U为ABCD, FD集为 {A->B, B->C , D->B}, 求A+,AD+,BD+

  • 设 X^0 = A ,.i = 0
  • A->B , X^1 = X^0 U {B} = {A,B} , i = 1
  • B->C , X^2 = X^1 U {C} = {A,B,C} , i = 2
  • 结果集中没有子集能够函数决定其他属性便结束。
  • A+ = ABC

1.3 算法2 求最小函数依赖

例:关系模式R(ABC)的FD集, F={A->BC,B->C,A->B,AB->C},求最小依赖集。

  • A->B , A->C , B->C ,A->B, AB->C
  • 将右侧化为单属性
  • AB->C, A->C,B->C
  • 去除多余函数依赖
  • A->C, B->C <=> AB->C
  • 整理后

1.4 算法3 无损分解测试

设关系模式R(ABCD),R分解成 p={AB,BC,CD},如果R上成立的函数集是F1 = {B-A, C->D},那么p相对于 F1是否是无损分解?如果 F2={A->D,C->D}呢?

  • 构建 m(p) 表
m(p)ABCD
ABa1a2b13b14
BCb21a2a3b24
CDb31b32a3a4

将第一列A与第一行AB判断包含关系,如果在表中第一列第一行写入a1(第几列便是写数字几)

  • 依照F1集对表进行修改

  • m(p) 表依照F1集修改后

m(p)ABCD
ABa1a2b13b14
BCa1a2a3a4
CDb31b32a3a4

依照函数依赖性质进行修改后,得出存在一行全为 a(n表示列)的元组时,该模式为无损分解。

  • m(p) 表依照F2集修改后
m(p)ABCD
ABa1a2b13b14
BCb21a2a3a4
CDb31b32a3a4

得出不存在一行全为 a(n表示列)的元组时,该模式为有损分解。

Footnotes

  1. 表示关系模式中一行记录。