3-4-2

来源:百度文库 编辑:神马文学网 时间:2024/04/28 23:21:59


3.4.1 第一范式(1NF)
  1.如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式(first normal form,简记为1NF)的模式。
  2.1NF是关系模式应具备的最起码的条件。满足1NF的关系称为规范化的关系,关系数据库研究的关系都是规范化的关系。
  3.不满足1NF的关系称为非规范化的关系。如果关系模式中有属性是多值属性时,就要采用转换成多个单值属性或弱实体的方法来解决。
3.4.2 第二范式(2NF)
  既使关系模式是1NF。但很可能具有不受欢迎的冗余和异常现象。因此需把关系模式作进一步的规范化。
  如果关系模式中存在局部依赖,就不是一个好的模式,需要把关系模式分解,以排除局部依赖,使模式达到2NF的标准。具体定义如下。
1.定义
  对于函数依赖W→A,如果存在XW有X→A成立,那么称W→A是局部依赖(A局部依赖于W);否则称W→A是完全依赖。完全依赖也称为“左部不可约依赖”。
2.定义
  如果A是关系模式R的候选键中属性,那么称A是R的主属性;否则称A是R的非主属性。
3.定义
  如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键,那么称R是第二范式(2NF)的模式。如果数据库模式中每个关系模式都是2NF,则称数据库模式为2NF的数据库模式。
4.不满足2NF的关系模式中必定存在非主属性对关键码的局部依赖

5.实例

(1)问题:设关系模式R(S#,C#,SCORE,T#,TITLE)的属性分别表示学生学号、选修课程的编号、成绩、任课教师工号和教师职称等意义。
(2)(S#,C#)是R的候选键。
(3)R上有两个FD
   ①(S#,C#)→(SCORE)
   ②C#→(T#,TITLE)
(4)R不是2NF模式
   ①C#→(T#,TITLE)的FD是局部依赖
(5)存在问题
   ①此时R的关系就会出现冗余和异常现象。
   ②譬如某一门课程有100个学生选修,那么在关系中就会存在100个元组,因而教师的工号和职称就会重复100次。
(6)分解

   ①如果把R分解成R1(C#,T#,TITLE)和R2(S#,C#,SCORE)。
   ②R1的键是C#,函数依赖C#→(T#,TITLE)是完全依赖。
   ③R1和R2则都是2NF模式。
6.分解成2NF模式集的算法
   ①设关系模式R(U),主键是W,R上还存在函数依赖X→Z,并且Z是非主属性和XW,那么W→Z就是一个局部依赖。此时应把R分解成两个模式。
   ②R1(XZ),主键是X。
   ③R2(Y),其中Y=U-Z,主键仍是W,外键是X(参照R1)。
   ④利用外键和主键的连接可以从R1和R2重新得到R。
   ⑤如果R1和R2还不是2NF,则重复上述过程,一直到数据库模式中每一个关系模式都是2NF为止。 3.4.3 第三范式(3NF)
1.定义
  (1)传递依赖:如果X→Y,Y→A,且YX和AY,那么称X→A是传递依赖(A传递依赖于X)。
  (2)3NF的定义:如果关系模式R是1NF,且每个非主属性都不传递依赖于R的候选键,那么称R是第三范式(3NF)的模式。如果数据库模式中每个关系模式都是3NF,则称其为3NF的数据库模式。
  (3)违反3NF的传递依赖的三种情况

  (4)3NF的等价定义:设F是关系模式R的FD集,如果对F中每个非平凡的函数依赖X→Y,都有X是R的超键,或者Y的每个属性都是主属性,那么称R是3NF的模式。
2.说明
如果非平凡的函数依赖X→Y中Y是主属性,则X→Y不违反3NF条件;如果Y是非主属性,且X不包含超键,则必存在着关键码W有W→X,此时就有W→Y是一个传递依赖,即R不是3NF模式。
3.实例

(1)R1(C#,T#,TITLE)是2NF模式,却不一定是3NF模式。
(2)如果R1中存在函数依赖C#→T#和T#→TITLE,那么C#→TITLE就是一个传递依赖,即R1不是3NF模式。
(3)此时R1的关系中也会出现冗余和异常操作。譬如一个教师开设五门课程,那么关系中就会出现五个元组,教师的职称就会重复五次。
(4)如果把R1分解成R11(T#,TITLE)和R12(C#,T#)后,C#→TITLE就不会出现在R11和R12中。
(5)这样R11和R12都是3NF模式。
4.分解成3NF模式集的算法
(1)设关系模式R(U),主键是W,R上还存在函数依赖X→Z。并且Z是非主属性,ZX,X不是候选键,这样W→Z就是一个传递依赖。此时应把R分解成两个模式:
   ①R1(XZ),主键是X;
   ②R2(Y),其中Y=U-Z,主键仍是W,外键是X(参照R1)。
(2)利用外键和主键相匹配机制,R1和R2通过连接可以重新得到R。
(3)如果R1和R2还不是3NF,则重复上述过程,一直到数据库模式中每一个关系模式都是3NF为止。
5.如果R是3NF模式,那么R也是2NF模式 3.4.4 BCNF
1.由来
在3NF模式中,并未排除主属性对候选键的传递依赖,因此有必要提出更高一级的范式BCNF(Boyce–Codd NF)。
2.主属性对候选键的传递依赖

3.BCNF的定义
  (1)如果关系模式R是1NF,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。如果数据库模式中每个关系模式都是BCNF,则称为BCNF的数据库模式。
  (2)设F是关系模式R的FD集,如果对F中每个非平凡的函数依赖X→Y,都有X是R的超键,那么称R是BCNF的模式。

4.实例

   ①设关系模式R(B#,BNAME,AUTHOR)的属性分别表示书号、书名和作者名。如果规定,每个书号只有一个书名,但不同书号可以有相同书名;每本书可以有多个作者合写,但每个作者参与编著的书名应该互不相同。这样的规定可以用下列两个FD表示。
   ②B#→BNAME和(AUTHOR,BNAME)→B#。
   ③R的关键码为(BNAME,AUTHOR)或(B#,AUTHOR),因而模式R的属性都是主属性,R是3NF模式。
   ④但从上述两个FD,可知属性BNAME传递依赖于关键码(AUTHOR,BNAME),{(AUTHOR,BNAME)→B#,B#→BNAME,故(AUTHOR,BNAME)t→BNAME},因此R不是BCNF模式。譬如一本书由多个作者编写时,其书名与书号间的联系在关系中将多次出现,带来冗余和操作异常现象。
   ⑤如果把R分解成R1(B#,BNAME)和R2(B#,AUTHOR),能解决上述问题,且R1和R2都是BCNF。但有可能引起新的问题,譬如这个分解把(AUTHOR,BNAME)→B#丢失了,数据语义将会引起新的矛盾。
5.如果R是BCNF模式,那么R也是3NF模式
6.无损分解成BCNF模式集的算法
   ①对于关系模式R的分解ρ(初始时ρ={R}),如果ρ中有一个关系模式Ri相对于πRi(F)不是BCNF。Ri中存在一个非平凡FD X→Y,有X不包含超键。此时把Ri分解成XY和Ri-Y两个模式。重复上述过程,一直到ρ中每一个模式都是BCNF。
   ②这个算法能保证把R无损分解成ρ,但不一定能保证ρ能保持FD 3.4.5 分解成3NF模式集的合成算法
1.无损分解且保持依赖地分解成3NF模式集的算法
   ①对于关系模式R和R上成立的FD集F,先求出F的最小依赖集,然后再把最小依赖集中那些左部相同的FD用合并性合并起来。
   ②对最小依赖集中,每个FD X→Y去构成一个模式XY。
   ③在构成的模式集中,如果每个模式都不包含R的候选键,那么把候选键作为一个模式放入模式集中。
   ④这样得到的模式集是关系模式R的一个分解,并且这个分解既是无损分解,又能保持FD。
2.实例
   ①设关系模式R(ABCDE),R的最小依赖集为{A→B,C→D}。从依赖集可知R的候选键为ACE。
   ②先根据最小依赖集,可知ρ={AB,CD}。然后再加入由候选键组成的模式ACE。因此最后结果ρ={AB,CD,ACE}是一个3NF模式集且R相对于该依赖集是无损分解且保持FD。 3.4.6 模式设计方法小结
1.三个特性
关系模式R相对于函数依赖集F分解成数据库模式ρ={R1,…,Rk},一般应具有三个特性:
   ①ρ是BCNF模式集,或3NF模式集;
   ②无损分解,即对于R上任何满足F的泛关系应满足r=mρ(r);
   ③保持函数依赖集F,即(πRi(F))F。
2.设计数据库结构的规则
(1)应作权衡,尽可能使数据库模式保持最好的特性。一般尽可能设计成BCNF模式集。
(2)如果设计成BCNF模式集时达不到保持FD的特点,那么只能降低要求,设计成3NF模式集,以求达到保持FD和无损分解的特点。