数据依赖公理:
首先看定义:如果F+ =G+ ,就说函数依赖集F覆盖G或F与G等价。
由此我们可以推到出来两个性质:
我们判断F和G等价的要求是:
我们证明等价的更简单的方案是验证其中一个关系的每一个函数都在另一个关系的闭包中。
我们来看一个例题:
A在G中的闭包是ABC,而在F中存在A->B,所以A->B属于G的闭包。
B在G中的闭包是BC,而在F中存在B->C,所以B->C属于G的闭包。
所以F属于G的闭包,同理,G属于F的闭包。
整体解题过程如下:
最小依赖集:首先来看定义
- F中每个函数依赖的右部都是单属性。
- 对于F的任何函数依赖X->A,F-{X->A}与F都不等价,(函数依赖缺一不可)。
- F中的每个函数依赖的左部没有多余依赖。
我们直接来看题:
根据我们的第一个判断条件,可以直接将这个给Pass掉,因为这三个函数依赖不满足右部都是单属性。
很明显,通过B->C可推理出AB->C,所以AB->C是多余的。所以不符合第三个判断条件。
这个是最小函数依赖集。
当然,每个函数依赖集均与它的最小函数依赖集等价。
那么我们要如何求最小函数依赖集呢?
我们有三步走战略:
(1)分解: 使F中任一函数依赖的右部仅含有单属性。
(2)最小化左边的多余属性:
方法:对F中任一XY->A,在F中求X + ,
若A属于X + ,则Y为多余的。
(3)删除冗余的函数依赖 :
方法:对F中任一X->A,在F-{X->A}中求X + ,
若A属于X + ,则X->A为多余的。
我们直接来看实例:
关系模式的分解:
对于存在数据冗余,插入异常,删除异常的关系模式,可以通过对关系模式的分解来解决问题。
让我们先看定义:
定义4.16: 关系模式R(A 1 ,A2,…,A n),Ri( 设有i=1,2,……k)是
R的一些子集(把R看成其属性的集合),若R 1 ∪ R 2 ∪ … ∪ R k =U
,则称用ρ={R 1 ,R 2 ,…R k }代替R的过程为关系模式的分解。
关系模式分解后会带来两个问题:
1,查询时的连接操作是否会丢失某些信息或多出某些信息。这引出了无损连接的概念。
2,分解后的关系模式是否保持了原来的函数依赖。这是保持函数依赖的问题。
显然,一个关系可以有很多种分解方法,我们需要判断分解的好与坏。
我们给出一个例子:
一个关系可以有多种分解方法,如何判断分解的好与坏呢?
分解一:ρ1={R1(sno), R2(dept), R3(mname)}
不好! 无法恢复r.
分解二:ρ2={R1(sno,dept),R2(sno,mname)}
不好! 丢失dept→ mname
分解三:ρ3={R1(sno, dept),R2(dept ,mname} 好!
显然,我们在分解的时候,如果连接项是重复出现的值,很容易造成有损链接,造成冗余的连接项,且不正确,但是如果我们使连接项不出现重复元素,这样就可以避免有损分解的冗余。
显然,以A为主属性进行连接,连接项是主属性,当然是无损连接。对于每一个A项都有唯一一个B项和C项与之对应。
如何判断一个分解是否具有无损连接性:
我们再来看第二步:
厚礼蟹,这说的是什么困吧,看不懂一点,举例还不行,概念也讲不明白。
SBPPT,没有一点含金量,我直接放弃。