关系模式的分解 将一个关系模式分解为多个关系模式之后原模式所满足的特性在新的模式中是否被保持为了保持原来模式所满足的特性要求分解处理具有无损联接性和保持函数依赖性 模式分解中存在的问题 设有关系模式RRRR…Rk都是R的子集R=R ∪ R ∪ … ∪ Rk关系模式RRR…Rk的集合用r 表示r ={RRR…Rk}用r代替R的过程称为关系模式的分解 例设关系模式R(ABC)F={A →B B →C} r是R的满足F的当前值 将其按下列方式分解会存在哪些问题 将R分解为r={R(A) R(B) R(C)} 将R分解为r={R(AB) R(AC)} 将R分解为r={R(AB) R(BC)} 将R分解为r={R(AC) R(BC)} 分解的衡量标准 分解具有无损联接分解要保持函数依赖分解既要保持依赖又要具有无损联接 无损联接性 无损联接性是指当关系模式分解时原关系模式下的任一合法的关系实例在分解之后能通过自然联接恢复起来 定义设r ={RRR…Rk}是关系模式R(UF)的一个分解如果对于R的任一满足F的关系r都有 r=∏R(r)︱×︱ ∏R(r)︱×︱… ︱×︱ ∏Rk(r) 则称这个分解满足依赖集F的无损联接 算法检验无损联接性 输入关系模式R {AAA…An}函数依赖集F以及分解r ={RRR…Rk} 输出确定r是否具有无损联接性 方法 构造一个k行n列的表第i行对应于关系模式Ri第j列对应于属性Aj如果Aj ∈ Ri则在第i行第j列上放符号aj否则放符号bjj 逐个检查F中的每个函数依赖并修改表中的元素其方法如下取F中的一个函数依赖X→Y在X的分量中寻找相同的行然后将这些行中的Y的分量改为相同的符号如果其中有aj则将bjj改为 aj若其中无aj则改为bjj 反复进行如果发现某一行变成a a… ak则分解r具有无损联接性如果F中所有函数依赖都不能再修改表中的内容且没有发现这样的行则分解r不具有无损联接性 例设有关系模式R(UF)U=(ABC)F={A→BC→B}判断一个分解r={ACBC}是否具有无损联接性 例设R=ABCDER=ADR=ABR=BER=CDER=AE设函数依赖是A→CB→C C→DDE→C CE→A判断r ={RRRRR}是否具有无损联接性 定理如果R的分解为r ={RR}F为R所满足的函数依赖集合分解r具有无损联接性的充要条件是 R∩ R →(R—R) 或R∩ R →(R—R) 例设R=ABCF={A→B}则r={R(AB) R(AC)}和r={R(AB) R(BC)}是否具有无损联接性 保持函数依赖的分解 定义设有关系模式RF是R的函数依赖集Z是R的一个属性集合则称Z所涉及到的F+中所有函数依赖为F在Z上的投影记为∏Z(F)有 ∏Z(F)={X→Y| X→Y ∈ F+且XYÍ Z} 定义设关系模式R的一个分解r ={RR……Rk}F是R的依赖集如果F等价于∏R(F) ∪ ∏R(F) ∪ … ∪ ∏Rk(F)则称分解r具有依赖保持性 注意一个无损联接分解不一定具有依赖保持性同样一个依赖保持性分解不一定具有无损联接性 例设关系模式R=(CITYSTZIP)满足下列函数依赖 (CITYST) →ZIPZIP →CITY 将R分解为r ={RR}R={STZIP}R={CITYZIP}检查是否保持无损联接性和函数依赖性 作业 设关系模式R(ABCDEG)F={AB →CC →ABC →DACD →BD →EGBE →CCG →BDCE →AG} 求属性集闭包(BD) + 求函数依赖集F={AB →CEA →CGP →BEP →ACDE →PHB →PD →HGABC →PG} 最小函数依赖集Fmin 设关系模式R(UVWXYZ) F={U →VW →ZY →UWY →X} ={WZVYWXYUV}是否具有无损联接性 |