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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Candle_light/article/details/84503046

范式很重要呀,我们关系数据库的设计都要满足范式关系
这里总结一下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

猜你喜欢

转载自blog.csdn.net/Candle_light/article/details/84503046