数据库原理之关系模式的范式

[b]1 第一范式[/b]

1NF:第一范式—— 即关系模式中的属性的值域中每一个值都是不可再分解的值。
如果某个数据库模式都是第一范式的,则称该数据库模式是属于第一范式的数据库模式。
比如有一个关系 study={学号,课程},若有这样几行记录:
[img]http://dl.iteye.com/upload/attachment/0079/1052/20d3e20c-ce32-35e2-bf69-1e34564325de.png[/img]
这时的第三条记录就表示本关系模式不是1NF的,因为课程中的值域还是可以分解的,它包括了两门课程。
如果改为下列形式,则是1NF
[img]http://dl.iteye.com/upload/attachment/0079/1054/051f4c32-0c1d-315e-86ba-caffa1279472.png[/img]


[b]2 第二范式[/b]
如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键, 则称为第二范式模式。

首先温习、理解“非主属性”、“完全函数依赖”、“候选键”这三个名词的含义。
(1)候选键:可以唯一决定关系模式R中某元组值且不含有多余属性的属性集。
(2)非主属性:即非键属性,指关系模式R中不包含在任何建中的属性。
(3)完全函数依赖:设有函数依赖W→A,若存在XW,有X→A成立,那么称W→A是局部依赖,否则就称W→A是完全函数依赖。

在分析是否为第2范式时,应首先确定候选键,然后把关系模式中的非主属性与键的依赖关系进行考察, 是否都为完全函数依赖,如是,则此关系模式为2NF。
  如果数据库模式中每个关系模式都是2NF的,则此数据库模式属于2NF的数据库模式。

比如有一个关系 study={学号,学生姓名,课程,成绩}
[img]http://dl.iteye.com/upload/attachment/0079/1056/e04dee96-21a8-3d4f-a404-81c626d62b89.png[/img]
其中,(学号,课程)为候选键;“成绩”对键的函数依赖为完全函数依赖,而“姓名”只依赖于“学号”, 对键的依赖为部分函数依赖。所以,该关系模式不符合2NF。如果将该 模式分解为以下两个关系:
     student={学号,姓名}
     study={学号,课程,成绩}
则分解后的两个关系模式均为2NF


[b]3 第三范式[/b]
如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R为第三范式模式。
传递依赖的含义: 在关系模式中,如果Y→X,X→A,且XY(X不决定Y)和AX(A不属于X),那么Y→A是传递依赖。 Notice:要求非主属性都不传递依赖于候选键。
上一小节例子中student={学号,姓名},study={学号,课程,成绩}都是3NF


[b]4 BCNF [/b]
这个范式和第三范式有联系,它是3NF的改进形式。
  若关系模式R是第一范式,且[color=darkred]每个属性[/color]都不传递依赖于R的候选键。这种关系模式就是BCNF模式。

[b]四种范式,可以发现它们之间存在如下关系:[/b]
[img]http://dl.iteye.com/upload/attachment/0079/1058/ad9475d7-20b1-3bf7-b4f9-412f1f7df6eb.png[/img]


[b]5 分解成BCNF模式集的算法[/b]
对于任一关系模式,
(1)可找到一个分解达到3NF,且具有无损联接和保持函数依赖性。
(2)对于BCNF分解,则可以保证无损联接但不一定能保证保持函数依赖集。

无损联接分解成BCNF模式集的算法:
(1)置初值ρ={R};
(2)如果ρ中所有关系模式都是BCNF,则转(4);
(3)如果ρ中有一个关系模式S不是BCNF,则S中必能找到一个函数依赖集X→A有X不是S的键,且A不属于X,设S1=XA,S2=S-A,用分解S1,S2代替S,转(2);
(4)分解结束。输出ρ。
Notice:重点在于(3)步,判断哪个关系不是BCNF,并找到X和A。
例:关系模式R<U,F>,其中:U={A,B,C,D,E},F={A→C,C→D,B→C,DE→C,CE→A},将其分解成BCNF并保持无损连接。
解:
① 令ρ={R(U,F)}。
② ρ中不是所有的模式都是BCNF,转入下一步。
③ 分解R:R上的候选关键字为BE(因为所有函数依赖的右边没有BE)。考虑A→C函数依赖不满足BCNF条件(因A不包含候选键BE),将其分解成R1(AC)、R2(ABDE)。
计算R1和R2的最小函数依赖集分别为:F1={A→C},F2={B→D,DE→D,BE→A}。其中B→D是由于R2中没有属性C且B→C,C→D;DE→D是由于R2中没有属性C且DE→C,C→D;BE→A是由于R2中没有属性C且B→C,CE→A。又由于DE→D是蕴含关系,可以去掉,故F2={B→D,BE→A}。

分解R2:R2上的候选关键字为BE。考虑B→D函数依赖不满足BCNF条件,将其分解成R21(BD)、R22(ABE)。计算R21和R22的最小函数依赖集分别为:F21={B→D},F22={BE→A}。

由于R22上的候选关键字为BE,而F22中的所有函数依赖满足BCNF条件。故R可以分解为无损连接性的BCNF如:ρ={R1(AC),R21(BD),R22(ABE)}


[b]6 分解成3NF模式集[/b]
(1)如果R中的某些属性在F的所有依赖的左边和右边都不出现,那么这些属性可以从R中分出去,单独构成一个关系模式。
(2)如果F中有一个依赖X→A有XA=R,则ρ={R},转(4)
(3)对于F中每一个X→A,构成一个关系模式XA,如果F有有X→A1,X→A2...X→An,则可以用模式XA1A2...An代替n个模式XA1,XA2...XAn;
(4)w分解结束,输入ρ。

例1:关系模式R<U,F>,其中U={C,T,H,R,S,G},
F={CS→G,C→T,TH→R,HR→C,HS→R},将其分解成3NF并保持函数依赖。
解:根据算法进行求解
(一)计算F的最小函数依赖集
① 利用分解规则,将所有的函数依赖变成右边都是单个属性的函数依赖。由于F的所有函数依赖的右边都是单个属性,故不用分解。

② 去掉F中多余的函数依赖

A.设CS→G为冗余的函数依赖,则去掉CS→G,得:

F1={C→T,TH→R,HR→C,HS→R}

计算(CS)F1+:

设X(0)=CS

计算X(1):扫描F1中各个函数依赖,找到左部为CS或CS子集的函数依赖,找到一个C→T函数依赖。故有X(1)=X(0)∪T=CST。

计算X(2):扫描F1中的各个函数依赖,找到左部为CST或CST子集的函数依赖,没有找到任何函数依赖。故有X(2)=X(1)。算法终止。

(CS)F1+= CST不包含G,故CS→G不是冗余的函数依赖,不能从F1中去掉。

B.设C→T为冗余的函数依赖,则去掉C→T,得:

F2={CS→G,TH→R,HR→C,HS→R}

计算(C)F2+:

设X(0)=C

计算X(1):扫描F2中的各个函数依赖,没有找到左部为C的函数依赖。故有X(1)=X(0)。算法终止。故C→T不是冗余的函数依赖,不能从F2中去掉。

C.设TH→R为冗余的函数依赖,则去掉TH→R,得:

F3={CS→G,C→T,HR→C,HS→R}

计算(TH)F3+:

设X(0)=TH

计算X(1):扫描F3中的各个函数依赖,没有找到左部为TH或TH子集的函数依赖。故有X(1)=X(0)。算法终止。故TH→R不是冗余的函数依赖,不能从F3中去掉。

D.设HR→C为冗余的函数依赖,则去掉HR→C,得:

F4={CS→G,C→T,TH→R,HS→R}

计算(HR)F4+:

设X(0)=HR

计算X(1):扫描F4中的各个函数依赖,没有找到左部为HR或HR子集的函数依赖。故有X(1)=X(0)。算法终止。故HR→C不是冗余的函数依赖,不能从F4中去掉。

E.设HS→R为冗余的函数依赖,则去掉HS→R,得:

F5={CS→G,C→T,TH→R,HR→C}

计算(HS)F5+:

设X(0)=HS

计算X(1):扫描F5中的各个函数依赖,没有找到左部为HS或HS子集的函数依赖。故有X(1)=X(0)。算法终止。故HS→R不是冗余的函数依赖,不能从F5中去掉。即:F5={CS→G,C→T,TH→R,HR→C,HS→R}

③ 去掉F5中各函数依赖左边多余的属性(只检查左部不是单个属性的函数依赖),没有发现左边有多余属性的函数依赖。

故最小函数依赖集为:F={CS→G,C→T,TH→R,HR→C,HS→R}

(二)由于R中的所有属性均在F中都出现,所以转下一步。

(三)对F按具有相同左部的原则分为:

R1=CSG,R2=CT,R3=THR,R4=HRC,R5=HSR。
所以ρ={R1(CSG),R2(CT),R3(THR),R4(HRC),R5(HSR)}。


转换成3NF的保持无损连接和函数依赖的分解
例2:关系模式R<U,F>,其中:U={C,T,H,R,S,G},
F={CS→G,C→T,TH→R,HR→C,HS→R},分解成3NF并保持无损连接和函数依赖。

解:(1) 根据上例例1,得到3NF并保持函数依赖的分解如下:
σ={ R1(CSG),R2(CT),R3(THR),R4(HRC),R5(HSR) }。

(2) 而HS是原模式的关键字,所以τ={CT,CSG,CHR,HSR,HRT,HS}。由于HS是模式HSR的一个子集,所以消去HS后的分解{CT,CSG,CHR,HSR,HRT}就是具有无损联接性和保持函数依赖性的分解,且其中每一个模式均为3NF。


[b]7 模式设计方法的原则 [/b]
关系模式R相对于函数依赖集F分解成数据库模式ρ={R1,R2...Rk},一般具有下面四项特性:
(1)ρ中每个关系模式Ri上应具有某种范式性质(3NF或BCNF)
(2)无损联接性。
(3)保持函数依赖集。
(4)最小性,即ρ中模式个数应最少且模式中属性总数应最少。

一个好的模式设计方法应符合下列三条原则:
(1)表达性
(2)分离性
(3)最小冗余性

[b]8 多值依赖[/b]
函数依赖有效地表达了属性值之间多对一的联系,是最重要的一种数据依赖;而多值依赖是为了刻划属性值之间一对多的联系.

[b]9 第四范式[/b]
设R是一个关系模式,D是R上的多值依赖集合。如果D中成立非平凡多值依赖X→→Y时,X必是R的超键, 那么称R是第四范式(4NF)。
(定理) 一个关系模式若属于4NF,则必然属于BCNF。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值