模式分解是否为无损连接的判断方法

方法一:无损连接定理

关系模式R(U,F)的一个分解,ρ={R1<U1,F1>,R2<U2,F2>}具有无损连接的充分必要条件是:

U1∩U2→U1-U€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的一次扫描。

③ 比较扫描前后,表有无变化,如有变化,则返回第② 步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。

举例1:已知R<U,F>,U={A,B,C},F={A→B},如下的两个分解:

① ρ1={AB,BC}

② ρ2={AB,AC}

判断这两个分解是否具有无损连接性。

①因为AB∩BC=B,AB-BC=A,BC-AB=C

所以B→A ¢F+,B→C ¢ F+

故ρ1是有损连接。

② 因为AB∩AC=A,AB-AC=B,AC-AB=C

所以A→B €F+,A→C ¢F+

故ρ2是无损连接。

举例2:已知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),判断这个分解是否具有无损连接性。

① 构造一个初始的二维表,若“属性”属于“模式”中的属性,则填aj,否则填bij

② 根据A→C,对上表进行处理,由于属性列A上第1、2、5行相同均为a1,所以将属性列C上的b13、b23、b53改为同一个符号b13(取行号最小值)。

③ 根据B→C,对上表进行处理,由于属性列B上第2、3行相同均为a2,所以将属性列C上的b13、b33改为同一个符号b13(取行号最小值)。

④ 根据C→D,对上表进行处理,由于属性列C上第1、2、3、5行相同均为b13,所以将属性列D上的值均改为同一个符号a4

⑤ 根据DE→C,对上表进行处理,由于属性列DE上第3、4、5行相同均为a4a5,所以将属性列C上的值均改为同一个符号a3

⑥ 根据CE→A,对上表进行处理,由于属性列CE上第3、4、5行相同均为a3a5,所以将属性列A上的值均改为同一个符号a1

⑦ 通过上述的修改,使第三行成为a1a2a3a4a5,则算法终止。且分解具有无损连接性。

声名:该博文的部分内容转载自百度文库http://wenku.baidu.com/linkurl=KtuuXFU3TLD13PKSFSDoLgOdCFi9j7R0CBjpfTIY1zYxikvftzQwvLiyLg8WNX58g6t6i0YnUMgL7FFWo4RzoIl23UylHvcMsngwI0rVTgK

时间: 2024-11-17 00:29:37

模式分解是否为无损连接的判断方法的相关文章

数据库求闭包,求最小函数依赖集,求候选码,判断模式分解是否为无损连接,3NF,BCNF

1.说白话一点:闭包就是由一个属性直接或间接推导出的所有属性的集合. 例如:f={a->b,b->c,a->d,e->f}:由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d} 2. 候选码的求解理论和算法 对于给定的关系R(A1,A2,-An)和函数依赖集F,可将其属性分为4类: L类  仅出现在函数依赖左部的属性. R 类  仅出现在函数依赖右部的属性. N 类  在函数依赖左右两边均未出现的属性. LR类  在函数依赖左右两边均出现的属性. 定理:对于给定的关系

模式分解---无损连接性的判断方法(转)

例:已知R<U, F>,U= { A, B, C, D, E },F={ AB→C , D→E, C→D},R的一个分解ρ= {R1(A,B,C), R2(C,D), R3(D,E)}.判定分解ρ是否为无损连接的分解. 解: (1) 构造初始表: ---------> 关系模式R<U, F>的一个分解     ρ = { R1<U1,F1>,R2<U2,F2> }. 如果U1∩U2 → U1-U2?F+ 或 U1∩U2 → U2-U1?F+,那么ρ具有

数据库 无损连接分解

无损连接分解的形式定义如下:设R是一个关系模式,F是R上的一个函数依赖(FD)集.R分解成数据库模式δ={R1,……,Rk}.如果对R中每一个满足F的关系r都有下式成立: 那么称分解δ相对于F是“无损连接分解”,否则称为“损失连接分解”.其中表示自然连接. 从上述形式定义中可知,若直接根据定义来判断某个分解是否具有无损连接性,那么就得“对R中每一个满足F的关系r”进行测试,看是否满足上面的等式,这显然不可操作,因为“对R中每一个满足F的关系r”进行测试就意味着“对R中所有满足F的关系r”进行测试

分解成3NF保持函数依赖且为无损连接的算法

分解成3NF保持函数依赖且为无损连接的算法: 1.根据分解成3NF的保持函数依赖的分解算法(http://www.cnblogs.com/bewolf/p/4443919.html),得到分解结果ρ 2.判断分解是否为无损连接,如果是直接输出结果ρ 3.如果2中是有损的,那么令ρ=ρU{X},其中X是R的码,然后输出ρ.

[转载]快捷判断无损连接

原理:如果在F中有(R1 ∩ R2)->(R1 - R2)或者(R1 ∩ R2)->(R2 - R1)其中之一,那么分解R1和R2就是无损连接的 实例: R(A,B,C,D,E),R的函数依赖集F={A->BC,CB->E,B->D,E->A}. 判断R1(A,B,C),R2(A,D,E)是否是无损连接. 因为只有两个关系模式,所以可以用快捷方式来判断. R1 ∩ R2={A},R1 - R2={B,C},因为F中有A->BC,即有(R1 ∩ R2)->(R

最小闭包的计算 模式分解完整性检查

初看闭包,闭包可以被理解为,一组元素通过一些关系聚合在一起,而且这些关系已经是这些元素之间所有的关系了. 这些元素动用所有的关系,去找和其存在这种关系的其他元素.再将找到的这些元素并入集合中去,直到不能在发现新的元素为止.更形象的来说就是使用现有集合内的元素的所有关系进行扩充,像"滚雪球"一般的不断扩充.直至没法再吸收新的元素进入. 属性闭包正是使用属性间的函数依赖进行滚雪球的过程. 对于属性闭包 首先要了解阿姆斯特朗公理 阿姆斯特朗公理是讲述属性间的函数依赖关系,可以通过这些公理进行

数据库关系理论模式分解理解和总结

Armstrong公理系统 逻辑蕴涵 定义/解释 比如A->B B->C 在关系模型R<U,F>中成立,可以得到A->C字R中也成立,所以称F逻辑蕴含A->C. 闭包 定义/解释 在关系模型R中,F所逻辑蕴涵的所有函数依赖叫做F的闭包,记为\(F^{+}\). 某个属性集关于依赖集的闭包 定义/解释 即已有X这个属性集作为左部,通过依赖集F的所有函数依赖,可以推导出的所有函数依赖,称为X关于F的闭包,记为\(X_F^{+}\) 例题 已知关系模型R<U,F>

nodejs之memcache连接池应用方法

花了二天时间才测试成功 NODEJS技术太新了点 中英文的资料都少 所以记录下正确的nodejs之memcache连接池应用方法方便后来人 按理说memcached应该自带有连接池 但是不知道为什么总是不正确 外面再套一个暂时正常了 或许以后会有更方便的方法 先用着 欢迎指正 module.exports = MemCache78; var EventEmitter = require('events').EventEmitter; var Util = require('util'); Uti

Javascript中数组的判断方法

摘要: 1.数组检测的方法: 1) typeof . 2) instanceof . 3) constructor . 4) Object.prototype.toString. 5) Array.isArray(). 以上为数组检测的方法,但是这些方法中: Array.isArray()方法是最为简单方便的方法,但是存在版本支持性问题,没有版本支持性问题且较好的检测方法是使用Object.prototype.toString结合call()方法来检查,通常数组检测中我们常用的做法是两种方法结合