数据库这一块,除了那三个范式不易记忆,还有更加烧脑的模式分解。模式分解在99%的搞计算机的人来看,只是在软考题目见到应用,除此之外,真的不知道这块知识到底是做什么的,对它的充斥满脑的质疑。这种知识写成的题目只能把它看成一个游戏,真的看不出到底有什么用,而专业课和软考中却大量充斥着这类看起来深奥无比掌握游戏规则也不知有什么实际应用的知识,这也是我当初没有选择继续考研的原因,因为课程中一些理论占了很大篇幅,但我只能看到这些理论在天上飘,看不到它们真正的落地,人生而有涯,我还是持务实的观念来进行生命历程的体验与感悟的。
无损连接定理
关系模式R(U,F)的一个分解,ρ={R1<U1,F1>,R2<U2,F2>}具有无损连接的充分必要条件是:U1∩U2→U1-U2 €F+ 或U1∩U2→U2 -U1€F+
验证算法
ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是关系模式R<U,F>的一个分解,U={A1,A2,...,An},F={FD1,FD2,...,FDp},并设F是一个最小依赖集,记FDi为Xi→Alj,其步骤如下:
① 建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj Ui,则在j列i行上真上aj,否则填上bij;
② 对于每一个FDi做如下操作:找到Xi所对应的列中具有相同符号的那些行。考察这些行中li列的元素,若其中有aj,则全部改为aj,否则全部改为bmli,m是这些行的行号最小值。
如果在某次更改后,有一行成为:a1,a2,...,an,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。
对F中p个FD逐一进行一次这样的处理,称为对F的一次扫描。
③ 比较扫描前后,表有无变化,如有变化,则返回第② 步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。
题目
已知R<U,F>,U={A,B,C,D,E},F={A→C,B→C,C→D,DE→C,CE→A},R的一个分解为R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE),判断这个分解是否具有无损连接性。
解
首先列出下表:
按照F中所给的关系模式在表格中进行对应,首先是A->C:
把第一列相同的a1,对应相应行改成与第三列第一行相同的数字:
之后是关系模式B->C:
C->D:
DE->C:
CE->A:
对照完毕之后,检查一行是否有全部为a,如果有,则为无损链接性。
由此可见此分解满足无损链接性。