[总结]关系数据库设计基础(函数依赖、无损连接性、保持函数依赖、范式、……)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[总结]关系数据库设计基础(函数依赖、⽆损连接性、保持函数
依赖、范式、……)
≏≎≟≗≖≍≭∼∽≁≃≂≅≊≈≉≇≳⪞⪆⋧⪊≵≲⪝⪅⋦⪉≴⊂ subset ⋐⊄⊊ ⊈⊃⊇ ⋑⊅⊋ ⊉≺⪯≼⋞≾⪷⋨⪵⪹⊀≻⪰≽⋟≿⪸⋩⪶⪺⊁ in ∋∉∌∝≬⊸
函数依赖(Function Dependency)
定义
设关系模式R(U),属性集合U= {A1,A2,…,An},X,Y为属性集合U的⼦集,如果对于关系模式R(U)的任⼀可能的关系r,r中的任意两个元组u、v,若有 u[X]=v[X],就有
u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X。

⽤符号X→Y表⽰。

其中X为决定因素,Y为被决定因素。

若对于R(U)的任意⼀个可能的关系r,r中不可能存在两个元组在X上的属性值性等,⽽在Y上的属性值不等。

 (1) 函数依赖是语义范畴的概念,只能根据语义来确定⼀个函数依赖关系。

 (2) 函数依赖X→Y的定义要求关系模式R的任何可能的关系r中的元组都满⾜函数依赖条件。

术语
 (1)若X→Y,则X称作决定因素(Determinant)
 (2)若X→Y,Y→X,称作X<->Y。

 (3)若Y不函数依赖于X,称作X -/-> Y。

 (4)X→Y,若Y不包含X,即X ⊄ Y,则称X→Y为⾮平凡的函数依赖。

正常讨论的都是⾮平凡的函数依赖。

 (5)X→Y,若Y包含X,即X ⊂ Y,则称X→Y为平凡的函数依赖。

 (6)完全函数依赖(full functional dependency):在R(U)中,设X、Y是关系模式R(U)中不同的属性⼦集(即X ⊂ U,Y ⊂ U),
若存在 X→Y,且不存在 X的任何真⼦集X'(即 X' ⊊ X),使得 X'→Y,则称Y完全函数依赖 ( full functional dependency ) 于X。

记作 X-F->Y。

 (7)部分函数依赖:在关系模式R(U)中,X、Y是关系模式R(U)中不同的属性⼦集(即X ⊂ U,Y ⊂ U),
若X→Y成⽴,如果X中存在任何真⼦集X'(即 X' ⊊ X),⽽且有X'→Y也成⽴,则称Y对X是部分函数依赖,记作:X-P->Y。

(8)设R是关系模式,U是其属性集,K包含于U(即K ⊂ U)。

若K完全函数确定U,则称K是R的候选键(⼜叫候选关键字,候选码)。

包含在任意候选键内的属性称为键属性(⼜叫主属性),不是键属性的属性称为⾮键属性(⼜叫⾮主属性)。

显然,候选键可以唯⼀ 标识关系的元组。

候选键可能不唯⼀,通常指定⼀个候选键作为识别元组的主键。

 (9)若关系R的属性⼦集X是另⼀关系S的候选键,则称X是R关于S的外部键。

主键和外部键描述了关系之间的联系。

(10)传递函数依赖:在关系模式R(U) 中,如果X→Y,Y→A,且Y X(Y不决定X), A Y(A不属于Y),那么称X→A是传递依赖。

⼀题搞懂什么是候选键
【题⽬】数据库中有⼀个学⽣信息表如上所⽰,在该表中不能作为候选键的属性集合为()(选择⼀项)
a){学号} b){学号、姓名} c){年龄、系别} d){姓名、性别} e){姓名、专业}
【解析】透过概念,我们可以了解到,超键包含着候选键,候选键中包含着主键。

主键⼀定是惟⼀的。

为什么呢?因为他的爷爷超键就是惟⼀的。

我们分析⼀下上⾯的题⽬,a,b,c,d,e,5个答案都可以作为超键,他们组合在⼀起的集合可以⽤来惟⼀的标识⼀条数据记录(实体)。

请注意我们的要求:候选键。

候选键要求是不能包含多余属性的超键,我们看⼀下答案b。

在答案b中,如果我们不使⽤姓名也可以惟⼀的标识⼀条数据实体,可以说姓名字段在这⾥是多余的。

那么很明显,b选项包含了多余字段属性。

那么这题答案应该选择b。

那么其他的4个选项都可以作为候选键,假设很幸运,a){学号}被选择作为⽤户正在使⽤的候选键来惟⼀标识元组了,那么他很幸运的获得了主键的称号
【答案】b
函数依赖的推理规则
1. 逻辑蕴含
给定⼀个关系模式,只考虑给定的函数依赖是不够的,必须找出在该关系模式上成⽴的其他函数依赖。

逻辑蕴含:设F是关系模式R(U)的函数依赖集合,由F出发,可以证明其他某些函数依赖也成⽴,我们称这些函数依赖被F逻辑蕴含。

"F蕴含X→Y"意味着关系实例只要满⾜F就满
⾜X→Y。

例如,设F={ A→B,B→C },则函数依赖A→C被F逻辑蕴含,记作:F |= A→C。

即函数依赖集 F 逻辑蕴含函数依赖A→C。

2. F的闭包F+
对于⼀个关系模式,如何由已知的函数依赖集合F,找出F逻辑蕴涵的所有函数依赖集合呢?这就是我们下⾯要讨论的问题。

F的闭包F+:设F为⼀个函数依赖集,F的闭包是指F逻辑蕴涵的所有函数依赖集合。

F的闭包记作F+。

例如,给定关系模式R(A,B,C,G,H,I),函数依赖集合F={A→B,A→C,CG→H,CG→I,B→H}。

可以证明函数依赖A→H被F逻辑蕴涵。

设有元组s和t,满⾜s[A]=t[A],根据函数依赖的定义,由已知的A→B,可以推出s[B]=t[B]。

⼜根据函数依赖B→H,可以有 s[H]=t[H]。

因此,已经证明对任意的两个元组s和t,只要有s[A]=t[A],就有s[H]=t[H]。

所以,函数依赖A→H被F逻辑蕴涵。

计算F的闭包F+,可以由函数依赖的定义直接计算,如上⾯的⽰例。

当F很⼤时,计算的过程会很长。

为了从已知的函数依赖推导出其它函数依赖,Armstrong 提出了⼀套推理规则,称为Armstrong 公理,通过反复使⽤这些规则,可以找出给定F的闭包F+。

3.Armstrong 公理
设U为属性总体集合,F为U上的⼀组函数依赖集,对于关系模式R(U,F),X、Y、Z为属性U的⼦集,有下列推理规则:
在此先说⼀下 Armstrong 的基本公理和推理规则:
基本公理:
1)(⾃反律)如果 Y ∈ X∈ U,则 X → Y 成⽴。

(平凡函数依赖)
2)(增⼴律)如果 X → Y 在 R(U) 成⽴,且 Z∈ U,则 XZ → YZ成⽴
3)(传递律)如果 X → Y,Y → Z 成⽴,则 X → Z 成⽴。

推理规则:
1)(合并):{X → Y,X → Z},则 X → YZ
2)(分解):{X → Y,Z ∈ Y},则 X → Z。

(或:X → YZ,那么 X → Y,X → Z)
3)(伪传递):{X → Y,YW → Z},则 WX → Z
4)(复合):{X → Y,W → Z},则 XW → YZ
5)(⾃积律):{X → YZ,Z → W},则 X → YZW
4.属性集的闭包
原则上讲,对于⼀个关系模式R(U,F),根据已知的函数依赖F,反复使⽤前⾯的规则,可以计算函数依赖集合F的闭包F+。

但是,利⽤推理规则求出其全部的函数依赖F+是⾮常困难的,⽽且也没有必要。

因此,可以计算闭包的⼦集,即选择⼀个属性⼦集,判断该属 性⼦集能函数决定哪些属性,这就是利⽤属性集闭包的概念。

 (1)属性集闭包的定义
设F为属性集U上的函数依赖集,X∈U,即X为U的⼀个⼦集。

在函数依赖集F下被X函数决定的所有属性为F+下属性集X的闭包,记作X+。

即X+={ A| X→A } 。

 (2)计算属性集闭包X+的算法如下:
输⼊:X,F
输出: X+
迭代算法的步骤:
①选取X+的初始值为X ,即X+={X};
②计算X+, X+={X,Z} ,其中Z要满⾜如下条件:
Y是X+的真⼦集,且F中存在⼀函数依赖Y→Z。

实际上就是以X+中的属性⼦集作为函数依赖的决定因素,在F中搜索函数依赖集,找到函数依赖的被决定属性Z放到X+中。

③判断:如果X+没有变化?或X+等于U?则X+就是所求的结果,算法终⽌。

否则转②。

 因为U是有穷的,所以上述迭代过程经过有限步骤之后就会终⽌。

5. Armstrong公理系统的有效性和完备性
①Armstrong公理系统的有效性指的是:由F出发根据Armstrong公理系统推导出来的每⼀个函数依赖⼀定是F所逻辑蕴含的函数依赖。

②Armstrong公理系统的完备性指的是:对于F所逻辑蕴含的每⼀函数依赖,必定可以由F出发根据Armstrong公理系统推导出来。

6. 极⼩函数依赖集(最⼩函数依赖集)
概念:对于函数集 F ,称函数集F min为F 的最⼩函数依赖集,如果 F min满⾜⼀下条件:
1)F min与 F等价:F min+=F+。

2)F min中每个函数依赖 X→Y 的依赖因素为单元素集,即Y中只含有⼀个属性集合。

3)F min中每个函数依赖 X→Y的决定因素不存在冗余,即既要删除X中任何⼀个属性,就会改变F min的闭包。

4)F min中每个函数毒不是冗余的,即删除 F min中任意⼀个函数依赖,就会改变Fmin 的闭包。

定义:如果函数依赖集F满⾜下列条件,则称F为最⼩函数依赖集或最⼩覆盖。


① F中的任何⼀个函数依赖的右部仅含有⼀个属性;
② F中不存在这样⼀个函数依赖X→A,使得F与F-{X→A}等价;
③ F中不存在这样⼀个函数依赖X→A,X有真⼦集Z使得F-{X→A}∪{Z→A}与F等价。


求最⼩函数依赖集分三步:
1.将F中的所有依赖右边化为单⼀元素
此题fd={abd->e,ab->g,b->f,c->j,cj->i,g->h};已经满⾜
2.左边的冗余属性.
作法是属性中去掉其中的⼀个,看看是否依然可以推导
此题:abd->e,去掉a,则(bd)+不含e,故不能去掉,同理b,d都不是冗余属性
ab->g,也没有
cj->i,因为c+={c,j,i}其中包含i所以j是冗余的.cj->i将成为c->i
F={abd->e,ab->g,b->f,c->j,c->i,g->h};
3.去掉F中所有冗余依赖关系.
做法为从F中去掉某关系,如去掉(X->Y),然后在F中求X+,如果Y在X+中,则表明x->是多余的.需要去掉.
此题如果F去掉abd->e,F将等于{ab->g,b->f,c->j,c->i,g->h},⽽(abd)+={a,d,b,f,g,h},其中不包含e.所有不是多余的.
同理(ab)+={a,b,f}也不包含g,故不是多余的.
b+={b}不多余,c+={c,i}不多余
c->i,g->h多不能去掉.
所以所求最⼩函数依赖集为 F={abd->e,ab->g,b->f,c->j,c->i,g->h};
多值依赖
1、定义
设R(U)是属性集U上的⼀个关系模式。

X,Y,Z是U的⼦集,并且Z=U-X-Y。

关系模式R(U)中多值依赖X→→Y成⽴,当且仅当对R(U)的任⼀关系r,给定的⼀对(x,z)值有⼀组Y的值,这组值仅仅决定于x值⽽与z值⽆关。

若X→→Y,⽽Z=,则称X→→Y为平凡的多值依赖。

否则称X→→Y为⾮平凡的多值依赖。

多值依赖也可以形式化地定义如下:在关系模式R(U)的任⼀关系r中,如果对于任意两个元组t,s,有t[X]=s[X],就必存在元组w,v∈r(w和v 可以与s和t相同),使得 w[X]=v[X]=t[X],⽽w[Y]=t[Y],w[Z]=s[Z],v[Y]=t[Z],即交换s,t元组的Y值所得的两个新元组必在r中,则称Y多值依赖于X,记为X→→Y。

其中,X和Y是U的⼦集,Z=U-X-Y。

多值依赖属4nf的定义范围,⽐函数依赖要复杂得多,很多书上都没有讲清楚。

2、说得简单点就是
在关系模式中,函数依赖不能表⽰属性值之间的⼀对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖的数据依赖。

例如,教师和学⽣之间没有直接联系,但教师和学⽣可通过系名,或任课把教师和学⽣联系起来。

3、举例如下
【例1】有这样⼀个关系 <仓库管理员,仓库号,库存产品号> ,假设⼀个⼀个产品只能放到⼀个仓库中,但是⼀个仓库可以由若⼲管理员,那么对应于⼀个 <仓库管理员,库存产品〉有⼀个仓库号,⽽实际上,这个仓库号只与库存产品号有关,与管理员⽆关,就说这是多值依赖。

【例2】(C,B)上的⼀个值(物理,光学原理)对应⼀组T值(李平,王强,刘明),这组值仅仅决定于课程C上的值,也就是说对于(C,B)上的另⼀个值(物理,普通物理学),它对应的⼀组T值仍是(李平,王强,刘明),尽管这时参考书B的值已经改变了。

因此T 多值依赖于C,即C→→T。

4、多值依赖具有下列性质
●多值依赖具有对称性。

即若X→→Y,则X→→Z,其中Z=U-X-Y。

●多值依赖具有传递性。

即若X→→Y,Y→→Z,则X→→Z-Y。

●函数依赖可以看作是多值依赖的特殊情况。

●若X→→Y,X→→Z,则X→→YZ。

●若X→→Y,X→→Z,则X→→Y∩Z。

●若X→→Y,X→→Z,则X→→Y-Z,X→→Z-Y。

●多值依赖的有效性与属性集的范围有关。

●若多值依赖X→→Y在R(U)上成⽴,对于Y'Y,并不⼀定有X→→Y’成⽴。

但是如果函数依赖X→Y在R上成⽴,则对于任何Y'Y均有X→Y’成⽴。

范式
⽆重复的列】
• 如果关系模式R为第⼀范式,并且R中每⼀个⾮主属性完全函数依赖于R的某个候选键,则称为第⼆范式模式。

【消去⾮主属性对键的部分函数依赖】
缺点:删除异常,插⼊异常,修改复杂
消去⾮主属性对键的部分和传递函数依赖】
部分和传递函数依赖】
X),X都含有码,则称R∈4NF。

【消除⾮平凡且⾮函数依赖的多值依赖】
⾸先我们给出⼀个看似⽆关却⾮常重要的概念:属性集的闭包。

令α为⼀属性集。

我们称在函数依赖集F下由α函数确定的所有属性的集合为F下α的闭包,记为α+ 。

下⾯给出⼀个计算α+的算法,该算法的输⼊是函数依赖集F和属性集α,输出存储在变量result中。

算法⼀:
result:=α;
while(result发⽣变化)do
for each 函数依赖β→γ in F do
begin
if β∈result then result:=result∪γ;
end
属性集闭包的计算有以下两个常⽤⽤途:
·判断α是否为超码,通过计算α+(α在F下的闭包),看α+ 是否包含了R中的所有属性。

若是,则α为R的超码。

·通过检验是否β∈α+,来验证函数依赖是否成⽴。

也就是说,⽤属性闭包计算α+,看它是否包含β。

(请原谅我⽤∈符号来表⽰两个集合之间的包含关系,那个表⽰包含的符号我找不到,⼤家知道是什么意思就⾏了。


看⼀个例⼦吧,2005年11⽉系分上午37题:
●给定关系R(A1,A2,A3,A4)上的函数依赖集F={A1→A2,A3→A2,A2→A3,A2→A4},R的候选关键字为________。

(37)A. A1 B. A1A3 C. A1A3A4 D. A1A2A3
⾸先我们按照上⾯的算法计算A1+ 。

result=A1,
由于A1→A2,A1∈result,所以result=result∪A2=A1A2
由于A2→A3,A2∈result,所以result=result∪A3=A1A2A3
由于A2→A4,A2∈result,所以result=result∪A3=A1A2A3A4
由于A3→A2,A3∈result,所以result=result∪A2=A1A2A3A4
通过计算我们看到,A1+ =result={A1A2A3A4},所以A1是R的超码,理所当然是R的候选关键字。

此题选A 。

好了,有了前⾯的铺垫,我们进⼊正题。

⽆损分解的判断。

如果R1∩R2是R1或R2的超码,则R上的分解(R1,R2)是⽆损分解。

这是⼀个充分条件,当所有的约束都是函数依赖时它才是必要条件(例如多值依赖就是⼀种⾮函数依赖的约束),不过这已经⾜够了。

保持依赖的判断。

如果F上的每⼀个函数依赖都在其分解后的某⼀个关系上成⽴,则这个分解是保持依赖的(这是⼀个充分条件)。

如果上述判断失败,并不能断⾔分解不是保持依赖的,还要使⽤下⾯的通⽤⽅法来做进⼀步判断。

该⽅法的表述如下:
算法⼆:
对F上的每⼀个α→β使⽤下⾯的过程:
result:=α;
while(result发⽣变化)do
for each 分解后的Ri
t=(result∩Ri)+ ∩Ri
result=result∪t
这⾥的属性闭包是在函数依赖集F下计算出来的。

如果result中包含了β的所有属性,则函数依赖α→β。

分解是保持依赖的当且仅当上述过程中F的所有依赖都被保持。

下⾯给出⼀个例题,2006年5⽉系分上午43题:
●设关系模式R<U, F>,其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},则分解ρ={R1(ABCE),R2(CD)}满⾜(43)。

(43) A.具有⽆损连接性、保持函数依赖
B.不具有⽆损连接性、保持函数依赖
C.具有⽆损连接性、不保持函数依赖
D.不具有⽆损连接性、不保持函数依赖
先做⽆损链接的判断。

R1∩R2={C},计算C+。

Result=C
由于C→D,C∈result,所以result=result∪D=CD
可见C是R2的超码,该分解是⼀个⽆损分解。

再做保持依赖的判断。

A→BC,BC→E, E→A都在R1上成⽴(也就是说每⼀个函数依赖左右两边的属性都在R1中),C→D在R2上成⽴,因此给分解是保持依赖的。

选A。

再看⼀个复杂点的例题。

2007年5⽉数⼯40-41题。

●给定关系模式R<U, F>,U={A, B, C, D, E},F={B→A,D→A,A→E,AC→B},其候选关键字为
(40),则分解ρ={R1(ABCE),R2(CD)}满⾜(41)。

(40) A.ABD
B.ABE
C.ACD
D.CD
(41) A.具有⽆损连接性、保持函数依赖
B.不具有⽆损连接性、保持函数依赖
C.具有⽆损连接性、不保持函数依赖
D.不具有⽆损连接性、不保持函数依赖
看见了吧,和前⾯⼀题多么的相像!
对于第⼀问,分别计算ABCD四个选项的闭包,
(ABD)+ = { ABDE }
(ABE)+ = { ABE }
(ACD)+ = { ABCDE }
(CD)+ = { ABCDE }
选D。

再看第⼆问。

先做⽆损链接的判断。

R1∩R2={C},计算C+。

result=C
因此C既不是R1也不是R2的超码,该分解不具有⽆损分解性。

再做保持依赖的判断。

B→A,A→E,AC→B在R1上成⽴,D→A在R1和R2上都不成⽴,因此需做进⼀步判断。

由于B→A,A→E,AC→B都是被保持的(因为它们的元素都在R1中),因此我们要判断的是D→A是不是也被保持。

对于D→A应⽤算法⼆:
result=D
对R1,result∩R1=ф(空集,找不到空集的符号,就⽤这个表⽰吧),t=ф,result=D
再对R2,result∩R2=D,D+ =ADE ,t=D+ ∩R2=D,result=D
⼀个循环后result未发⽣变化,因此最后result=D,并未包含A,所以D→A未被保持,该分解不是保持依赖的。

选D。

相关文档
最新文档