第四章 数据库结构设计
知识要点:
(1)函数依赖及Armstrong公理系统
(2)为什么要对模式进行分解,如何分解
(3)如何判断关系模式达到几范式
(4)如何求属性的闭包及如何求最小函数依赖集
(5)判断分解后的关系模式是不是无损连接或保持函数依赖
(6)判断分解后的关系模式既无损连接又保持函数依赖
4.1模式设计
设计关系数据库模式时,特别是从面向对象的ODL设计或从E/R设计直接向关系数据库模式转换时,很容易出现的问题是冗余性,即一个事实在多个元组中重复。
造成这种冗余的最常见的原因是,企图把一个对象的单值和多值特性包含在一个关系中。
当我们企图把太多的信息存放在一个关系时,就会出现数据冗余和更新异常等问题。主要表现如下:
1. 数据冗余。
2. 修改异常。
3. 删除异常。
4. 插入异常。
关系的键码函数决定该关系的所有其它属性。由于键码能唯一确定一个元组,所以,也可以说关系的键码函数决定该关系的所有属性。一个关系中的所有属性都函数依赖于该关系的键码。不同的属性在关系模式中所处的地位和扮演的角色是不同的。把键码所在的属性称为主属性,而把键码属性以外的属性称为非主属性。
不同的属性对键码函数依赖的性质和程度是有差别的。有的属于直接依赖,有的属于间接依赖(通常称为传递依赖)。
当键码由多个属性组成时,有的属性函数依赖于整个键码属性集,而有的属性只函数依赖于键码属性集中的一部分属性。
4.2函数依赖
1.函数依赖及相关概念
定义 设R(U)是属性集U上的关系模式,X,Y是U的子集。若对R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作:X Y。
f |
例 给定一个学生选课关系SC(Sno,Cno,G),我们可以得到 F={(Sno,Cno) G},对(Sno,Cno)中的任何一个真子集Sno或Cno都不能决定G,所以,G完全依赖于Sno,Cno。
p |
(3)传递依赖:在R(U)中,如果X Y,(Y X),Y X,Y Z
f |
(4)码:设K为R(U,F)中的属性的组合,若K U,则K为R的候选码,若有多个候选码,选一个作为主码。
注: 候选码也称候选关键字。
(5) 主属性和非主属性:包含在任何一个候选码中的属性叫做主属性,否则叫做非主属性。
(6) 外码:若R(U)中的属性或属性组X非R的码,但是另一关系的码,则称X为外码。
范式
(7)多值依赖
定义 若关系模式R(U)中,X、Y、Z是U的子集,并且Z=U—X—Y。当且仅当对R(U)的任何一个关系r,给定一对(x,z) 值,有一组Y的值,这组值仅仅决定于x值而与z值无关,则称“Y 多值依赖于X”或“X多值决定Y”成立。记为:X Y。
例:判断以下函数依赖的对错
1、 sno→sname, cno→cname,(sno,cno)→grade
2、 sname→sno, Sno→cno, sno→Cname
补充:属性间的联系决定函数依赖关系
设X、Y均是U的子集
1、 X和Y间联系是1:1,则X→Y,Y→X。
2、 X和Y间联系是M:1, 则X→Y。
3、 X和Y间联系是M:N,则X、Y间不存在函数依赖。
例:STUDENTS(SNO,SNAME,SSEX,SAGE,SDEPT,SPLACE)
X Y
SNO → (SNAME,SSEX,SAGE)
SNO → SPLACE
SPLACE → SDEPT
SSEX → SDEPT
例:设关系X,Y,W为关系R中的三个属性组,属性关系如下图所示,问X→Y, X→W, W→Y
2.函数依赖的公理系统
Armstrong公理系统:设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有如下推理规则:
(1)A1自反律:若Y X U,则X Y为F所蕴涵;
(2)A2增广律:若X Y为F所蕴涵,且Z U,则XZ YZ为F所蕴涵;
(3)A3传递律:若X Y,Y Z为F所蕴涵,则X Z为F所蕴涵。
根据上述三条推理规则又可推出下述三条推理规则:
(1)合并规则:若X Y,X Z,则X YZ为F所蕴涵
(2)伪传递率:若X Y,WY Z,则XW Z为F所蕴涵
(3)分解规则:若X Yz,Z Y,则X Z为F所蕴涵。
引理:X A:A1…A2… A1成立的充分必要的条件是X Ai成立
(I=1,2,3…,k)
F |
函数依赖的闭包
定义 关系模式R(U,F)中为F所逻辑蕴含的函数依赖的全体称为F的闭包,记为:F+。
X + |
F |
X + |
F |
X + |
F |
X + |
F |
X + |
F |
输入 X,F
X + |
F |
步骤
(1)令X(0)=X,i=0
(2)求B,B={A |( v)( w)}(V W F V X(i) A W)}
(3)X(i+1)=B X(i)
(4)判断X(i+1)= X(i) 吗
(5)若相等,或X(i)=U,则X(i)为属性集X关于函数依赖集F的闭包。且算法终止
(6) 不相等,则i=i+1,返回第二步
例1 已知关系模式R(U,F),U={A,B,C,D,E);
F={A B,D C,BC E,AC B}
(AD)+ |
F |
(AE)+ |
F |
(AE)+ |
F |
计算X(1): 逐一扫描F中的各个函数依赖,找到左部为A、E或AE的函数依赖,得到一个:A B。故有X(1)=AE B。
计算X(2):逐一扫描F中的各个函数依赖,找到左部为ABE或ABE子集的函数依赖,因为找不到这样的函数依赖,所以,X(1)=X(2)。算法终止,
(AE)+ |
F |
求(AD);,由上述算法,设XtO’=AD
计算X‘”:逐一扫描F中的各个函数依赖,找到左部为A、D或AD的函数依赖,得到两个:A+B,D--~C函数依赖。故有
XCl’:ADUBC。
计算X‘n:逐一扫描F中的各个函数依赖,找到左部为ADBC或ADBC子集的函数依赖,得到两个:BC—E,AC—B函数依赖。故有X‘2,:ABCDUE。所以,X(2’:ABCDE:U,算法终止, (AD)吉:ABCDE。
4.最小函数依赖集
等价和覆盖
定义 一个关系模式R(U,F)上的两个依赖集F和G,如果
F’=G’,则称F和G是等价的,记做F三G。
若F三G,则称G是F的一个覆盖,反之亦然。两个等价的函
数依赖集在表达能力上是完全相同的。
定义 如果函数依赖集F满足下列条件,则称F为最小函数
依赖集或最小覆盖。; (1)F中的任何一个函数依赖的右部仅含有一个属性;” (2)F中不存在这样一个函数依赖X—A,使得F与F一{X— A}等价;扩 (3)F中不存在这样一个函数依赖X—A,X有真子集Z使得 F一{X—A}U{Z+A}与F等价。;· 3.计算最小函数依赖集的算法。 算法 计算最小函数依赖集。
输入 一个函数依赖集
输出 F的一个等价的最小函数依赖集G。
步骤
(1)用分解的规则,使F中的任何一个函数依赖的右部仅含有一个属性; (2)去掉多余的函数依赖:从第一个函数依赖X+Y开始将其从F中去掉,然在剩下的函数依赖中求X的闭包X’,看X’是否包含Y,若是,则去掉X—Y;否则不能去掉,依次做下去。直到拽不到冗余的函数依赖;
(3)去掉各依赖左部多余的属性。一个一个地检查函数依赖宏部非单个属性的依赖。例如XY+A,若要判Y为多余的,则以醑+A代替XY+A是否等价?若AE(X)’,则Y是多余属性,可以去掉。
例3 已知关系模式R(U,F),U={A,B,C};
F={A+B,B—A,B+C,A+C,C—A}
求最小函数依赖集。
分析 此题可以有两种不同的答案,下面分别叙述如下。
答案1 设B—A是冗余的,将其从F中去掉,看能否根据,Armstrong公理系统的推理规则导出。
因 B--~C,C—A (已知)
故 B—A (传递律)
故B-,-A是冗余的,将其从F中去掉,得n为
F1:{A+B,B--~C,A+C,C+A}。
又设A—C为冗余,将其从F1中去掉 ·
因 A—B,B--~C (已知)· 故 A—C (传递律)
故A+C是冗余的,将其从n中去掉,得Fm为:… FM,={A—B,B+C,G+A}。’ 因为在FM,中的其它函数依赖是非冗余的,所以,FMl为最小函数依赖集。
答案2 设B—C是冗余的,将其从F中去掉,看能否根据、Armstrong公理系统的推理规则导出。: 因 B—A,A+C (已知)
故 B—C (传递律)
故B+C是冗余的,将其从F中去掉,得FM2为
FM2={A—B,B+C,A—C,C—A}。:i 因为在Fm中的其它函数依赖是非冗余的,所以,FM2为最小
函数依赖集。
从上分析我们可以得到两个最小函数依赖集Fh4,和Fht。,因此,F的最小函数依赖集不是惟一的。
4.3 关系规范化
1.主码、主属性、非主属性、全码、外码定义
定义5.4 设K为R〈U,F〉中的属性或属性组合,若K → U则K为R的候选码。
主码:若候选码多于一个,则选定其中的一个为主码(Primary key)
主属性:包含在任何一个候选码中的属性,叫做主属性(Prime attribute)
非主属性:不包含在任何码中的属性称为非主属性(Nonprime attribute)
最简单的情况:单个属性是码。
最极端的情况:整个属性组是码,称为全码(All-key)
例:关系模式R(P,W,A),属性P表示演奏者,W表示作品,A表示听众。假设一个演奏者可以演奏多个作品,某一作品可被多个演奏者演奏。听众也可以欣赏不同演奏者的不同作品,这个关系模式的码为(P,W,A),即All-key。
定义5.5 关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称 X是R的外部码(Foreign key)也称外码。
主码与外部码提供了一个表示关系间联系的手段。
2.关系范式
关系模式满足的确定约束条件称为范式,根据满足约束条件的级别不同,范式由低到高分为1NF,2NF,3NF,BCNF,4NF,5NF等。不同的级别范式性质不同。满足最低要求的叫第一范式,简称lNF。在第一范式中满足进一步要求的为第二范式,其余以此类推。
R为第几范式就可以写成R∈xNF。
对于各种范式之间的联系有5NF 4NF BCNF 3NF 2NF lNF成立。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
一、第一范式(1NF)
关系模式的的每一个属性都是不可再分的,则该关系模式称为第一范式。
例1:
例2:工资(工号,姓名,工资(基本工资,年绩津贴,煤电补贴))
△ 不满足1NF的关系称为非规范化关系。
△ 关系数据模型不能存储上两个例子(非规范化关系)
在关系数据库中不允许非规范化关系的存在。
二、第二范式 若R∈lNF,且每一个非主属性完全函数依赖于码,则R∈2NF。
例:关系模式 S-L-C(SNO,SDEPT,SLOC,CNO,G) 中SLOC为学生的住处,并且每个系的学生住在同一个地方。
这里主码为(SNO,CNO)。函数依赖有:
(SNO,CNO) →G )
SNO→SDEPT (SNO,CNO) SDEPT
SNO→SLOC (SNO,CNO) SLOC,
一个关系模式R不属于2NF,就会产生插入异常(如没有选课的学生记录插不进去)、删除异常(删除选课记录会将学生信息删除)、冗余度大(如系、地址都重复存放)。
分析上面的例子,可以发现问题在于有两种非主属性。一种如G,它对码是完全函数依赖。另一种如SDEPT、SLOC对码不是完全函数依赖。解决的办法是用投影分解把关系模式S-L-C分解为两个关系模式。
SC(SNO,CNO,G)
S-L(SNO,SDEPT,SLOC)
关系模式SC的码为(SNO,CNO), 关系模式S-L的码为SNO,这样就使得非主属性对码都是完全函数依赖
三、第三范式
关系模式R〈U,F〉中若不存在这样的码X,属性组Y及非主属性Z(ZY)使得X→Y,(Y X)Y→Z,成立,即如果R的任何一个非主属性都不传递依赖于它的任何一个侯选关键字,则称R〈U,F〉∈3NF。
可以证明,若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
在关系模式SC没有传递依赖,
关系模式S-L存在非主属性对码传递依赖。在S-L中,由SNO→SDEPT,(SDEPT SNO),SDEPT→SLOC,可得SNO SLOC。因此SC∈3NF,而S-L 3NF。
一个关系模式R若不是3NF,就会产生插入异常、删除异常、冗余度大等问题。
解决的办法同样是将S-L分解为:
S-D(SNO,SDEPT)
D-L(SDEPT,SLOC)
分解后的关系模式S-D与D-L中不再存在传递依赖。
四、BCNF范式
关系模式R〈U,F〉∈1NF。若X→Y且YËX时X必含有码,则R〈U,F> ∈BCNF。也就是说,关系模式R〈U,F〉中,若每一个决定因素都包含码,则R〈U,F> ∈BCNF。
由BCNF的定义可以得到以下结论:
下面用几个例子说明属于3NF的关系模式有的属于BCNF,但有的不属于BCNF。
例l 关系模式SJP(S,J,P)中,S是学生,J表示课程,P表示名次。每一个学生选修每门课程的成绩有一定的名次,每门课程中每一名次只有一个学生(即没有并列名次)。由语义可得到下面的函数依赖:
(S,J)→P ,(J,P)→S
所以(S,J)与(J,P)都可以作为候选码。这两个码各由两个属性组成,而且它们是相交的。这个关系模式中显然没有属性对码传递依赖或部分依赖。所以SJP∈3NF,而且除(S,J)与(J,P)以外没有其它决定因素,所以SJP∈BCNF。
例2 关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。由语义可得到如下的函数依赖。
(S,J)→T , (S,T) →J
是第三范式,但是存在 T→J,而T不是码,所以不是了BC范式。
4.4 关系模式的分解
1. 模式分解特点:
关系模式的规范化过程是通过对关系模式的分解来实现的。把低一级的关系模式分解为若干个高一级的关系模式。这种分解不是唯一的。
一个低级范式的关系模式,通过分解(投影)方法可转换成多个高一级范式的关系模式的集合,这种过程称为规范化。
规范化的方式是进行模式分解,模式分解的原则是与原模式等价,模式分解的标准是:
n 模式分解具有无损连接性
n 模式分解能够保持函数依赖
举例:关系规范化过程
第一范式(1NF):如果一关系模式,它的每一个分量是不可分的数据项,即其域为简单域,则此关系模式为第一范式。
例:将学生简历及选课等数据设计成一个关系模式STUDENT, 其表示为:
STUDENT(SNO,SNAME,AGE,SEX,CLASS,DEPTNO,DEPTNAME,CNO,CNAME,SCORE,CREDIT)
设该关系模式满足下列函数依赖:
F={SNO®SNAME, SNO®AGE, SNO®SEX, SNO®CLASS,CLASS®DEPTNO, DEPTNO®DEPTNAME, CNO®CNAME,SNO.CNO®SCORE, CNO®CREDIT}
由于该关系模式的每一属性对应的域为简单域,即其域值不可再分,符合第一范式定义,所以STUDENT关系模式为第一范式。
第二范式(2NF):若关系模式RÎ1NF,且每个非主属性完全函数依赖于码,则称RÎ2NF。
分析一下关系模式STUDENT, 它是不是2NF?
属性组(SNO,CNO)为关系STUDENT的码。
例如:SNAME非主属性,根据码的特性具有:SNO.CNO¾ ®SNAME
根据STUDENT关系模式已知函数依赖集,下列函数依赖成立:SNO¾ ®SNAME
所以SNO.CNO¾ ®SNAME, SNAME对码是部分函数依赖。同样方法可得到除SCORE属性外,其它非主属性对码也都是部分函数依赖。所以STUDENT关系模式不是2NF。
当关系模式R是1NF而不是2NF的模式时,对应的关系有何问题呢?我们分析STUDENT关系模式,会有下列问题:
-
- 存在大量的冗余数据:当一个学生在学习多门课程后,他的人事信息重复出现多次。
- 根据关系模型完整性规则,主码属性值不能取空值。那么新生刚入学,还未选修课程时,该元组就不能插入该关系中。这种情况称为插入异常。
- 同样还有删除异常,则会丢失信息
解决上述问题方法是将大的模式分解成多个小的模式,分解后的模式可满足更高级的范式的要求。
例如:将STUDENT中对码完全依赖的属性和部分函数依赖的属性分别组成关系。即将STUDENT关系模式分解成三个关系模式:
STUDENT1 (SNO,SNAME,AGE,SEX,CLASS,DEPTNO,DEPTNAME)
COURSE(CNO,CNAME,CREDIT)
SC(SNO,CNO,SCORE)
在分解后的每一个关系模式中,非主属性对码是完全函数依赖,所以上述三个关系模式均为2NF。
第三范式(3NF):若关系模式R(U, F)为第一范式,不存在非主属性对码的传递依赖,则称R(U, F)为3NF。其中U为关系模式的属性全集,F为关系模式所满足的函数依赖集。
分析关系模式STUDENT1,存在着下列函数依赖:SNO®CLASS,CLASS®SNO,CLASS®DEPTNO。所以关系模式STUDENT1属性间存在传递依赖,它不是3NF。
如果关系模式R为2NF而不是3NF。即存在数据冗余,插入和删除会出现异常。
a) 例如在STUDENT1关系中,对每一学生其DEPTNO,DEPTNAME将重复出现。
b) 当新成立一个系后,在尚未有学生时,该系的信息插入不到该关系中。
要消除上述问题,必须对模式分解,消除传递依赖。将STUDENT1分解为下列模式:
STUDENT2(SNO,SNAME,AGE,SEX,CLASS)
CLASS1(CLASS,DEPTNO,DEPTNAME)
分解后的关系模式STUDENT2不再存在传递依赖,所以它是3NF。但CLASS1关系模式虽只有三个属性,但还存在传递依赖。
CLASS®DEPTNO, DEPTNO®CLASS, DEPTNO®DEPTNAME
DEPTNAME对CLASS为传递依赖。所以对CLASS1还要进行分解,分解为下列模式:
CLASS2(CLASS,DEPTNO)
DEPARTMENT(DEPTNO,DEPTNAME)
关系模式STUDENT经过上述分解处理,分解成下列关系模式:
STUDENT2(SNO,SNAME,AGE,SEX,CLASS)
CLASS2(CLASS,DEPTNO)
DEPARTMENT(DEPTNO,DEPTNAME)
COURSE(CNO,CNAME,CREDIT)
SC(SNO,CNO,SCORE)
BCNF范式:BCNF是修正的第三范式。
设关系模式R(U,F)Î1NF,若X®Y,而Y不包含在X中,那么X必含有码,则R(U, F)为BCNF。换句话说,每个决定因素都包含有码,则关系模式为BCNF。
3NF关系模式和BCNF的关系模式之间有下列关系:
如果RÎBCNF,则RÎ3NF,反之不成立
BCNF的定义消除了3NF模式中可能存在主属性对码的部分函数依赖和传递函数依赖。
模式分解
2.模式分解原则:
分解
定义 (分解)关系模式R(U,F)的一个分解是指,P‘{Rl
(Ul,P1),R2(U2,F2),…R。(U。,F。)},其中:
n
U=UU,并且没有U(U,1≤i,j≤n,E是F在U上的投影。
其中Fi={X—Y[X—YEF’八XY三Ui}
对一个给定的模式进行分解,使得分解后的模式是否与原来的模式等价有三种情况:
(1)分解具有无损连接性;
(2)分解要保持函数依赖;
(3)分解既要无损连接性;又要保持函数依赖。
无损连接
定义 (无损连接)P’{R,(U1,F:),R:(U:,F2),…Rh(Uk, Fk)}是关系模式R(U,F)的一个分解,若对R(U,F)的任何一个关系r均有r=mP(r)成立,则成分解P具有无损连接性(简称无损分解)。
k
其中,mP(r):冈丌R:(r)。
定理 关系模式R(U,F)的一个分解,P’{R1(U:,F1),R:
(U2,F:)}具有无损连接的充分必要的条件是:
Ul门U2一Ul—U2EF’或
Ul门U2+U2一UlEF’
保持函数依赖
,其步骤如下:; (1)对R(U,F)的函数依赖集F进行极小化处理(处理后的:结果仍记为F); i
(2)找出不在F中出现的属性,将这样的属性构成一个关系
模式。把这些属性从U中去掉,剩余的属性仍记为U;
(3)若有X—A正F,且XA=U,则P’{R>,算法终止;
(4)否则,对F按具有相同左部的原则分组(假定分为k组),
每一组函数依赖Fi所涉及的全部属性形成一个属性集U。若U
三U(ire㈠就去掉U。由于经过了步骤(2),故
{R,(Ul,F1),R2(U2,F2),…Rk(Uk,
Fk)}构成R(U,F)的一个保持函数依赖的分解。并且,每个Ri
(Ui,E)均属于3NF且保持函数依赖。
例4 关系模式R(U,F),其中U={C,T,H,I,S,G),F={
CS—G,C+T,TH—I,HI—C,HS—I>,将其分解成3NF并保持
函数依赖。
解 根据算法2求解如下:
(1)F已为最小函数依赖集;
(2)R中的所有属性均在F中都出现,所以转(3);
(3)对F按具有相同左部的原则分为:R1=CSG,R2;CT, R3’::THI,R4:::HIC,R5:::HSR。
所以P‘{R1(CSG),R2(CT),R3(THl),R4(HIC),R5 (HSR)}
算法3 将一个关系模式转换成3NF,使它既具有无损连接又保持函数依赖的分解。
输入 关系模式R和R的最小函数依赖集F。
输出 R(U,F)的一个分解P={R1(U,,F1),R:(U:,F:),…,Rk(Uk,Fk)},民为3NF,且P具有无损连接又保持函数依赖的分解。
操作步骤如下:
(1)根据算法2求出保持依赖的分解P={R1,R。,…,R。}
ii (2)判分解P是否具有无损连接性,若有,转(4); (3)令p’pU{X),其中X是R的候选关键字; (4)输出P。·
算法4 将关系模式转换成BCNF,使它具有无损连接的分解。
输入 关系模式R和函数依赖集F。
输出 R(U,F)的一个分解P’{R,(U,,F1),R。(U2,F:),… Rk(Uk,Fk)},民为BCNF,且P具有无损连接的分解。
操作步骤如下:
(1)令P={R}
(2)若P中的所有模式都是BCNF,则转(4);
(3)若P中有一个关系模式民不是BCNF,则民中必能找到一个函数依赖X—A,且X不是民的候选键,且A不属于X,设 Rn(XA),Ri2(民一A),用分解{民,,Rn}代替民,转(2);
(5)输出F;
3.模式分解方法
关系模式分解的基础是键码和函数依赖。当我们对关系模式中属性之间的内在联系做了深入、准确的分析,确定了键码和函数依赖之后,模式分解因有章(规则)可循,有法(方法)可依而显得简单明了。
公共属性共享
要把分解后的模式连接起来,公共属性是基础。若分解时模式之间未保留公共属性,则只能通过笛卡尔积相连,导致元组数量膨胀,真实信息丢失,结果失去价值。保留公共属性,进行自然连接是分解后的模式实现无损连接的必要条件。
相关属性合一
把以函数依赖的形式联系在一起的相关属性放在一个模式中,从而使原有的函数依赖得以保持。这是分解后的模式实现保持依赖的充分条件。然而,对于存在部分依赖或传递依赖的相关属性则不应放在一个模式中,因为这正是导致数据冗余和更新异常的根源,从而也正是模式分解所要解决的问题。
模式分解的三种方法
部分依赖归子集;完全依赖随键码。
要使不属于第二范式的关系模式“升级”,就要消除非主属性对键码的部分依赖。解决的办法就是对原有模式进行分解。分解的关键在于:找出对键码部分依赖的非主属性所依赖的键码的真子集,把这个真子集与所有相应的非主属性组合成一个新的模式;对键码完全依赖的所有非主属性则与键码组合成另一个新模式。
基本依赖为基础,中间属性作桥梁
要使不属于第三范式的关系模式“升级”,就要消除非主属性对键码的传递依赖。解决的办法非常简单:以构成传递链的两个基本依赖为基础形成两个新的模式,这样既切断了传递链,又保持了两个基本依赖,同时又有中间属性作为桥梁,跨接两个新的模式,从而实现无损的自然连接。
找违例自成一体,舍其右全集归一
若发现仍有违例,再回首如法炮制
要使关系模式属于BC范式,既要消除非主属性对键码的部分依赖和传递依赖,又要消除主属性对键码的部分依赖和传递依赖。
如果一个关系数据库中的所有关系模式都满足于BC范式,那么在函数依赖范畴内,它已实现了模式的彻底分解,达到了最高的规范化程度,消除了更新异常和信息冗余。
第一范式是关系模式的基础,因此,即使未明确指出某关系模式属于第一范式,也应认为尽在不言中。
对键码和函数依赖的分析是判别第二、第三和BC范式的基础。在分析函数依赖的基础上找出关系的键码,从而把属性分为主属性和非主属性。
第二、第三范式只检查非主属性与键码之间的函数依赖关系。
BC范式检查每个函数依赖,而不分主属性和非主属性。