数据库基础(5)1NF,2NF,3NF,BCNF 四大范式的定义和判别

范式很重要呀,我们关系数据库的设计都要满足范式关系
这里总结一下1NF,2NF,3NF和BCNF

1.第一范式(1NF)

定义

(1NF, Normal Form) 如果一个关系模式R中的每个属性A的域值都是原子的,即属性值是不可再分的,则关系模式R属于第一范式,简记为R ∈ 1NF。若数据库模式R中的每个关系模式都是1NF,数据库模式 R∈1NF。

这个非常好理解,基本上,只要题目给了,他就是一个满足第一范式的关系模式


2.第二范式(2NF)

定义

第二范式

2NF指的就是,我们的关系模式中的所有非主属性完全依赖于每个键。什么意思呢,这里呢最重要的是理解什么是非主属性,什么是主属性,什么是

推荐看另外一个博客的总结,理解一下键的含义: https://blog.csdn.net/fjxcsdn/article/details/76549751
看我之前写的博客理解完全依赖和部分依赖的含义: 数据库基础(3)函数依赖-平凡依赖,完全依赖,部分依赖,传递依赖
那非主属性和主属性怎么理解呢,举个例子:关系模式R={A,B,C,D} ,已知R的候选键是AD , 那么AD中的A和D就是主属性,而B和C就是非主属性。包含在候选键里的属性就是主属性!

现在理解键和依赖关系的含义之后,我们就可以好好看看2NF是个什么了
举例子1:
已知,R={A,B,C},函数依赖集为 F ={ B →C, AC →B } ,判断关系模式是不是2NF
那么我们首先看这个R关系模式里面的键是谁
利用数据库基础(4)中我们学习的属性闭包算法求出R的候选键为:AC
所以第二步 就是看是否有非主属性部分依赖于主属性AC (我们这里的非主属性就是B)
很明显并没有B部分依赖于A或者C ,所以R是2NF
举例子2
已知,R={A,B,C,D},函数依赖集为F ={ A →C,AD →B },判断关系模式是不是2NF
和第一个例子一样,我们首先看这个R中的键是谁
用属性闭包算法,求出R的候选键为:AD (AD+ = ABCD) ,所以C和B都是非主属性,A和D是主属性
所以,很明显,我们发现 AD中的A竟然可以单独决定C(A->C),所以C部分依赖于AC ,存在非主属性部分依赖于主属性,R不是2NF

3.第三范式(3NF)

定义

3NF

第三范式的意思就是,R中没有非主属性传递依赖于R的键,R才是3NF
这里也隐含了一个条件,那就是,如果是R中的主属性传递依赖于R的键,那么R也是满足3NF的

注意区分主属性传递依赖和非主属性传递依赖喔

举例子1
已知R(A,B,C), 其函数依赖集为 F ={ B →C, AC →B };该关系模式是否第3范式
我们来判断判断,首先第一步,找键!我们发现AC是候选键(AC+=ABC,通过属性闭包算法求的候选键)
同时由于AC->B , B->C ,所以C传递依赖于AC ,那么R是不是3NF呢?
R 当然是3NF啦,因为R的候选键是AC,所以C是主属性,因此 这里是主属性C传递依赖于键AC,R是3NF
注意!只有当非主属性传递依赖于R的时候,R才不是3NF
举例子2
R(A,B,C,D), 其函数依赖集为 F ={AB →C, C →D };该关系模式是否第3范式
首先第一步,还是找键! 发现AB是候选键, 但是由于AB -> C , C -> D ,所以D传递依赖于AB
那么R是3NF吗?
R当然不是3NF啦,因为D是非主属性,所以这里是非主属性D传递依赖于主属性AB,因此就不满足3NF的定义啦

4.Boyce-Codd范式(BCNF)

定义

BCNF

BCNF最高级了,它指的是R中没有任何属性传递依赖于R中的任何一个键。所以联想到上面我们3NF中的举例1,它虽然满足3NF,但是由于有主属性传递依赖于键,它就不是BCNF。
看例题,判断是几范式

例题

很明显,两个都是BCNF,因为都没有任何属性存在传递依赖

最后说一下,满足BCNF的关系模式,肯定也满足3NF;同理,满足3NF的关系模式,肯定也满足2NF

  • 59
    点赞
  • 267
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值