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) | A | B | C | D |
---|---|---|---|---|
AB | a1 | a2 | b13 | b14 |
BC | b21 | a2 | a3 | b24 |
CD | b31 | b32 | a3 | a4 |
将第一列A与第一行AB判断包含关系,如果在表中第一列第一行写入a1(第几列便是写数字几)
-
依照F1集对表进行修改
-
m(p) 表依照F1集修改后
m(p) | A | B | C | D |
---|---|---|---|---|
AB | a1 | a2 | b13 | b14 |
BC | a1 | a2 | a3 | a4 |
CD | b31 | b32 | a3 | a4 |
依照函数依赖性质进行修改后,得出存在一行全为 a(n表示列)的元组时,该模式为无损分解。
- m(p) 表依照F2集修改后
m(p) | A | B | C | D |
---|---|---|---|---|
AB | a1 | a2 | b13 | b14 |
BC | b21 | a2 | a3 | a4 |
CD | b31 | b32 | a3 | a4 |
得出不存在一行全为 a(n表示列)的元组时,该模式为有损分解。
表示关系模式中一行记录。 ↩︎