5.3.2 最小函数依赖集
5.3.2.1 闭包
若 能在依赖关系 下推导出 ,则 是 关于 的闭包,记作:,
计算方法如下,若求 ,其中 :
- 令 。
- 在依赖关系 中寻找左边是 、 或 的关系,把右边并起来,令为 。
- 若 ,或 ,则 ;否则令 ,重复步骤 2。
例题:
-
已知关系 满足函数依 赖关系:
求 。
参考答案
解:令 ,则
,
,
,
于是:
-
已知关系 满足函数依赖关系:
求 。
参考答案
解:令 ,则
,
,
于是:
5.3.2.2 最小函数依赖集
定义:
- 任一函数的右边只有一个属性;
- 不存在冗余(多余)的函数;
- 函数的左边不能有冗余属性。
计算步骤如下,若求函数依赖 的最小依赖集 :
- 用分解规则将所有依赖右边均分解为单属性依赖。
- 去掉 中多余的依赖。依次尝试去掉一个依赖关系:
- 若删除会导致依赖关系少一个甚至多个元素,则不能去掉,否则继续尝试去掉。
- 假设去掉的是 ,在剩下的依赖关系中求 是否含 ,若包含则去掉,且下一次计算时使用去掉之后的函数依赖,否则不能去掉。
- 去掉各依赖左边多余的属性。依次检查左边不是单属性的依赖,假设是 ,求 是否包含 ,若包含则去掉 ,即保留 。
例题:
-
求函数依赖关系 的最小函数依赖集:
参考答案
解:展开所有右部不为单属性的依赖:
依次尝试去掉依赖关系:
-
尝试去掉 ,令 ,则:
得 ,包含 ,可以去掉。
-
尝试去掉 ,令 ,则:
,
,
得 ,包含 ,可以去掉。
-
尝试去掉 ,令 ,则:
,
,
得 ,不包含 ,不能去掉。
-
尝试去掉 ,令 ,则:
,
得 ,不包含 ,不能去掉。
-
尝试去掉 ,令 ,则:
,
,
得 ,包含 ,可以去掉。
-
尝试去掉 ,令 ,则:
,
得 ,不包含 ,不能去掉。
-
是唯一一个包含元素 的依赖,不能去掉。
此时得到:
整理可得:
-