数据库—属性闭包
-
属性闭包
要理解属性闭包先理解以下概念- U属性集合,比如一个表A有这些属性**{a,b,c,d,e}**
- F函数依赖集
这个就是由已知的一些函数依赖组成的集合,比如:
F = {a->b,b->c,c->d,ab->e} //F函数依赖集 - R(U,F)表示一个关系模式
因为一个关系肯定有属性,然后还有主键这些,那含有主键就会有函数依赖 - Armstrong公理
这里不解释了,因为这就是集合的包含关系而已,一个大的集合包着小的集合,那不就说明大的决定小的了么,然后就是一系列的集合之间的关系与运算,然后就有了这个公理的出现(提出这个公理的人当真厉害,虽说晦涩难懂,但是如果学过集合的过来看也是能够看懂的)
下面给出我们数据库老师的PPT截图
-
解释属性闭包
属性的闭包就是当一组或者一个属性,然后这属性中能够通过已知的F函数依赖集通过公理系统(这系统就是用集合是否包含关系)推理出来的属性,这些属性必然是能够通过给的一组属性然后能够知道的另一组属性,这就是推理出来的属性
大白话意思就是用给出的属性集(属性集在U 中),然后给出F函数依赖集,然后开始用已知的属性集推理出比这个属性集中属性小的属性。然后这些推理出来的小属性再加上原本给出的属性组成的就是闭包(是指原给出的属性组的闭包)
- 推理算法
这边给出我们数据库老师的PPT截图
其实这我学习的时候认为还不是很通俗易懂,下面这张截图我就悟到了。
- 在这张图中其实已经很明显了,就是给出了一组属性AE,然后找F集合中的决定性的主属性,也就是→左边的属性,是否和有给出的AE属性集中的其中一个,有就代表能够推出一个了,就把有的那个F中的函数依赖右边的作为我们的闭包集中的一员,比如现在A中在F集合的函数依赖的每个箭头左边有看到一个是A的就是A->B,然后就把B放进AE集合中,变成了ABE。然后后面回到算法循环第一步,这时候继续刚刚的操作,如果有的话就放进属性集中。
- 注意事项:这里给出的属性只能是包含于函数依赖主属性而不是函数依赖主属性大于给出的属性,可以是给出的组合属性等于主属性就是不能主属性范围大于给出的属性。
比如:我给出B,求闭包,但是下面的只有BC->E,这时候是不可以选择的,因为BC集合大于B了,说白了就是集合关系的推理,只有一个B怎么能够说明你这个B的集合能够包含E或者说退出E,显然是不可以的,不然人家也不会写BC->E,因此只有大于主属性的才能将该函数依赖的非主属性也就是右边的属性加入自己的属性集中。
比如:给出ABC,求ABC的属性闭包,这时候就可以用BC->E了,因为你的ABC就已经包含了BC,所以这时候是可以推理出E的(其实就是可以说明ABC是包含了E的意思)
本文来自博客园,作者:竹等寒,转载请注明原文链接。