数据依赖的公理系统Armstrong公理系统及其有效性和完备性Word格式文档下载.docx
《数据依赖的公理系统Armstrong公理系统及其有效性和完备性Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据依赖的公理系统Armstrong公理系统及其有效性和完备性Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
其中,函数依赖是基本的一种依赖。
“数据依赖”通过一个关系中属性之间值的相等与否体系出来的数据间的相互关系,它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。
设计人员的一个任务就是把其中的数据依赖找出来。
其中,函数依赖是基本的一种依赖,它是关键码概念的推广。
1函数依赖
1.1函数依赖的定义
我们今天要讨论的就是数据依赖公理系统中关于“求与给定函数依赖集等价的最小函数依赖集的算法研究”。
我们首先介绍一下相关的概念、定义和定理。
定义1函数依赖:
设有关系模式R(U),X和Y是属性集U的子集,函数依赖(FunctionalDependency,简记为FD),是形为X→Y的一个命题,只要r是R的当前关系,对r中任意的两元组t和s,都有t[X]=s[X]蕴涵t[Y]=s[Y],那么函数依赖X→Y在关系模式R(U)中成立。
这里t[X]表示元组t在属性集X上的值,相当于t.X,其余类同。
X→Y读作“X函数决定Y”,或“Y函数依赖于X”。
FD是对关系模式R上的一切可能的关系r定义的。
对于当前关系r的任意两个元组,如果X值相同,则要求Y值也相同,集即有一个X值就有一个Y值与之相对应,或者说Y值由X值决定。
因而这种依赖称为函数依赖。
1.2函数依赖及其举例
Emp_id
Emp_name
Skillid
Skillname
Skilldate
Skilllvl
09112
Jones
44
Librarian
03-15-99
12
26
PCadmin
06-30-98
10
89
Word_proc
01-15-00
12231
Smit
Pc_admin
04-15-99
5
Smith
39
Bookkeeping
07-30-97
7
13597
Brown
27
Statistic
09-15-99
6
14131
Blake
05-30-98
9
Word_proC
90-30-99
…
这里t[X]表示元组t在属性集X上的值,其余类同。
对于当前关系r的任意两个元组,如果X值相同,则要求Y值也相同,即有一个X值就有一个Y值与之相对应,或者说Y值由X值决定。
从数学角度看,定义1可以和函数的定义相比:
对于属性X的每一个元素(它将出现在某行中),Y中有唯一一个元素(出现在某行中)与之对应。
【例1】
在上图的表格中,有下面的一些函数成立:
emp_id→emp_name
emp_id→emp_phone
em_pid→dept_name
在俄E-R概念中,我们知道这些是成立的,因为em_pid是实体employee的一个标识符,其他数据项简单地表示了实体的其他属性。
一旦一个实体被确定,他的所有其它属性也就确定了。
但是我们也可以凭直觉辨识这一事实。
如果我们在看到图中的设计中,有两行具有相同的emp_id值和不同的emp_phone值,我们就认为这些数据被破坏了(假设每一个雇员有唯一的一个电话),但是如果我们看到两行有相同的emp_phone值和不同的cmp_id值,我们的第一个想法是他们代表了不同的雇员,这两个雇员共用一个电话。
但是这两个情形是对称的,这完全是由于我们对于数据的简单理解导致我们认为第—种情形是被破坏的数据。
我们指望用emp_id打破这一束缚,来唯一地表示雇员。
注意我们所说的暗示着
emp_id函数决定emp_pheone而emp_phone并没有函数决定cmp_id.有时候用下面得形式表示,表示后面这一点:
emp_phone/→emp_id
【例2】有一个关于学生选课,教师任课的关系模式:
R(SNO,SNAME,CNO,GRADE,CNAME,TNAME,TAGE)
属性分别表示学生学号、姓名、选修课程的课程号、成绩、课程名、任课教师姓名和年龄等意义。
如果规定,每个学号只能有一个学生姓名,每个课程号只能决定一门课程,那么可写成下列FD形式:
SNO→SNAME
CNO→CNAME
每个学生每学一门课程,有一个成绩,那么可写出下列FD形式:
(SNO,CNO)→GRADE
还可以写出其他一些FD:
CNO→(CNAME,TNAME,TAGE)
TNAME→TAGE
2逻辑蕴含
2.1逻辑蕴含的定义
定义2逻辑蕴涵:
对于满足一组函数依赖F的关系模式R(U,F),其任何一个关系r,若函数依赖X→Y都成立(即r中任意两元组t,s,若t[X]=s[X],则t[Y]=s[Y]),则称F逻辑蕴涵X→Y。
比如在R中具有函数依赖A→B和B→C,则我们可以说R中必然具有函数依赖A→C。
在讨论函数依赖时,有时需要从一些已知的函数依赖去判断另一些函数依赖是否成立。
比如A→B和B→C在关系模式R中成立,那么A→C在R中是否成立?
这个问题称为逻辑蕴涵问题。
2.2逻辑蕴含的证明
通过反证法证明,设r为关系模式R的一个关系,满足A→B和B→C,但不满足A→C。
则必然存在r,在关系r中存在两个元组t和s,在属性A上的分量的值相等,而在C上的分量的值不相等。
设t、s元组在B上的分量值相等,则与r满足B→C相矛盾;
如果设t、s元组在B上的分量值不相等,则与r满足A→B相矛盾。
所以满足A→B、B→C的关系r必须满足A→C。
我们就说函数依赖A→B、B→C逻辑蕴含函数依赖A→C。
3 Armstrong公理系统
3.1Armstrong公理系统概述
下面我们进入我们所要讨论的定理Armstrong公理系统。
Armstrong公理系统是一组推理规则,是1974年首先由W.W.Armstrong提出来的。
利用这些推理规则,可从已知的函数依赖集F推导出F+中全部函数依赖。
下面就详细讨论一下Armstrong公理系统。
以下的推理规则是他人于1977年改进的形式。
当已知模式R满足一组函数依赖F,怎么知道R中还有那些函数依赖?
如何决定那些属性可以组成关系的码等等问题,迫切需要有一套形式推测推力标准规则,利用这些推力规则,可以从已知的函数依赖F推导山F+中全部函数依赖。
这组推理规则叫Armstrong公理。
3.2Armstrong公理的几个性质
这个公理是正确的,即由F使用推理规则推导出来。
下面简单地介绍一下这个公理系统。
设R为一关系模式,U为R的属性全体(属性的总体集),F是U上的一组函数依赖,于是有关系模式R(U,F)。
对R(U,F)来说有以下的推理规则:
●A1(自反性,Reflexivity):
若Y⊆X⊆U,则X→Y为F所蕴含。
证明:
A1是显然的。
因为不可能在一个关系中存在两个元组X上是相等的,而在X的某个子集Y上不相等。
●A2(增广性,Augmentation):
若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含。
假设R的某个关系r中存在两个元组t和s违反XZ→YZ,即t[XZ]=s[XZ],但t[YZ]≠[YZ]。
从t[YZ]≠s[YZ]可知t[Y]≠s[Y]或t[Z]≠s[Z]。
如果t[Y]≠s[Y],则与已知的X→Y矛盾;
如果t[Z]≠s[Z],则与假设的t[XZ]=s[XZ]矛盾。
因此,假设不成立,从而得出A2是正确的。
●A3(传递性,Transitivity):
若X→Y及Y→Z为F所蕴涵,则X→Z为F所蕴涵。
假设R的某个关系r中存在两个元组t和s违反X→Z,即t[X]=s[X],但t[Z]≠s[Z]。
如果t[Y]≠s[Y],则与已知的X→Y矛盾;
如果t[Y]=s[Y],则与已知的Y→Z矛盾。
因而A3是正确的。
FD推理规则A1、A2、A3是正确的。
也就是,如果X→Y是从F用推理规则导出,那么X→Y在F+中。
由Armstrong公理系统A1,A2,A3三条推理规则可以得到另外几个很有用的推理规则:
●B1合并规则:
由X→Y及X→Z,有X→YZ。
已知X→Y,根据A2增广性,两边用X扩充,得到X→XY。
从已知X→Z,根据A2增广性,两边用Y扩充,得到XY→YZ。
根据A3传递性,从X→XY和XY→YZ可得到X→YZ。
从而B1得证。
●B2伪传递规则:
由X→Y及WY→Z,有XW→Z。
已知X→Y,根据A2增广性,两边用W扩充,可得WX→WY,
再由WY→Z,根据A3传递性可得XW→Z,从而B2得证。
●B3分解规则:
由X→Y及Z⊆Y,有X→Z。
由Z⊆Y,根据A1自反性得Y→Z,又由X→Y,根据A3传递性可得X→Z,从而B3得证。
●B4复合规则:
由X→Y及Z→W,有XZ→YW。
由X→Y及Z→W,根据A2增广性,X→Y两边用Z扩充,Z→W两边用Y扩充,可分别得到XZ→YZ和YZ→YW,再根据A3传递性可得到XZ→YW,从而B4得证。
4 Armstrong公理系统的引理
4.1Armstrong公理系统的引理1
在这一章我们介绍一下Armstrong公理的几个引理
根据所证的合并规则和分解规则,我们又可以得到这样一个重要的结论:
引理1:
X→AlA2…Ak成立的充分必要条件是X→Ai成立(i=1,2,…k)。
先证充分条件:
已知X→AlA2…Ak成立,则根据分解规则,有X→Ai(i=1,2,…,k)成立。
必要条件:
已知X→Ai(i:
1,2,…,k)成立,则根据合并规则,有X→A1A2…Ak成立。
人们把自反律,传递律和增广律称为Armstrong公理系统。
Armstrong公理系统是有效的,完备的。
Armstrong公理系统的有效性是指:
由F出发根据Armstrong公理系统推导出来的每一个函数依赖一定在F+中;
完备性是指F+中的每一个函数依赖,必定可以由F出发根据Armstrong公理系统推导出来。
也就是说有效性保证了推出的所有函数依赖是正确的,完备性保证了可以推出所有被蕴涵的函数依赖,这就保证了计算和推导的可靠性、有效性。
那么现在就可以由一个已知的F,根据Armstrong公理的推理规则,求出F+。
已知关系模式R(ABC),F={A→B,B→C},可推出F+中有43个函数依赖。
譬如,据A1可推出A→Q(Q表示空属性集),A→A,…。
据已知的A→B及规则A2可推出AC→BC,AB→B,A→AB,…。
根据已知条件及规则A3可推出A→C等。
4.2Armstrong公理系统的引理2
引理2:
设F为属性集U上的一组函数依赖,X,Y⊆U,X→Y能由F根据Armstrong公理导出的充分必要条件是Y⊆Xf+。
因此要判断函数依赖X→Y是否为F所蕴涵,即是否能由F出发根据Armstrong公理导出,如果Y⊆XF+,则X→Y为F所蕴涵。
从F计算F+是指数级时间,但从属性集X求Xf+并不太难,花费的时间与F中全部依赖的数目成正比,当然我们推导出F+中的全部函数依赖没有什么意义,只要有针对性的判断或推导就可以了。
5 属性集闭包及公理完备性
5.1属性集闭包及公理完备性
下面给出函数依赖集的闭包的定义:
给定一个函数依赖集F,他作用于在表面T的属性上。
我们定义F的闭包围可以从F推导出的所有的函数依赖的集合。
记为F+。
【例3】F为八个函数依赖所组成:
AB→CD→EG
C→ABE→C
BC→DCG→BD
ACD→BCE→AG
设X=BD,求X+
计算步骤:
1.设X(0)=BD.
2.计算X
(1):
在F中找一个函数依赖,其左边为B或D或BD,在F中有函数依赖D→EG。
所以X
(1)=BD∪EG=BDEG。
3.计算X
(2):
找包含X
(1)的函数依赖,除D→EG外,还有BE→C,则得X
(2)=BCDEG。
4.计算X(3):
找包含X
(2):
得函数依赖,除去已使用过的函数依赖外,还有C→A,BC→D,CG→BD和CE→AG,则得X(3)=ABCDEG。
由于X(3)为全部属性组成,显然X(3)=X(4)。
因此得(BD)+=ABCDEG
上述计算X+的算法可用数学归纳法证明是正确的,证明如下:
∵X(0)=X,∴X(0)⊆X+是显然的
设X(i)⊆X+,在X(i+1)中所增加的部分B是在W中,满足V→W是F中函数依赖,而且V⊆X(i)。
由于X(i)⊆X+,所以V⊆X+。
根据引理2,则有X→V。
由于B⊆W,所以根据自反律,有W→B。
由于X→V,V→W,W→B,根据传递律得X→B,所以B⊆X+,即X(i+1)⊆X+,当X(i+1)=X(i)或X(i+1)=U时,算法终止。
证明完毕。
5.2属性集闭包及公理完备性举例说明
要证明完备性,就要说明F+中的每一个函数依赖都可以由F出发根据Armstrong公理推导出来,但要求出F+中的每一个函数依赖是很难的,这是一个NP完全问题,指数级问题。
比如从F={X→A1,…,X→An}出发,我们至少可以推导出2的n次方个不同的函数依赖,举个例子:
【例4】考虑给定的函数依赖集合F
F={A→B,B→C,C→D,D→E,E→F,F→G,G→H}
由传递律,A→B和B→C可以推导出A→C,它一定包含在F+中。
同样,B→C和C→D推导出B→D。
实际上,如果在序列ABCDEFGH中一个属性出现在最后一个前面,那么它可以通过传递律来函数决定序列中出现在它右边的每一个属性。
我们也有平凡函数依赖如A→A。
下一步,使用合并规则,我们可以生成其他函数依赖,例如A→ABCDEFGH。
事实上,通过在不同的组合中使用合并规则,我们可以得到A→(任何ABCDEFGH的非空子集)。
有2的8次方减1,255个这样的非空子集。
上面推导出的所有函数依赖都包含在F+中。
下面给出Armstrong公理系统完备性的证明:
它的证明分三步:
1.若V→W成立,且V⊆Xf+,则W⊆XF+。
因为V⊆Xf+,所以有X→V成立;
于是X→W成立(因为X→V,V→W),所以W⊆XF+。
2.构造一张二维表r,它由下列两个元组构成,可以证明r必是R﹤U,F﹥的一个关系,即F中的全部函数依赖在r上成立。
XU-Xf+
11………100………0
11………111………1
若r不是R〈U,F〉的关系,则必由于F中有某个函数依赖V→W在r上不成立所致。
由r的构成可知,V必定是Xf+的子集,而W不是Xf+的子集,可是由1,W⊆XF+,矛盾。
所以r必是R(U,F)的一个关系。
3.若X→Y不能由F从Armstrong公理导出,则Y不是XF+的子集,因此必有Y⊆U-XF+,则X→Y在r中不成立,即X→Y必不为R(U,F)蕴涵。
所以任何不能由F按公理推理得出的函数依赖,R是不能满足的,也就是说R所满足的函数依赖都能按公理推出。
这就证明了公理的完备性。
Armstrong公理的完备性及有效性说明了“导出”与“蕴涵”是两个完全等阶的概念。
于是F+也可以说成是由F出发借助Armstrong公理导出的函数依赖的集合。
6 判断函数依赖蕴含的算法
6.1算法说明
接下来我们对判断函数依赖蕴含的算法问题进行一下讨论:
判断函数依赖蕴涵的算法
要判断函数依赖X→Y是否为F所蕴涵,即是否能由F出发根据Armstrong公理导出,就可以利用引理2,如果Y⊆XF:
则X→Y为F所蕴涵。
属性集闭包是我们所进行行开发中的一个重要里程碑。
它给我们提供了一般方法来确定是否一个给定的函数依赖可以从函数依赖集F推导出来,而不用担心在例5中所说的计算F+时可能出现的指数级膨胀。
从F计算F+是指数级时间,但从属性集X求Xf+并不太难,花费的时间与F中全部依赖的数目成正比,是一个多项式级时间问题。
当然我们推导出F+中的全部函数依赖没有什么意义,只要有针对性的判断或推导就可以了。
XF+可通过算法1来解决。
算法l求属性集X(X⊆U)关于U上的函数依赖集F的闭包Xf+。
输入:
X,F
输出:
Xf+
步骤:
1.令X(0)=X,i=0
2.求B,这里B={A∣(∃V)(∃W)(V→W∈F∧V⊆X(i)∧A∈W)};
3.X(i+1)=B∪X(i)
4.判断X(i+1)=X(i)吗?
5.若相等或X(i+1)=U,则X(i+1)就是Xf+,算法终止。
6.若否,则i=i+1,返回第2步。
或者写为:
result:
=X;
repeat
forF中每个Y→Zdo
ifYresultthenresult:
=result∪Z;
until(result没有改变);
result即所求的XF+。
例1:
已知关系模式R﹤U,F﹥,
其中U={A,B,C,D,E};
F={AB→C,B→D,C→EEC→BAC→B}。
求X(0)=AB;
计算X
(1);
逐一扫描F集合中各个函数依赖,,找左部为A,B,或AB的函数依赖。
得到两个:
AB→C,B→D。
于是X
(1)=ABUCD=ABCD。
因为X(0)≠(X
(1),所以再找出左部为ABCD子集的那些函数依赖,又得到
C→E,AC→B,于是X
(2)=X
(1)UBE=ABCDE。
因为X
(2)已等于全部属性集合,所以(AB)F+=ABCDE。
若要判断AB→CDE是否为F所蕴涵,则看CDE是否属于(AB)F+,由于通过计算得知(AB)f+=ABCDE,所以根据引理2可知AB→CDE能由F