您的位置:首页 > 数据库

无损分解、判断是否是无损分解的方法

2018-02-12 14:00 281 查看
无损分解

对于任何表T以及它的一个函数依赖集F,T的一个分解是一个表的集合{T1,T2,…Tk},该集合具有两个性质:

(1)对于这个集合中的每一个表Ti,Head(Ti)是Head(T)的一个子集;

(2)Head(T)=Head(T1) U Head(T2) U ….U Head(Tk)。

如果对于表T的任何内容,F中的函数依赖都保证如下关系成立,则称表T的一个分解相对于函数依赖集F是一个无损分解,有时候也称为一个无损连接分解。即满足:

T=T1 join T2 join …join Tk

注意:

无损分解的定义要求分解出的表的连接能得到原始表的信息,而这应当对原始表将来任何可能的内容成立。

定理1

给定表T和属性集X,X属于Head(T),下面的两个陈述是等价的:

(1)X是T的一个超键。

(2)X->Head(T),即属性集X函数决定了T中的所有属性。等价表述为X+ =Head(T)。

证明:

已知(1),由超键的定义可以知道,T中的X属性唯一标识一行,即任意两行在X属性上相同,则其余属性的值必定相同。也就是说若任意两行X属性相同,则这两行完全相同,即这两行在所有属性上都相同。这意味着X->Head(T)。

已知(2),X->Head(T),由函数依赖的定义可知,表T的两行不能在X上具有相同值而同时在Head(T)的属性上取不同值。这说明两个不同的行不能在X上取相同值,所有X唯一标识一行,即X是T的一个超键。

定理2

给定表T和它的有效函数依赖集F,一个把T分为两个 表{T1,T2}的分解是T的一个无损分解,当且仅当Head(T1)和Head(T2)都是Head(T)的真子集,Head(T)=Head(T1) U Head(T2)(也就是说,T的所有属性在T1或者T2中重复),同时如下函数依赖之一可以通过F推导出来:

(1)Head(T1) 交 Head(T2)->Head(T1)

或者

(2)Head(T1) 交 Head(T2)->Head(T2)

例:

给定表T,Head(T)=A B C,有函数依赖B->C。分解成表T1和T2,Head(T1)=A B,Head(T2)=B C。运用定理2,我们有Head(T1) 交 Head(T2)->Head(T2),也就是B->BC,这从B->C是显而易见的。所以该分解是无损分解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库设计