关系模式的范式(带例题详细解析)

一些概念
1.码:码是一个或多个属性的集合,是唯一标识实体的属性或属性组
2.超码:一个或多个属性的集合,超码中的属性可以在一个实体集中唯一地标识一个实体
3.候选码:极小的超码集,是可以唯一地标识关系中元组的一个属性或者属性集
4.主码:从候选码中选出一个作为主码
5.主属性:包含在任一候选码中的属性称主属性。简单来说,主属性是候选码所有属性的并集
6.非主属性:不包含在候选码中的属性称为非主属性。 非主属性是相对于主属性来定义的。

一.第一范式

1.定义

如果关系模式R中所有的属性均为原子属性,即每个属性都是不可再分的,则称R属于第一范式,记作R ∈ \in 1NF

1.缺点

既存在完全函数依赖,又存在部分函数依赖和传递函数依赖。会造成大量的数据冗余,存在插入异常、删除异常和更新异常等弊端。

二.第二范式

1.定义

若关系模式R ∈ \in 1NF,且每个非主属性完全依赖于R的主码,则称R属于第二范式。
例如:关系模式SCD(SNO,CNO,Age,Dept,Score),SNO、CNO为主属性,Dept部分依赖于(SNO,CNO),因此它不是第二范式

2.结论
  • 从1NF关系中消除非主属性对主码的部分函数依赖,就可以得到2NF关系
  • 如果R的主码为单属性或者R的全体属性均为主属性,则R ∈ \in 2NF
3.缺点

2NF消除了1NF中非主属性对主码的部分函数依赖,但是存在非主属性对主码的传递函数依赖,因此仍然存在数据冗余、插入异常、删除异常和更新异常的弊端。

三.第三范式

1.定义

如果关系模式R ∈ \in 2NF,且每个非主属性都不传递函数依赖于R的主码,则R属于第三范式

2.保持函数依赖和无损连接的3NF规范化算法

求最小依赖集Fmin的方法:
(1)对F中的任一函数依赖X→Y,如果Y=Y1,Y2,…,Yk(k≥2)多于一个属性,就用分解律,分解为X→Y1,X→Y2,…,X→Yk,替换X→Y,得到一个与F等价的函数依赖集G,G中每个函数依赖的右边均为单属性。
(2)去掉G中各函数依赖左部多余的属性。即一个一个检查G中左边是非单属性的依赖(形如XY—>Y),现在要判断X或者Y是否是多余的,这时候只需要求X+或者Y+来进行判断即可
(3)在G中消除冗余的函数依赖。从第一个函数依赖开始,在G中去掉它(X➡Y),然后在剩下的函数依赖中求X+,看X+是否包含Y,若是则去掉X➡Y

  • 保持函数依赖:
    (1) 求出关系模式R的最小依赖集Fmin
    (2) 如果Fmin中有一函数依赖X→A,且XA=R(即XA包含R中所有的属性),则输出ρ={R},转(5)。
    (3) 如果R中某些属性与Fmin中所有依赖的左部和右部都无关,则将它们构成关系模式,从R中将它们分出去,单独构成一个模式。
    (4) 对于Fmin中的每一个函数依赖X→A,都单独构成一个关系子模式XA。若Fmin中有X→A1,X→A2,…,X→An,则可以用模式XA1A2…An取代n个模式XA1,XA2,…,XAn。
    (5) 停止分解,输出ρ。
  • 无损连接:
    (6) 判定ρ是否具有无损连接性,若是则转(8)
    (7) 令ρ=ρ ∪ \cup {X},其中X是R的候选码
    (8) 输出ρ
3.缺点

3NF只限制了非主属性对主码的依赖关系,没有限制主属性对主码的依赖关系。

四.BC范式

1.定义

如果关系模式R∈1NF,且所有的函数依赖X→Y(Y∉X),决定因素X都包含了R的一个候选码,则称R属于BC范式,记作R∈BCNF。

2.性质

满足BCNF的关系将消除任何属性对主码的部分函数依赖和传递函数依赖。
如果R∈BCNF,则R也是3NF 。
如果R∈3NF,则R不一定是BCNF 。

3.BCNF规范化

(1) 令ρ={R}。
(2) 如果ρ中所有模式都是BCNF,则转(4)。
(3) 如果ρ中有一个关系模式S不是BCNF,则S中必能找到一个函数依赖X→A且X不是S的候选码,且A不属于X,设S1=XA,S2=S-(A-X),用分解{S1,S2}代替S,转(2)。
(4) 分解结束,输出ρ。

例题解析

猜你喜欢

转载自blog.csdn.net/qq_43406565/article/details/107896763