您的位置:首页 > 数据库

数据库——设计关系模式要用的概念

2017-06-14 21:42 288 查看

函数依赖 闭包 自反 增广 传递 范式 关系模式的分解

来不及解释了,快上车!!~~~

函数依赖

1.函数依赖(FD)是关系模式内最常见的数据依赖,属于语义范畴的概念

2. 函数依赖定义为:设R(U)是属性集U上的关系模式。X,Y是U的子集,若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则成X函数确定Y或者Y函数依赖与X, 记作:X→Y。

3. 平凡的函数依赖:如果X→Y,但Y∈X,则称X→Y是平凡的函数依赖

4. 非平凡的函数依赖:如果X→Y,但Y∉X,则称X→Y是非平凡的函数依赖。通常情况下总是讨论非平凡的函数依赖

5. 完全函数依赖:在R(U)中,如果X→Y,并且对于x的任何一个真子集X’,都有X´不能决定Y,则称Y对X完全函数依赖,记作:X-f->Y (f即 full)

6. 部分函数依赖:在R(U)中,如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作:X-p->Y (p即part) 部分函数依赖也称为局部函数依赖

7. 传递依赖:在R(U,F)中,如果X→Y,Y∉X,Y→Z,Y不完全函数依赖于X,则称Z对X传递依赖

8. 候选码:设K为R(U,F)中属性的组合,若K-f->U,且对于K的任何一个真子集K’,都有K’不能决定U,则K为R的候选码(候选关键字)。若有多个候选码,则选其中一个座位主码(主键),包含在任何一个候选码中的属性称之为主属性,反之称之为非主属性

函数依赖的逻辑蕴涵

定义:设有关系模式R(U)及其函数依赖集F,如果对于R的任一个满足F的关系r函数依赖X→Y都成立,则称F逻辑蕴涵X→Y,或称X→Y可以由F推出。

例:关系模式 R=(A,B,C),函数依赖集F={A→B,B→C}, F逻辑蕴涵A→C。

证:设u,v为r中任意两个元组:

若A→C不成立,则有u[A]=v[A],而u[C]≠v[C]

而且A→B, B→C,知

u[A]=v[A], u[B]=v[B], u[C]=v[C],

即若u[A]=v[A]则u[C]=v[C],和假设矛盾。

故F逻辑蕴涵A→C。

满足F依赖集的所有元组都函数依赖X→Y(X→Y不属于F集),则称F逻辑蕴涵X→Y

(X→Y由F依赖集中所有依赖关系推断而出)

Armstrong公理

1、定理:若U为关系模式R的属性全集,F为U上的一组函数依赖,设X、Y、Z、W均为R的子集,对R(U,F)有:

F1(自反性):若X≥Y(表X包含Y),则X→Y为F所蕴涵;(F1’:X→X)

F2(增广性): 若X→Y为F所蕴涵,则XZ→YZ为F所蕴涵;(F2’:XZ→Y)

F3(传递性): 若X→Y,Y→Z为F所蕴涵,则X→Z为F所蕴涵;

F4(伪增性):若X→Y,W≥Z(表W包含Z)为F所蕴涵,则XW→YZ为F所蕴涵;

F5(伪传性): 若X→Y,YW→Z为F所蕴涵, 则XW→Z为F所蕴涵;

F6(合成性): 若X→Y,X→Z为F所蕴涵,则X→YZ为F所蕴涵;

F7(分解性): 若X→Y,Z≤Y (表Z包含于Y)为F所蕴涵,则X→Z为F所蕴涵。

函数依赖推理规则F1∽F7都是正确的。

2、Armstrong公理:

推理规则F1、F2、F3合称Armstrong公理;

F4 ∽ F7可由F1、F2、F3推得,是Armstrong公理的推论部分。

函数依赖的闭包

 

定义:若F为关系模式R(U)的函数依赖集,我们把F以及所有被F逻辑蕴涵的函数依赖的集合称为F的闭包,记为
4000
F+。

即:F+={X→Y|X→Y∈F∨“应用Armstong公理从F中导出的任何X→Y”}

△ F包含于F+,如果F=F+,则F为函数依赖的一个完备集。
△ 规定:若X为U的子集,X→Φ 属于F+。

例:R=ABC,F={A→B, B→C}, 求F+
解: F+ ={A→Φ,AB→Φ,AC→Φ,ABC→Φ,B→Φ,C→Φ,
A→A,AB→A,AC→A,ABC→A,B→B,C→C,
A→B,AB→B,AC→B,ABC→B,B→C,
A→C,AB→C,AC→C,ABC→C,B→BC,
A→AB,AB→AB,AC→AB,ABC→AB,BC→Φ,
A→AC,AB→AC,AC→AC,ABC→AC,BC→B,
A→BC,AB→BC,AC→BC,ABC→BC,BC→C,
A→ABC,AB→ABC,AC→ABC,ABC→A,BC→BC}

例:已知关系模式R中
U={A,B,C,D, E, G},
F={AB→C, C→A, BC→D, ACD→B, D→EG, BE→C, CG→BD, CE→AG},判断BD→AC是否属于F+

解:由D→EG知D→E,BD→BE             … ①
又知BE→C,C→A 所以BE→A, BE→AC … ②
由①、②知,BD→AC,所以BD→AC被F所蕴涵,即BD→AC属于F+

例:已知关系模式R中
U={A,B,C,E, H, P, G},
F={AC→PE, PG→A, B→CE, A→P, GA→B, GC→A, PAB→G, AE→GB, ABCP→H},证明BG→HE属于F+
证:由B→CE知B→C,B→E, BG→GC         … ①
又知GC→A,A→P 所以BG→A, BG→ABCP … ②
又ABCP→H,由①、②知BG→HE,所以BG→HE被F所蕴涵,
即BG→HE属于F+


属性集闭包

 

1、定义:若F为关系模式R(U)的函数依赖集,X是U的子集,则由Armstrong公理推导出的所有X→Ai所形成的属性集

例:设R=ABC,F={A→B, B→C}当X分别为A,B,C是求X+。

解:当X=A时,X+=ABC

当X=B时,X+=BC

当X=C时,X+=C

* X代表的属性集可以决定的属性集(包括本身)

2、定理:当且仅当Y属于X+时,X→Y能根据Armstron公理由F导出。

证:设Y=A1,A2,…,An

①充分条件:当Y属于X+时,对于每个i,X→Ai可由公理导出。

再用合并规则可得X→Y。

②必要条件:若X→Y能够由公理导出,则根据分解规,

X→Ai(i=1,2,…,n)成立,所以Y属于X+。

3、计算X+

(1)算法依据:若F为关系模式R(U)的函数依赖集,X,Z,W是U的子集,对于任意的Z→W∈F,若 X≥Z(表X包含Z),则X→XW。

(2)算法:

a.令X+ = X;

b.在F中依次查找每个没有被标记的函数依赖,若“左边属性集”包含于X+ ,则令 X+ = X+∪“右边属性集”,为被访问过的函数依赖设置访问标记。

c.反复执行b直到X+不改变为止。

(先令X+等于本身,然后在F+中依次查找左边包含于X+的属性,把其右边的对应属性并到X中)

(3)算法实现

输入:关系模式R的子集X,R上的函数依赖集F。

输出:X关于F的闭包X+

算法伪语言描述:

Closure(X,F)

{

olds=Φ; news=X; G=F;

while (olds!=news)

{

olds=news;

for (G中的每个函数依赖W→Z)

{

if (news包含W)

{

news=news∪Z;

从G中删除函数依赖W→Z;

}

}

}

return news;

}

例:已知关系模式R中

U={A,B,C,D, E, G},

F={AB→C, C→A, BC→D, ACD→B, D→EG, BE→C, CG→BD, CE→AG},

求(BD)+,判断BD→AC是否属于F+

解:X+=BDEGCA

结论:(BD)+=ABCDEG,BD→AC可由F导出,即BD→AC属于F+

例:已知关系模式R中

U={A,B,C,E, H, P, G},

F={AC→PE, PG→A, B→CE, A→P, GA→B,GC→A, PAB→G, AE→GB, ABCP→H},

证明BG→HE属于F+

证:因为,(BG)+ =ABCEHPG,

所以BG→HE可由F导出,即BG→HE属于F+

4、结论

判定函数依赖X→Y是否能由F导出的问题,可转化为求X+并判定Y是否是X+子集的问题。

即求闭包问题可转化为求属性集问题。

判定给定函数依赖X→Y是否蕴涵于函数依赖集F算法实现:

输入:函数依赖集合F,函数依赖X→Y

输出:若X→Y∈F+输出真,否则输出假

算法伪语言描述:

number(F,X→Y)

{ if (Y包含于close(X,F))

return 真

else

return 假

}

{Ai|i=1,2,…}称为X对于F的闭包,记为X+。

关系模式的分解

关系模式的分解有几个不同的衡量标准:①分解具有无损连接;②分解要保持函数依赖;③分解既要保持函数依赖,又要具有无损连接

无损连接性判定定理:关系模式R分解为两个关系模式R1和R2,满足无损连接性的充分条件是R1∩R2→(R1-R2)或R1∩R2→(R2-R1)

保持函数依赖的定义是:若满足(F1∪F2)+=F+,则分解保持函数依赖,其中Fi函数依赖集F在Ri上的投影

在泛关系模式R分解成数据库模式ρ={R1,R2…Rk}时,泛关系r在ρ的每一模式Ri(1≤i≤n)上投影后再连接起来,比原来r中多出来的元组,称为“寄生元组”或外元组。实际上,寄生元组表示错误的信息

先存在r(泛关系)的情况下,再去谈论分解,这是关系数据库理论中著名的泛关系假设

在无泛关系假设时,对两个关系进行自然连接中被丢失的元组称为悬挂元组

悬挂元组是造成两个关系不存在泛关系的原因

模式分解的优点:①能消除数据冗余和操作异常的现象;②在分解了的数据库中可以存储悬挂元组,存储泛关系中无法存储的信息

模式分解的缺点:①分解以后,检索操作需要做笛卡尔积或链接操作,这将付出时间代价;②在有泛关系假设时,对数据库中的关系进行自然连接时,可能产生寄生元组(即损失了信息);在无泛关系假设时,由于数据库可能存在悬挂元组,因此有可能不存在泛关系

无损分解的测试方法。①输入:关系模式R=(A1,A2…An),F是R上成立的函数依赖集,ρ={R1,R2…Rn}是R的一个分解;②输出:判断ρ相对于F是否具有无损分解特性。无损分解的测试算法如下:

1.构造一张k行n列的表格,每列对应一个属性Aj(1≤j≤n),每行对应一个模式Rj(1≤i≤k)。如果Aj在Ri中,那么在表格的第i行第j列处填上符号aj,否则填上bij。
2.把表格看成模式R的一个关系,反复检查F中每个FD在表格中是否成立,若不成立,则修改表格中的值,修改方法为:对于F中一个函数依赖X→Y,如果表格中有两行在X值上相等,在Y值上不相等,那么把这两行在Y值上也改成相等的值,如果Y值中一个是aj,那么另一个也改成aj;如果没有aj那么用其中一个bij替换另一个字(尽量把下表ij改成较小的数)。一直到表格不能修改为止,这个过程成为chase(追踪)过程
3.若修改后的最后一直表格中有一方全是a,即a1,a2...an,则称ρ相对于F是无损分解,否则称为损失分解


10.如果某个分解能保持FD集,那么在数据输入或更新时,只要每个关系模式本身的FD约束被满足,就可以确保整个数据库中数据的语义完整性不受破坏

11.关系模式在分解时应保持等价,有数据等价和依赖等价两种,分别用无损分解和保持依赖两个特征来衡量。

12.数据等价是指两个数据库实例赢表示同样的信息内容。如果是无损分解,那么对泛关系反复的投影和连接都不会丢失信息

13.依赖等价是指两个数据库模式应有相同的依赖集闭包,在依赖集闭包相等的情况下,数据的语义是不会出差错的

范式

a.范式是衡量关系模式优劣的标准,它表达了模式中数据依赖之间应满足的联系

b.第一范式(1NF):若关系模式R的每一个分量是不可分的数据项,则R∈1NF

c.2NF:若R∈1NF,且每一个非主属性完全函数依赖于码,则R属于2NF。换言之,当1NF消除了非主属性对码的部分函数依赖时,则称为2NF。典型有:捐赠信息(捐赠编号。捐赠校友,捐赠时间,受益人身份证号,受益人姓名),其中捐赠编号和受益人身份证号是主键,但是存在” 捐赠编号→捐赠校友,捐赠时间“和”受益人身份证号→受益人姓名“的部分依赖,所以这个不是2NF

d.3NF:若R∈2NF,且每一个非主属性既不部分依赖于码,也不传递依赖于码,则R∈3NF。换言之:当2NF消除了非主属性对码的部分函数传递时,称为3NF。典型有:校友信息(校友编号,姓名,工作单位,职位,院系,班级,入学年份,身份证号)班级为班级编号,包含院系编号,入学年份和专业方向编号。可以知道 校友编号应该是主键,同时身份证号也是该关系模式的决定性因素,因此他们都是候选键。由“班级→入学年份 ”和“校友编号→班级”,出现了“ 校友编号→入学年份”,虽然每一个非主属性不部分依赖与码,但是传递依赖与码了,因此这不是3NF

e.BCNF:关系模式R∈1NF,若X→Y且Y∉X时,X必含码,则R属于BCNF。换言之,当3NF消除了主属性对码的部分和传递函数依赖时,则称为BCNF。注意:BCNF是3NF消除主属性的部分和传递函数依赖,2NF 1NF晋级是消除非主属性的依赖

他们之间的相互关系是:1NF⊃2NF⊃3NF⊃BCNF

f.BCNF的关系模式都具有如下3个性质

1.所有非主属性都完全函数依赖于每个候选码
2.所有主属性都完全函数依赖于每个不包含于他的候选码
3.没有任何属性完全函数依赖于非码的任何一组属性
4.多值依赖MVD:设R(U)施属性集U上的一个关系模式,X,Y是U的子集,若对R(U)的任一关系r,对于X的一个给定的值存在着Y的一组值与其对应,同时Y的这组值又不以任何方式与U-X-Y中的属性相关,那么称Y多值依赖于X,记为X→→Y


e.4NF:关系模式R∈1NF,若对于R的每个非平凡多值依赖X→→Y且Y∉X时,X必含码,则R∈4NF

对于4NF关系进行投影,消除原关系中不是由候选码所蕴含的函数依赖,即可得到一组5NF关系,5NF是最终范

g.规范化理论提供了一套完整的模式分解算法,按照这套算法可以做到:

1.若要求分解具有无损连接性,那么模式分解一定能够达到4NF
2.若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF
3.若要求分解即具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。


h.模式设计方法的原则:关系模式R相对于函数依赖集F分解成数据库模式ρ={R1,R2,..Rn},一般应具有以下特性。

ρ中每个关系模式Ri是3NF或BCNF
保持无损连接
保持函数依赖集F
ρ中模式个数最少和属性总数最少


i.一个好的模式设计方法应符合3条原则:表达性、分离性和最小冗余性

j.表达性设计两个数据库模式的等价性问题,即数据等价和依赖等价,分别用无损连接和保持函数依赖性来衡量

k.分离性是指属性间的”独立联系“;应该用不同的关系模式表达

l.最小冗余性要求在分解后的数据库,能表达原来数据库的所有信息这个前提下实现

关系模式设计方法基本上可以分为分解与合成两大类。

选自:

函数依赖与关系模式分解的一些技巧整理

函数闭包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: