关系模型的属性闭包和最小函数依赖
函数依赖:
平凡函数依赖:X->Y,且YËX
非平凡依赖:X->Y,且YÍX
完全函数依赖:x->Y,且没有任何一个X的子集X'能够满足X'->Y
部分函数依赖:X->Y,存在X的子集X'能够满足X'->Y
传递函数依赖:X->Y,Y->Z,YËX且Y无法决定X
关系模型的属性闭包:
假设{A1,A2,A3...An}是一个属性集合,S是一个函数依赖集合,S集合下的属性集合闭包是集合B,它使每个满足S中所有函数依赖关系,也同时满足A1,A2,...,An->B。也就是说,A1,A2,...,An->B是从S中的函数依赖中推到出来的。{A1,A2,A3...An}的闭包为:{A1,A2,A3...An}+。
求属性集合闭包的过程如下:
1.假设X为结果属性集,首先将X初始化为{A1,A2,A3...An}。
2. 在函数依赖集合中,查找B1,B2,...,Bn->C,其中B1,B2,...,Bn在X中,而C不在X中,则将C加入X中。
3. 反复进行上一步骤,直到不再有新的属性加入X。
4.此时的结果集合就是:{A1,A2,A3...An}+。
例如,给出模式R(U,F),U={A,B,C,D,E},F={B->A,D->A,A->E,AC->B,D->C},求属性集AD的闭包。
解答:设V={A,D}。求的是:{A,D}+。在函数依赖集中,首先在V中找关系:A->E,D->C,将C,E加入得V1={A,C,D,E}
在V1中找关系,AC->B,则得到V2=={A,B,C,D,E}。
所以,W={A,D}+ ={A,B,C,D,E}。
关系模型的最小函数依赖:
简单讲就是:一个函数依赖集F的最小函数依赖集G就是它的一个等价函数集。
求法:
1.F中的每个函数依赖,都分解为右边只有单一属性的与F等价的函数依赖集G。
2.G中的每个函数依赖,检查它的左边属性是否必须,如不必须就删除,并保持与F的闭包等价。
3.G中的每个函数依赖,检查它是否必需,如不必需就删除,并保持与F的闭包等价。
《软件设计师冲刺指南》111页