数据库8 关系范式

基本的定理

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候选码,则是无损分解

如果原来所有依赖都在某一个分解后的集合上成立,说明依赖保持。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值