转http://wsjx.mnu.cn/learning/web_course/dataxitong/ 5.2.5关系模式的分解: |
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
表5-15
表5-16
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
表5-19
在这种分解中,假设学生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=(F1 ![]() ![]() ![]() 分解方案二不是保持函数依赖的,因为分解得到的关系模式中只有函数依赖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。 有关模式分解的算法,有兴趣的可参阅有关参考书籍。 |