heartstill

博客园 首页 新随笔 联系 订阅 管理

http://wsjx.mnu.cn/learning/web_course/dataxitong/

5.2.5关系模式的分解:
  在前面的讨论中,为了提高关系模式的规范化程度,我们都是通过把低一级的关系模式分解为若干个高一级的关系模式来实现的。这样的分解使各个关系模式达到某种程度的分离,让一个关系模式描述一类实体或者实体间的一种联系。
  然而,如何对关系模式进行分解呢?对于同一个关系模式可能有多种分解方案。例如,关系模式S(SNO,CLASSNO,DEPTNO),其中学号SNO,班级编号CLASSNO,系编号DEPTNO。
  其属性集合上的函数依赖集F={SNO→CLASSNO,CLASSNO→DEPTNO}
  显然S 3NF。对关系模式S我们至少有三种分解方案。
   分解1:S11(SNO,DEPTNO),S12(CLASSNO,DEPTNO)
   分解2:S21(SNO,CLASSNO),S22(SNO,DEPTNO)
   分解3:S31(SNO,CLASSNO),S32(CLASSNO,DEPTNO)
  每种分解方案得到的两个关系模式都属于3NF,实际上,它们都属于BCNF和4NF范式。如何比较这三种分解方案的优劣呢?将一个关系模式分解为多个关系模式时,除了提高规范化程度外还需要什么别的考虑吗?
 1.模式分解的等价标准
 2.关于模式分解的几个事实

 
     
   1.模式分解的等价标准
  规范化过程中将一个关系模式分解为若干个关系模式,应该保证分解后产生的模式和原来的模式等价。常用的等价标准有要求:
 ● 分解是具有无损连接性的;
 ● 分解是保持函数依赖的;
 ● 分解既要具有无损连接又要保持函数依赖两种。
  将一个关系模式R(U,F)分解为若干个关系模式R1(U1,F1),R2(U2,F2)…Rn(Un,Fn)(其中U=U1 U2 … Un,R1为F在U1上的投影),这意味着相应的将存储在一个二维表r中的数据分散到若干个二维表r1,r2,…,rn中(其中r1是r在属性组U1上的投影)。我们当然希望这样的分解不丢失信息,也就是说,希望能够通过对关系r1,r2…rn的自然连接运算重新得到关系r中的所有信息。
  事实上,将关系r投影为r1,r2,…,rn时并不会丢失信息,关键是对r1,r2,…,rn作自然连接可能会产生一些原来r中没有的元组,从而无法区别那些元组是r中原来有的,即数据库中应该存在的数据,在这个意义上丢失了信息。
  例如:设关系模式S(SNO,CLASSNO,DEPTNO)在某一时刻的关系r如下表5-14

  表5-14

SNO CLASSNO DEPTNO
S1 C1 D1
S2 C2 D2
S3 C2 D2
S4 C3 D1


  若按分解方案一将关系模式S分解为:
   S11(SNO,DEPTNO)和
   S12(CLASSNO,DEPTNO),
  则将r投影到S11和S12的属性上,得到关系r11如表5-15,r12如表5-16。

  表5-15

SNO DEPTNO
S1 D1
S2 D2
S3 D2
S4 D1

  
表5-16

CLASSNO DEPTNO
C1 D1
C2 D2
C3 D1


  对分解后的两个关系作自然连接r11*r12,得到r'如表5-17如下:

  表5-17

SNO CLASSNO DEPTNO
S1 C1 D1
S1 C3 D1
S2 C2 D2
S3 C2 D2
S4 C1 D1
S4 C3 D1

  r'中的元组S1C3D1和S4C1D1都不是原来r中的元组。就是说,我们无法知道原来r中到底有哪些元组,这是我们不希望的。
  定义1:设关系模式R(U,F)分解为关系模式R1(U1,F1),R2(U2,F2),…,Rn(Un,Fn),若对于R的任何一个可能的关系r,都有r=r1*r2…*rn,即r在R1,R2,…,Rn上的投影的自然连接等于r,则称关系模式R的这个分解是具有无损连接性的。
  分解1不具有无损连接性,这是一个不好的分解方案。
  在将一个关系模式分解为三个或者更多个关系模式的情况下,要判别分解是否具有无损连接性需要比较复杂的算法。然而若将一个关系模式分解为两个关系模式,则很容易判别分解是否具有无损连接性。
  关系模式R(U,F)分解为关系模式R1(U1,F1),R2(U2,F2)是具有无损连接性的分解的充分必要条件是(U1∩U2→U1-U2)∈F+,或者(U2∩U1→U2-U1)∈F+

  让我们再考察第二种分解方案,将关系模式S分解为:
   S21(SNO,CLASSNO),
   S22(SNO,DEPTNO)
  由于U1∩U2=SNO,U1-U2=CLASSNO,显然U1 U2→U1-U2,所以分解2具有无损连接性。然而分解2也不是一个很好的分解方案,将前面例子的关系r投影到S21,S22的属性上,得到关系r21如表5-18和r22如表5-19:

  表5-18

SNO CLASSNO
S1 C1
S2 C2
S3 C2
S4 C3

  
表5-19

SNO DEPTNO
S1 D1
S2 D2
S3 D2
S4 D1

  在这种分解中,假设学生S3从C2班转到C3班,于是我们需要在r21中将元组S3C2修改为S3C3,同时在r22中将元组S3D2修改为S3D1。如果这两个修改没有同时完成,数据库中就会存在不一致信息。这是因为分解得到的两个关系模式不是互相独立造成的。F中的函数依赖CLASSNO→DEPTNO既没有投影到关系模式R22中,而是跨在两个关系模式上。函数依赖是数据库中的完整性约束条件。在r中,若两个元组的X值相等,则Y值也必须相等。现在r的一个元组中的X值和Y值跨在两个不同的关系中,为维护数据库的一致性,在一个关系中修改X值时就需要相应的在另外一个关系中修改Y值,这当然是很麻烦而且是容易出错的,于是我们要求模式分解保持函数依赖这条等价标准。
  定义2:设关系模式R(U,F)分解为关系模式R1(U1,F1),R2(U2,F2),…,Rn(Un,Fn),若F=(F1F2Fn) ,即F所逻辑蕴含的函数依赖一定也由分解得到的各个关系式中的函数依赖所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的。
  分解方案二不是保持函数依赖的,因为分解得到的关系模式中只有函数依赖SNO→CLASSNO,丢失了函数依赖CLASSNO→DEPTNO。不是一个好的分解。
  分解方案三是保持函数依赖的。

 
     
   2.关于模式分解的几个事实 
  (1) 分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。具有无损连接性的分解不一定保持函数依赖,例如分解方案二;保持函数依赖的分解不一定具有无损连接性。

  例如,有学号SNO,班级号CLASSNO,课程号COURSENO,学分CREDIT,构成关系模式:
   SC(SNO,CLASSNO,COURSENO,CREDIT),
  其属性集合上的函数依赖集为:
  F={SNO→CLASSNO, COURSENO→CREDIT},
  分解为两个关系模式:
   SC1(SNO,CLASSNO),
   SC2(COURSENO,CREDIT),
  这个分解是保持函数依赖的,但是不具有无损连接性。
  因此,关系模式的一个分解可能是保持函数依赖的,可能是具有无损连接性的,也可能是既具有无损连接性又保持函数依赖的。
 (2) 若要求分解具有无损连接性,那么模式分解一定可以达到4NF。
 (3) 若要求分界保持函数依赖,那么模式分解可以达到3NF,但不一定能达到BCNF。
 (4) 若要求分解既具有无损连接性,又保持函数依赖,则模式分解可以达到3NF,但不一定能达到BCNF。
  有关模式分解的算法,有兴趣的可参阅有关参考书籍。

posted on 2010-09-19 15:19  开始测试  阅读(1154)  评论(0编辑  收藏  举报