# 目录

1. 作业题目 ………………………………………………………………

## 作业辅导解析

LAB_WORKSHEET_WEEK[作业标题]

4th April,2018[日期]

1.作业题目：[Assignment 上面随便复制一点]

1. Write a function min covers that takes two parameters, a schema and a set of functional dependencies, and returns all minimal covers reachable from the set of functional dependencies. The set of results is represented as a list of pairs of lists. Your report consists of up to one page explanation of the algorithm you devise to compute all minimal covers. For example, min_covers([’A’, ’B’, ’C’], [[[’A’, ’B’], [’C’]],[[’A’], [’B’]], [[’B’], [’A’]]]) = [[[[’A’], [’C’]], [[’A’], [’B’]], [[’B’], [’A’]]], [[[’B’], [’C’]], [[’A’], [’B’]], [[’B’], [’A’]]] ]
2. Write a function all min covers that takes two parameters, a schema and a set of functional dependencies, and returns all minimal covers. The set of results is represented as a list of pairs of lists. Your report consists of up to one page explanation of the algorithm you devise to compute all minimal covers.

2.作业目的：[作业的目的 1-3 个点都可以]

1、掌握求解函数依赖集的闭包算法；

2、掌握关系规范化的最小函数依赖集的求解方法；

3、掌握 Python 操作列表的使用方法。

3.运行效果： [运行结果截图]

1. 对于 R = [‘A’, ‘B’, ‘C’]FD = [[[‘A’, ‘B’], [‘C’]],[[‘A’], [‘B’]], [[‘B’], [‘A’]]] min_covers 结果为： [[[[‘A’], [‘C’]], [[‘A’], [‘B’]], [[‘B’], [‘A’]]], [[[‘B’], [‘C’]], [[‘A’], [‘B’]], [[‘B’], [‘A’]]]] all_min_covers 结果为： [[[[‘A’], [‘B’]], [[‘B’], [‘A’]], [[‘A’], [‘C’]]], [[[‘A’], [‘B’]], [[‘B’], [‘A’]], [[‘B’], [‘C’]]]] 2. 对于 R = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]FD = [[[‘A’, ‘B’],[‘C’]], [[‘D’],[‘D’, ‘B’]], [[‘B’],[‘E’]], [[‘E’],[‘D’]], [[‘A’, ‘B’, ‘D’],[‘A’, ‘B’, ‘C’, ‘D’]]] min_covers 结果为： [[[[‘D’], [‘B’]], [[‘B’], [‘E’]], [[‘E’], [‘D’]], [[‘A’, ‘D’], [‘C’]]]] all_min_covers 结果为： [[[[‘B’], [‘E’]], [[‘D’], [‘E’]], [[‘E’], [‘D’]], [[‘D’], [‘B’]], [[‘A’, ‘B’, ‘D’, ‘E’], [‘C’]]], [[[‘B’], [‘E’]], [[‘D’], [‘E’]], [[‘E’], [‘D’]], [[‘E’], [‘B’]], [[‘A’, ‘B’, ‘D’, ‘E’], [‘C’]]], [[[‘B’], [‘E’]], [[‘D’], [‘E’]], [[‘E’], [‘D’]], [[‘D’, ‘E’], [‘B’]], [[‘A’, ‘B’, ‘D’], [‘C’]]], [[[‘B’], [‘E’]], [[‘D’], [‘E’]], [[‘E’], [‘D’]], [[‘D’, ‘E’], [‘B’]], [[‘A’, ‘B’, ‘D’], [‘C’]]], [[[‘B’], [‘E’]], [[‘D’], [‘E’]], [[‘E’], [‘D’]], [[‘D’, ‘E’], [‘B’]], [[‘A’, ‘B’, ‘E’], [‘C’]]], [[[‘B’], [‘E’]], [[‘D’], [‘E’]], [[‘E’], [‘D’]], [[‘D’, ‘E’], [‘B’]], [[‘A’, ‘E’, ‘D’], [‘C’]]]]

4.实现过程：[部分核心代码截图, 截图部分的代码 prefer 中英文 注释]

① 用分解法则，使 F 中的任何一个函数依赖的右部仅含有一个属性；

② 去掉多余的函数依赖：从第一个函数依赖 X→Y 开始将其从 F 中去 掉，然后在剩下的函数依赖中求 X 的闭包 X+，看 X+是否包含 Y，若是，则去

X→Y；否则不能去掉，依次做下去。直到找不到冗余的函数依赖；

③ 去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个 属性的依赖。例如 XY→A，若要判 Y 为多余的，则以 X→A 代替 XY→A 是否 等价？若 A(X)+，则 Y 是多余属性，可以去掉。

① 对于单属性列表 R 的所有子集，计算每个子集的闭包；

② 对于每个子集的闭包，计算闭包的子集，作为新的函数依赖的右边 部分，与左边部分的属性构成新的所有函数依赖集 FD+

③ 对于新的所有函数依赖集 FD+，用（b）中的方法求得所有等价的最 小函数依赖集。

5.知识点巩固：[相关知识点 1-3 点总结]

1、等价和覆盖

2、最小函数依赖集

F 中的任何一个函数依赖的右部仅含有一个属性；

F 中不存在这样一个函数依赖 X→A，使得 F F-{X→A}等价；

F 中不存在这样一个函数依赖 X→AX 有真子集 Z 使得 F-{X→A}

{Z→A}F 等价。

6.知识拓展：[拓展知识点 1-3 点总结]

1、函数依赖的闭包

F 包含于 F+，如果 F=F+，则 F 为函数依赖的一个完备集。

2、求解函数依赖集的闭包

7.学习建议：[根据学习 IT 的经验，写 1-3 , prefer 3 个点]

1Python 对列表的操作是最基本的，要熟练使用； 2、本次作业涉及到闭包、函数依赖集等知识，需要将理论知识转化为代码； 3、在后续巩固中可以加强列表的学习，并要学以致用，举一反三。