数据库学习笔记_10_函数依赖详解——函数依赖公理及其推得规律和属性闭包

首先引入armstrong‘s axioms,

反射律(reflexivity rule)对于任何为LA(a)子集的LA(b)来说,LA(a)->LA(b)恒成立

增加律(argumentation rule)若LA(a)->LA(b)成立,则LA(a)LA(y)->LA(b)LA(y)成立

转移律(transitivity rule)若有LA(a)->LA(b),LA(b)->LA(c),则有LA(a)->LA(c)

由以上规则我们可以推导出一下规则

合并律(union rule)若有LA(a)->LA(b),LA(a)->LA(c),则有LA(a)->LA(b)LA(c);

proof:根据公理,可化为LA(a)->LA(b)LA(a),LA(a)LA(b)->LA(c)LA(b),转移率可得结果。

拆分律(decomposition rule)若有LA(a)->LA(b)LA(c),则LA(a)->LA(b),LA(a)->LA(c)成立

proof:根据公理,LA(b)LA(c)->LA(b),LA(b)LA(c)->LA(c)…接下来你们懂的。

伪传递律,if LA(a)->LA(b),and LA(bc)->LA(d),则LA(a)LA(c)->LA(d);

求依赖闭包比较蠢得办法是列举一个函数依赖集中所有的二元组看是否能适用任何以上操作,若有则将结果加入该函数依赖集留待下一轮运算,直到该运算无法算出任何结果为止。

下面介绍一下属性闭包:

对于一个属性集LA(a),在R中存在F,是的LA(a)中的属性通过F可以得出能被LA(a)支配的属性集合LA(a)+ ,其计算方法为,

set result=LA(a);

while(result do not change)

for(all the functional dependency f LA(x)->LA(y))

if(x为result子集)  result+=y;

对于属性闭包的应用:

为了测定a是否为超键,可以求出a+若其为R,则说明a为超键,否则就不是。

可以检验函数依赖是否存在,例如我想检查LA(a)->LA(b),则求出LA(a)+ 如果LA(b)为LA(a)+子集,则说明其存在,否则则不存在。

我们也可以通过求得每一个存在于R里的属性集LA(a)的LA(a)+然后把所有为LA(a)+ 的子集的集合S组合成为LA(a)->S加入到F+里,这是一个求得函数依赖闭包的替换方法。

时间: 2024-08-07 22:57:55

数据库学习笔记_10_函数依赖详解——函数依赖公理及其推得规律和属性闭包的相关文章

IOS开发学习笔记(1)-----UILabel 详解

1. [代码][C/C++]代码     //创建uilabelUILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 280, 80)];//设置背景色label1.backgroundColor = [UIColor grayColor];//设置taglabel1.tag = 91;//设置标签文本label1.text = @"Hello world!";//设置标签文本字体和字体大小label1.

IOS开发学习笔记(2)-----UIButton 详解

1. [代码][C/C++]代码     //这里创建一个圆角矩形的按钮    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];    //    能够定义的button类型有以下6种,//    typedef enum {//        UIButtonTypeCustom = 0,          自定义风格//        UIButtonTypeRoundedRect,        

CoAP学习笔记——CoAP格式详解

0 前言 CoAP是受限制的应用协议(Constrained Application Protocol)的代名词.在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的.但是对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求.为了让小设备可以接入互联网,CoAP协议被设计出来.CoAP是一种应用层协议,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上.CoAP协议非常小巧,最小的数据包仅为4字节. 更多博文请参考--[物联网学习笔记--索引博文] 1 Co

Redis学习笔记4-Redis配置详解

原文:  http://blog.csdn.net/mashangyou/article/details/24555191 在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redis学习笔记中Redis的按照方式按照后,Redis的配置文件是/etc/redis/6379.conf.下面是Redis2.8.9的配置文件各项的中文解释. 1 #daemon

Struts2学习笔记二 配置详解

Struts2执行流程 1.简单执行流程,如下所示: 在浏览器输入请求地址,首先会被过滤器处理,然后查找主配置文件,然后根据地址栏中输入的/hello去每个package中查找为/hello的namespace,然后在包下寻找名为HelloAction的action,反射创建控制器HelloAction对象,调用method指定的方法hello,拿到返回值“success”,去result的配置节找success对应的页面(hello.js),呈现给用户. 2.Struts的架构,具体参考这里

Struts2学习笔记(二)——配置详解

1.Struts2配置文件加载顺序: default.properties(默认常量配置) struts-default.xml(默认配置文件,主要配置bean和拦截器) struts-plugin.xml(配置插件) struts.xml(配置action或者常量等) struts.properties(常量配置) web.xml(配置JavaEE,如:监听器和过滤器) 2.Struts2配置文件详解 1)default.properties default.properties是Struts

shell脚本交互:expect学习笔记及实例详解

最近项目需求,需要写一些shell脚本交互,管道不够用时,expect可以很好的实现脚本之间交互,搜索资料,发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile 1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,Li

Java学习笔记--集合类型详解

http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526822.html http://blog.csdn.net/liulin_good/article/details/6213815 http://www.cnblogs.com/meng72ndsc/archive/2010/12/23/1914477.html http://www.cnblogs.com/ningvsban/archive/2013/05/06/3062535.ht

OC学习笔记之属性详解和易错点

属性的概念在OC1.0中就存在,格式是定义实例变量,然后定义setter和getter方法,用点操作符操作属性 举例,类的接口部分 1 @interface Father : NSObject 2 { 3 NSInteger _item; 4 } 5 #pragma mark - 属性 6 -(void)setItem:(NSInteger)item; 7 -(NSInteger)item; 8 9 -(void)setAAA:(NSInteger)aaa; 10 -(NSInteger)AAA