大家好,欢迎来到IT知识分享网。
基本的定理
1.自反率:B属于A=> A-> B
2.分解率:A->BC => A->B且A->C
3.传递率:A->B, B->C => A->C
4.伪传递率:A->B,CB->D => AC->D (如果A->B相当于把B代替为A)
5.增补率:A->B => AC->BC
正则覆盖(最小函数依赖)
1.将左边一样的合并,例如A->B, A->C, A->BC
2.对于函数依赖a->b
令F’ 将a->b替换为(a-A)->b,如果F->F’说明A是无关项
令F’将a->b替换为a->(b-B),如果F’->F,说明B是无关项
记忆方法:F和被去掉的属性在箭头的同一侧。
对于a->b,去掉A,检验F->{a-A->b}
对于a->b,去掉B,检验(F-{a->b}+{a->b-B}) -> (a->b)
注意点:
1.尽量先化简右边的
2.不要减少条件,比如A->C, C->B说明A->B,但是不能用A->B代替这个两个
3.不要搞反顺序,A->B, A->C=>A->BC是正确的,但是A->BC=>A->B, A->C是不对的。
候选码
所有属性完全依赖于它。注意,一定是完全依赖,就是少了任何一个属性构成不了依赖。主码和候选码简称码。
分为四类元素:L是只出现在左边的,R是只出现在右边的,LR是左右都出现的,N是左右都不出现的。
1.首先看所有的L,N元素集合能否推出所有属性,可以的话就是唯一的候选码
2.如果不可以,就从LR中选一个出来测试,直到把LR中每个都测了一遍。
然后再选两个出来测试,。。。直到全部选出来测试,注意如果一部分在,不用试验含着部分的,因为是完全依赖。
3.注意有些属性没有出现在函数依赖里面,此时要看题目R(…,…,…)
或者直接在未出现在右边的属性里面找(在题目的关系的定义里面把出现在左边的划掉,然后看选几个看能否推出所有属性)
范式
完全依赖:即左边少一个属性就推不出右边,A->B, AC->B,就是不完全依赖。
部分依赖:左边少一个属性也能推出右边,比如AC->B是部分依赖
主属性:出现在码中的属性。
传递依赖:A->C, C->B, 则A->B是传递依赖
1NF:无重复的列(数据库表中的每一列都是不可分割的基本数据项)
2NF:满足1NF且非主属性完全依赖码。
3NF:满足2NF且非主属性不传递依赖于码。
BCNF:满足3范式,并且主属性之间没有任何依赖关系
3NF分解
保持函数依赖的3NF分解
1.先求出正则覆盖
2.将N类单独变为一个子集
3.每个函数依赖a->b都变成一个子集{a,b}
如果想要无损连接,需要增加一个子集,里面是任意一个候选码。
BCNF分解
1.化简无关属性
2.求出候选码
3.对于所有a->b, 如果a不是超码,那么把R分解为a, b和R-{a,b}+a
4.对于剩下的属性集,看其上面的依赖是否有不满足的,如果有执行2,3
注意对于每一步,都必须重新计算剩下属性集里面的候选码
依赖保持和无损分解
如果把A分解为B, C,B和C共同属性包含A候选码,则是无损分解
如果原来所有依赖都在某一个分解后的集合上成立,说明依赖保持。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/158126.html