定义2.13 设R(U)是一个关系模式,F为R(U)的一个函数依赖集,B,C为R(U)所涉及的属性集的子集。如果利用Armstrong公理系统中的推理规则能够从函数依赖集F中推出B→C,则称F逻辑蕴涵B→C。F所逻辑蕴涵的函数依赖的集合称为F的闭包,记为F+。
定义2.14 设一个关系模式R(U)被分解成n个关系模式:R1, R2,…, Rn,F为R(U)的属性间函数依赖的集合,F1, F2,…, Fn分别为F在R1, R2,…, Rn上的投影。对于任意F所逻辑蕴涵的函数依赖B→C,总存在某一个Fi,使得Fi逻辑蕴涵B→C,则这种分解称为保持函数依赖的分解。
3. 既保持函数依赖又具有自然连接无损的分解
Ø 连接无损分解和保持函数依赖的分解是两个相互独立的模式分解。但它们的优缺点具有一定的互补性。
Ø 连接无损分解可以保证分解所得到的关系模式经过自然连接后又得到原关系模式,不会造成信息的丢失。这种分解可能带来数据冗余、更新冲突等问题。
原因:连接无损分解不是按照关系模式所蕴涵数据语义来进行分解。而保持函数依赖的分解则正好是按照数据语义来进行分解,它可以使分解后的关系模式相互独立。避免由连接无损分解带来的问题,但它在某些情况下可能造成信息丢失。一个自然的想法就是构造这样的分解:该分解既是保持函数依赖的分解,又具有自然连接无损的特性。这种分解就称为既保持函数依赖又具有自然连接无损的分解。
【例2.15】 考虑例2.10中的关系模式:emp_info(Eno, Ename, Dept, Dleader)
Ø Eno为员工编号,Ename为员工姓名,Dept为员工所在部门,Dleader为部门领导。如果将该关系模式分解为:emp_info1(Eno, Ename, Dept)和emp_info2(Eno, Dleader)。易验证,这种分解虽然是连接无损分解,但会造成数据冗余、更新异常等问题。进一步分析还可以发现,该分解不保持函数依赖。例如,函数依赖Dept→Dleader既不被emp_info1的函数依赖集所逻辑蕴涵,也不为emp_info2的函数依赖集所逻辑蕴涵。
Ø 现在我们将关系模式emp_info(Eno, Ename, Dept, Dleader)分解成如下的两个模式:
emp_info2(Eno, Ename, Dept)
dept_info2(Dept, Dleader)
Ø 可以验证,这种分解方法保持了函数依赖,同时又具有自然连接无损的特性,它是既保持函数依赖又具有自然连接无损的分解。