函数依赖(理论及举例)
函数依赖(理论及举例)
教你如何理解函数依赖
一、函数依赖的概念
函数依赖:函数依赖就是讨论一个数据表(关系)中属性值之间所存在的函数关系。函数是一种数学中的概念,被引入到数据库中对数据的联系进行分析。
在一个关系中,属性相当于数学上的变量,属性的域相当于变量的取值范围,属性在一个元组上的取值相当于属性变量的当前值。
例如:在下面的这个职工关系中,职工号、姓名、性别、年龄、职务等属性都相当于变量;职工号属性的域,即四位十进制数字,就是取值范围,性别属性的域:{男、女},就是性别属性的取值范围。此关系中包含有6个元组,如第2个元组为{3051、刘平、男、48、副处},其中的每个属性值都是对应属性在该元组上的当前值。
单值函数和多值函数:元组中一个属性或一些属性值对另一个属性值的影响相当于自变量值对函数值的影响。当给定一个自变量值能求出唯一的一个函数值时,称此为单值函数或单映射函数,否则为多值函数。在单值函数中由自变量的一个值确定函数的一个值,但不同的自变量值允许具有相同的函数值。如f(x)=2x,
f(n)=(-1)^n, f(x)=x^3+1等都是单值函数,由自变量x或n的值能够唯一确定f(x)或f(n)的值。 属性的单值函数决定(依赖):在一个关系中,若一个或一组属性的值对另一个或一组属性值起到决定性的作用,则称为单值函数决定(依赖)。如上表中职工号的值就能够函数决定其余每个属性的值,也就是说,当职工号给定后,其他每个属性的值就跟着唯一地确定了。如假定职工号为3074,则他的姓名必定是王海,性别必定为男,年龄必定为32岁,职务必定为正科。这就叫做职工号能够分别单值函数决定姓名、性别和年龄属性,反过来,可以说姓名、性别和年龄等属性单值函数依赖于职工号属性。
二、函数依赖的定义
定义:设一个关系为R(U),X和Y为属性集U上的子集,若对于X上的每个值都有Y上的一个唯一值与之对应,则称X和Y具有函数依赖关系,并称X函数决定Y,或称Y函数依赖于X,记作X→Y,称X为决定因素。
例如:设一个职工关系为(职工号,姓名,性别,年龄,职务),职工号用来标识每个职工,选作为该关系的主码。对于该关系中每个职工的职工号,都对应着姓名属性中的唯一值,即该职工的姓名,或者说一个职工的姓名由其职工号唯一确定,所以称职工号函数决定姓名,或称姓名函数依赖于职工号,记作“职工号→姓名”,职工号为该函数依赖的决定因素。同理,当一名职工的职工号被确定之后,它所对应的性别、年龄、职务等属性值就被唯一确定下来了,所以职工号函数决定性别、年龄、职务等描述职工特征的每个属性,可以分别记作为“职工号→性别”、“职工号→年龄”、“职工号→职务”。
在该关系中除职工号外,其他属性都不能成为决定因素形成函数依赖,因为对于它们的每个属性值,都可能对应另一属性的多个不同的取值。如对于性别属性的一个取值“男”就会对应多个而不是一个职工号,此不是单值函数依赖,而是多值函数依赖,所以不能由性别来决定职工号。
相互函数依赖:在这个职工关系中,若规定不允许职工有重名,则姓名也能够唯一标识一个元组,这样姓名也能够函数确定其他每个属性,此时职工号和姓名在取值上一一对应,相互成为决定因素,即构成相互函数依赖,记作为“职工号←→姓名”。但通常是允许职工重名的,因为不应该让已经重名的职工重新起名,这样姓名就不能成为关系的候选码,就不能函数决定其他任何属性。
若一个关系中的属性子集X不能函数决定另一个属性子集Y,则记作XY,读作X不能函数决定Y,或Y不能函数依赖于X。 三、平凡和非平凡函数依赖
定义:设一个关系为R(U),X和Y为属性集U上的子集,若X→Y且X不包含Y,则称X→Y为非平凡函数依赖,否则若XY则必有X→Y,称此X→Y为平凡函数依赖。
例如:在一个职工关系中,职工号总能函数决定它本身,记作“职工号→职工号”,对于任一个给定的职工号,都有它本身的职工号值唯一对应,此为平凡函数依赖。又如:职工号和性别构成的属性子集总是能够函数决定其中的职工号或性别属性,可分别记作为“(职工号,性别)→职工号”和“(职工号,性别)→性别”,因为对于任何给定的一个元组中的职工号和性别的组合值,都唯一对应一个职工号值或性别值,不可能出现其他的职工号值或性别值,此种也为平凡函数依赖。
通常,主要讨论的是非平凡函数依赖,即X→Y且XY。如在职工关系中,职工号函数决定其他每个属性都是非平凡函数依赖,另外“(职工号,姓名)→性别”也是非平凡函数依赖,虽然在这里由决定因素中所含的职工号单属性就能够函数决定性别,而带有的姓名属性有些多余。
四、完全和部分函数依赖
定义:设一个关系为R(U),X和Y为属性集U上的子集,若存在X→Y,同时X的一个真子集X’也能够函数决定Y,即存在X’→Y,则称X→Y的函数依赖为部分函数依赖,或者说,X部分函数决定Y,Y部分函数依赖于X;否则若在X中不存在一个真子集X’,使得X’也能够函数决定Y,则称X完全函数决定Y,或Y完全函数依赖于X。X→Y的部分函数依赖也称为局部函数依赖。
例如:在上面介绍的职工关系中,职工号同其他每个属性之间的函数依赖都是完全函数依赖,因为职工号是一个单属性决定因素,它不可能再包含其他任何属性,也就不可能存在真子集函数决定其他每个属性的情况存在。另外,如“(职工号,性别)”的值虽然能够函数决定相应职工的年龄,但其中的真子集职工号就能够函数决定其年龄,所以(职工号,性别)到年龄之间的函数依赖为部分函数依赖。即在“(职工号,性别)→年龄”的函数依赖中存在着“职工号→年龄”的函数依赖。
又例如:设一个教师任课关系为(教工号,姓名,职称,课程号,课程名,课时数,课时费),该关系给出某个学校每个教师在一个学期内任课安排的情况,假定每个教师可以讲授多门课程,每门课程可以由不同教师来讲授。
侯选码:在该关系中,由教工号和课程号的组合能够唯一确定一个元组,即确定哪个教师讲授哪门课程,所以(教工号,课程号)为关系的候选码。
函数依赖分析:一个教师的姓名和职称完全由该教师的教工号决定,所以该关系中存在“教工号→姓名”和“教工号→职称”这两个函数依赖。一个教师所讲授某门课程的课程名和课时数,完全由该门课程的课程号所决定,所以该关系中又存在“课程号→课程名”和“课程号→课时数”这两个函数依赖。一个教师所讲某门课程的课时费通常是由教师的职称和课程号共同决定的,即存在“(职称,课程号)→课时费”这个函数依赖,它也是一种完全函数依赖,因为职称和课程号中的任何一个属性都不能单独决定课时费的多少。
该关系的侯选码为(教工号,课程号),“(教工号,课程号)→姓名”,“(教工号,课程号)→职称”,“(教工号,课程号)→课程名”,“(教工号,课程号)→课时数”等都是部分函数依赖,因为它们前项中的一个属性就能够函数决定后面的属性。
五、传递函数依赖
定义:一个关系为R(U),X,Y和Z为属性集U上的子集,其中存在X→Y和Y→Z,但Y不决定X,同时Y不包含Z,则存在X→Z,称此为传递函数依赖,即X传递函数决定Z,Z传递函数依赖于X。
注意:在这里必须强调的是Y不反过来函数决定X,因为如果X→Y同时Y→X,则X和Y为相互决定的函数依赖关系,记作为“X←→Y”,这样X和Y是等价的,在函数依赖中是可以互换的,X→Z就是直接函数依赖,而不是传递函数依赖了。
另外,Y不包含Z也是必须满足的条件,因为如果YêZ,则X→Y必然包含着X直接函数决定Y中的每个子集,这使得X→Z为直接函数依赖而不是传递函数依赖。
例如:设一个学生关系为(学号,姓名,性别,系号,系名,系主任名),通常每个学生只属于一个系,每个系有许多学生,每个系都对应唯一的系名和系主任名。
函数依赖分析:在该关系中,学号能够函数决定姓名、性别和系号,即存在“学号→姓名”、“学号→性别”、“学号→系号”,系号又能够函数决定系名和系主任名,即存在“系号→系名”和“系号→系主任名”。由于学号决定系号,系号又决定系名和系主任名,所以给定一个学号之后也就能够唯一对应一个系名或系主任名,也就是说,在学生关系中还存在“学号→系名”和“学号→系主任名”这两个函数依赖是传递函数依赖。
六、函数依赖之间的变换规则
设一个关系为R(U),其中X、Y、Z、W是U上的子集,则函数依赖存在着以下一些常用的变换规则:
(1)自反性:若YXU,则存在X→Y。
即整体决定部分。如(学生号,课程号)→学生号。
(2)增广性:若X→Y,则存在XZ→YZ。即函数依赖的两边同时增加一个相同的属性,其函数依赖保持不变。如学生号→系号,则“(学生号,课程号)→(系号,课程号)”同样成立。
(3)传递性:若X→Y和Y→Z,则存在X→Z。
如教工号→职称,职称→职务工资,则存在教工号→职务工资。
(4)合并性:若X→Y和X→Z,则存在X→YZ。
如学生号→姓名,学生号→性别,则学生号→(姓名,性别)。
(5)分解性:若X→Y,且ZY,则存在X→Z。
如学生号→(姓名,性别),则存在学生号→姓名,学生号→性别。
(6)伪传递性:若X→Y和WY→Z,则存在WX→Z。
如教工号→职称,(职称,工龄)→基本工资,则存在(教工号,工龄)→基本工资。
(7)复合性:若X→Y和Z→W,则存在XZ→YW。
如学生号→姓名,课程号→课程名,则(学生号,课程号)→(姓名,课程名)。 (8)自增性:若X→Y,则存在WX→Y。
即在函数依赖的左边添加任何属性,其依赖关系保持不变。如学生号→姓名,则存在:(学生号,课程号)→姓名,不过由直接依赖变为部分依赖。
七、最小函数依赖
定义:设一个关系为R(U),X和Y为U的子集,若X→Y为完全函数依赖,同时Y为单属性,则称X→Y为R的最小函数依赖。由R中所有最小函数依赖构成R的最小函数依赖集,并且在最小函数依赖集中不应含有冗余的传递函数依赖。
例如:设一个关系为R(A,B,C,D),它的函数依赖集为FD={A→B,B→C,A→C,B→D},判断它是否为R的最小函数依赖集。
分析:由FD中的A→B和B→C可得到A→C,也就是说A→B和B→C中已经蕴涵A→C,所以给出的A→C是冗余的,应去掉。原FD不是R的一个最小依赖集,若修改为FD={A→B,B→C,B→D},就成为R的最小函数依赖集。
八、根据函数依赖求出关系中的侯选码
定义:设一个关系为R(U),X为U的一个子集,若X能够函数决定U中的每个属性,并且X的任何真子集都不能函数决定U中的每个属性,则称X为关系R的一个候选码。
等价定义:由于一个候选码能够函数决定关系中的每个属性,根据函数依赖的合并规则,可知候选码能够函数决定整个元组,即所有属性。所以候选码的另一个等价定义为:若关系中的一个属性或属性组能够函数决定整个元组,并且它的任何子集都不能函数决定整个元组,则它被称为该关系的一个候选码。
例如:在上面介绍过的职工关系中,职工号属性能够函数决定职工号、姓名、性别、年龄、职务等所有属性,并且职工号为单属性,不可再分,肯定不会存在任何子集能够函数决定整个元组,所以职工号为该关系的一个候选码;若在该关系中还带有身份证号属性,则身份证号属性的每一个值也能够唯一标识一个元组,所以也能够函数决定关系中的所有属性,因此身份证号也是一个候选码。
平凡依赖,非平凡依赖,完全依赖,部分依赖,传递依赖,直接依赖的区别
平凡依赖,⾮平凡依赖,完全依赖,部分依赖,传递依赖,直接
依赖的区别
⼀. 函数依赖
定义:
设R(U)是属性集U上的关系模式,X,Y是U的⼦集。若对于R(U)的任意⼀个可能的关系r,r不可能存在两个元组在X上的属性值相等,⽽在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X->Y。若函数Y不函数依赖于X,则记作X-/->Y。
例如:
⼀个⾝份证号码可以确定⼀个⼈的姓名,不存在说⾝份证号相同,但是是不同的⼈的情况。(可以做强制性规定⼀些条件使有的函数依赖成⽴。⽐如规定不允许同名⼈出现,因⽽使姓名->年龄)
所谓函数依赖是指关系中⼀个或⼀组属性的值可以决定其它属性的值。函数依赖就像⼀个函数y = f(x)⼀样,x的值给定后,y的值也就唯⼀地确定了。
⼆. 平凡依赖
定义:
若X->Y,且Y是X的⼦集(对任⼀关系模式,平凡函数依赖必然成⽴),就是平凡函数依赖。
例如:
在学⽣表(学号,姓名,年级)中,(学号,姓名)可以推出学号和姓名其中的任何⼀个,这就是平凡函数依赖.
直⽩点说,就是只要Y是X的⼦集,Y就依赖于X。
三. ⾮平凡依赖
定义:
若X->Y,但Y不是X的⼦集,就是⾮平凡函数依赖。
例如:
在学⽣表(学号,姓名,年级)中,通过(学号,姓名)可以推出这个学⽣所在的年级,但年级不是(学号,姓名)的⼦集,这是⾮平凡函数依赖.((学号,姓名)就是⼀个x,学号或者姓名就是⼀个x')。
四. 完全函数依赖
定义:
在R(U)中,如果X->Y。并且对于X的任何⼀个真⼦集X‘,都有X'-/->Y,则称Y对X有完全函数依赖,记作X->Y(箭头上有个⼤写F)。
例如:eg 1:在学⽣表(学号,姓名,年级)中,通过属性“学号”就可以推出“年级”,说明“年级”完全依赖于“学号”,这就是完全函数依赖。
eg 2:“⼀门课的成绩”对(学号,课程号)是完全函数依赖。学号和课程号可以确定对应课程成绩,但是学号和课程号它们谁都不能单独确定成绩。
也就是说X内任意⼀个真⼦集(真⼦集不包含它本⾝),都不能唯⼀确定Y。
根据函数依赖求出关系中的侯选码
根据函数依赖求出关系中的侯选码
定义:设一个关系为R(U),X为U的一个子集,若X能够函数决定U中的每
个属性,并且X的任何真子集都不能函数决定U中的每个属性,则称X为关系R的一个候选码。
等价定义:由于一个候选码能够函数决定关系中的每个属性,根据函数依赖
的合并规则,可知候选码能够函数决定整个元组,即所有属性。所以候选码的另
一个等价定义为:若关系中的一个属性或属性组能够函数决定整个元组,并且它的任何子集都不能函数决定整个元组,则它被称为该关系的一个候选码。
例如:在上面介绍过的职工关系中,职工号属性能够函数决定职工号、姓名、
性别、年龄、职务等所有属性,并且职工号为单属性,不可再分,肯定不会存在
任何子集能够函数决定整个元组,所以职工号为该关系的一个候选码;若在该关系中还带有身份证号属性,则身份证号属性的每一个值也能够唯一标识一个元
组,所以也能够函数决定关系中的所有属性,因此身份证号也是一个候选码。
又如:在上面介绍过的教师任课关系中,它的最小函数依赖集为:
{教工号→姓名,教工号→职称,课程号→课程名,课程号→课时数,
(职称,课程号)→课时费}。
求侯选码分析:由于任一个单属性都不能函数决定关系中的所有属性,所以都不是候选码,若选取一个属性子集(教工号,课程号),由于它能够函数决定
所有属性,所以它是该关系的一个候选码,并且是唯一的候选码。
注意:(教工号,课程号)到教工号、姓名、职称、课程号、课程名、课时
数等是部分函数决定,而到课时费是传递函数决定。即“(教工号,课程号)→(职称,课程号)→课时费”是伪传递性。
九、根据函数依赖求关系的侯选码举例
例:设一个教学关系为(教师号,姓名,课程号,课程名,课程学分,专业号,专业名,教学等级分),假定每个教师有一个唯一的教师号,每门课程有一
个唯一的课程号,每个专业有一个唯一的专业号,每个教师号对应一个姓名,每
个课程号对应一个课程名和一个课程学分,每个专业号对应一个专业名,教学等
数据库学习摘记——关系模式的函数依赖
数据库学习摘记——关系模式的函数依赖关系与关系模式的联系:
关系模式是相对稳定的,静态的,是把所有元组删去后的⼀张空表格,是对元组数据组织⽅式的结构描述,⽽关系却是动态变化的,不稳定的,是将若⼲元组填⼊关系模式后得到的⼀个取值实例。每⼀个关系对应⼀个关系模式,每⼀个关系模式可以定义多个关系。
关系模式R(U)对应的具体关系通常⽤⼩写字母r来表⽰。
函数依赖:设R(U)是属性集U={A1, A2, …, An}上的关系模式,X和Y是U的⼦集。若对R(U)的任⼀具体关系r中的任意两个元组t1和t2,只要t1[X]=t2[X] 就有t1[Y]=t2[Y]。则称"X函数确定Y" 或"Y函数依赖于X",记作X→Y,X为这个函数依赖的决定因素。
函数依赖要求R(U)的⼀切具体关系r都要满⾜的约束条件。
若X→Y且Y→X,则记作X⇿Y
平凡函数依赖:X→Y,Y⊆X // 对于任⼀关系模式,平凡函数依赖必然是成⽴的
⾮平凡函数依赖:X→Y,Y⊄X
完全函数依赖:
如果X→Y,且对于X的任何⼀个真⼦集X',都有X不函数确定Y ,则称Y对X完全函数依赖或者X完全决定Y,记作:
部分函数依赖:
如果X→Y,但Y不是完全函数依赖于X,则称Y 对X部分函数依赖,记作:
传递函数依赖:如果X→Y,Y→Z,且 Y→X,Y⊄X,Z⊄Y,则称Z对X传递函数依赖,记作:
候选键:对关系模式R(U),设K⊆U,且K完全函数确定U,则K为能够唯⼀确定关系中任何⼀个元组(实体)的最少属性集合,称K为R(U)的候选键或候选关键字。
【R(U,F),U={ A,B,C,D,E,G },F={AB→C,CD→E,E→A,A→G},求候选键】
因G只在右边出现,所以G⼀定不属于候选码
⽽B,D只在左边出现,所以B,D⼀定属于候选码BD的闭包还是BD,则对BD进⾏组合,除了G以外,BD可以跟A,C,E进⾏组合
先看ABDABD本⾝⾃包ABD,⽽AB→C,CD→E,A→G,所以ABD的闭包为ABDCEG=U
数据库 函数依赖
- 1 - 数据库 函数依赖
数据库函数依赖是指一个或多个属性的值可以确定另一个或多个属性的值。在一个关系型数据库中,函数依赖是非常重要的概念,因为它可以帮助我们设计和优化数据库。
如果属性A的值可以确定属性B的值,我们可以写作A→B。这意味着对于每个A的值,只有一个B的值。例如,在一个学生表中,学生的学号可以确定学生的名字和年级,所以学号→(名字,年级)。
函数依赖可以分为两种类型:单值依赖和多值依赖。
单值依赖:如果一个属性的值可以确定另一个属性的值,那么这个依赖被称为单值依赖。例如,在一个订单表中,订单号可以确定顾客的姓名和地址,所以订单号→(姓名,地址)。
多值依赖:如果一个属性集合的值可以确定另一个非子集属性集合的值,那么这个依赖被称为多值依赖。例如,在一个学生选课表中,(学号,课程号)可以确定学生的名字和课程的名称,所以(学号,课程号)→(名字,课程名)。
理解数据库函数依赖对于设计和优化数据库非常重要。通过使用函数依赖,我们可以减少冗余数据,提高数据库的完整性和一致性。同时,我们可以使用函数依赖来进行数据检索和查询优化,从而提高数据库的性能和效率。
保持函数依赖的分解
保持函数依赖的分解
保持函数依赖的分解是指在关系型数据库的规范化过程中,将一个关系(或表)分解为多个较小的关系,同时保持这些关系满足函数依赖。这样做可以消除数据冗余,减少数据插入、更新和删除操作时的异常问题,提高数据的一致性和完整性。
保持函数依赖的分解通常遵循以下几个步骤:
1. 识别函数依赖:首先需要确定关系中的所有函数依赖。函数依赖是指一个或多个属性的值可以决定另一个属性的值。例如,在“学生”表中,如果“学号”和“课程号”可以决定“成绩”,那么“学号”和“课程号”就决定了“成绩”。
2. 确定范式:在确定了所有的函数依赖后,需要确定当前的范式级别。范式是数据库设计的规范,用于消除数据冗余和提高数据一致性。常见的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。
3. 规范化:如果当前关系不满足某个范式的要求,就需要将其分解为多个较小的关系,直到满足该范式的要求。这个过程就是规范化。例如,如果一个关系不满足第二范式的要求,就需要将其分解为两个关系,其中一个关系满足第二范式的要求,另一个关系满足第一范式的要求。
4. 检查函数依赖:在分解后,需要检查新的关系是否仍然满足所有的函数依赖。如果某个函数依赖在新的关系中不再成立,就需要重新设计该关系。
5. 实施分解:如果所有的函数依赖都得到满足,就可以将原来的关系替换为新的关系。
通过以上步骤,可以保持函数依赖的分解,并实现数据库的规范化设计。这种设计有助于提高数据的一致性和完整性,减少数据冗余和异常问题。
函数依赖的逻辑蕴涵
函数依赖的逻辑蕴涵
一、逻辑蕴涵
定义:设有关系模式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公理;
[总结]关系数据库设计基础(函数依赖、无损连接性、保持函数依赖、范式、……)
[总结]关系数据库设计基础(函数依赖、⽆损连接性、保持函数
依赖、范式、……)
≏≎≟≗≖≍≭∼∽≁≃≂≅≊≈≉≇≳⪞⪆⋧⪊≵≲⪝⪅⋦⪉≴⊂ 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),
函数依赖和多值依赖
函数依赖和多值依赖
一、函数依赖
函数依赖是关系数据库中最基本的依赖关系之一,它描述了一个属性集合中某些属性对其他属性的决定作用。在一个关系模式R中,如果对于R的任意一组元组t1和t2,若t1和t2在属性集合X上取值相同,则它们在属性集合Y上取值也相同,那么我们称Y对X有函数依赖。可以用X→Y来表示。
二、多值依赖
多值依赖是指在一个关系模式R中,存在这样两个属性集合X和Y(其中X和Y不为空),满足对于R的任意一组元组t1和t2,如果它们在X上取值相同,则它们在除去X后剩余的属性集合Z上必须取相同的所有可能值。可以用X→→Z来表示。
三、函数依赖与多值依赖的区别
函数依赖描述了一个属性对其他属性的决定作用,而多值依赖描述了两个或更多个非主属性之间的关系。
四、实现函数依赖与多值依赖
实现函数依赖和多值依赖需要进行以下步骤:
1.确定实体及其属性。
2.识别实体间联系及其类型。
3.设计ER图并转换为关系模式。
4.检查关系模式的范式,消除不符合范式的关系模式。
5.对于存在函数依赖和多值依赖的关系模式,进行分解。
五、分解函数依赖
分解函数依赖需要进行以下步骤:
1.将原始关系模式拆分成两个或多个新的关系模式,每个新的关系模式都包含原始属性集合中的一部分属性。
2.为新的关系模式定义主键和外键,以确保它们之间有正确的联系。
3.使用连接操作来重新组合这些新的关系模式。
六、分解多值依赖
分解多值依赖需要进行以下步骤:
1.将原始关系模式拆分成两个或多个新的关系模式,每个新的关系模式都包含原始属性集合中的一部分属性。
2.为新的关系模式定义主键和外键,以确保它们之间有正确的联系。
3.在第二个新建立一个独立表格,并把非主属性从第一个表格中转移到第二个表格中。
4.使用连接操作来重新组合这些新建立表格。
七、总结
在设计数据库时,应该注意到函数依赖和多值依赖。如果发现存在函数依赖或多值依赖,则应该采取相应的措施来分解它们,以确保数据库的正常运行。
函数依赖集经典求法
三步法求最小函数依赖集
乐乐等待花开总结一、首先要清楚最小函数依赖集的是什么?
1.定义定义::如果函数依赖集F满足(1)F中任一函数依赖的右部仅含一个属性中任一函数依赖的右部仅含一个属性;;(2)F中不存在这
样的函数依赖X→A,使得F与F-{X→A}等价;(3)F中不存在这样的函数依赖X→A,X
有真子集Z使得F与F-{X→A}∪{Z→A}等价。
2.定义分析:
(1)每个函数依赖右边都仅含一个属性每个函数依赖右边都仅含一个属性,,例如对于函数依例如对于函数依赖赖A→B,B,CC应该分解应该分解为为A→B,A→C;
(2)判断每一个依赖是否多余,若F与F-{X→A}等价,则X→A为多余依赖;
(3)判断A的子集里边有没有多余属性,若F与F-{X→A}U{Z→A}等价,则子集Z多余多余。。
二、要知道什么是闭包
1.闭包定义闭包定义::设F为属性集U上的一组函数依赖上的一组函数依赖,,X,Y都包含于U,XF+={A|={A|XX→A可以F
根据Armstrong公理导出},则XF+称为X关于属性依赖集F的闭包。
2.举例说明:
求属性集X(X包含于U)关于U上的函数依赖集F的闭包XF+,已知关系模式R其
中U={A,B,C,D,E};F={AB→C,BC,B→→D,CD,C→→E,ECE,EC→→B,ACB,AC→→B},求(AB)F+。
解析:分步进行
①设X(0)=AB;
②X(1)={左边为AB及其子集的函数依赖集的右边属性},则X(1)=AB∪C∪D=ABCD,又因又因为为
ABCD不等于全集U,所以继续执行下一步,否则此时的X(1)就是AB在F上的闭包上的闭包;;
③同②中求法,得到X(2)=ABCD∪E=ABCDE=U,所以不用继续往下求了,此时X(2)就是
AB在F上的闭包。
最终我们得到:(AB)F+=ABCDE=U
三、三、最小依赖集的求法最小依赖集的求法
三步走:
第一步:右边属性单一化,得到F1;
第二步:将F1中左边属性中多余属性去掉,得到F2;
数据库系统原理课后答案 第三章
3.1 名词解释
(1) 函数依赖:FD(function dependency),设有关系模式R(U),X,Y是U的子集, r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[X]=t2[X]导致t1[Y]=t2[Y], 则称X函数决定Y,或Y函数依赖于X,记为X→Y。X→Y为模式R的一个函数依赖。 (2) 平凡的函数依赖:对于FD X→Y,如果Y∈X 那么称X→Y 是一个“平凡的函数依赖”,否则称为“非平凡的FD”。(3) 函数依赖集F的闭包F+: 被逻辑蕴涵的函数依赖的全体构成的集合,称为F的闭包(closure),记为F+。 (5) 函数依赖的逻辑蕴涵:设F是关系模式R的一个函数依赖集,X,Y是R的属性子集, 如果从F中的函数依赖能够推出X→Y,则称F逻辑蕴涵X→Y,记为F|=X→Y。 (6) 依赖集的覆盖和等价:关系模式R(U)上的两个函数依赖集F和G,如果满足F+=G+,则称F和G是等价的。 如果F和G等价,则可称F覆盖G或G覆盖F。 (7) 最小依赖集:如果函数集合F满足以下三个条件:(1)F中每个函数依赖的右部都是单属性; (2)F中的任一函数依赖X→A,其F-{X→A}与F是不等价的;(3)F中的任一函数依赖X→A,Z为X的子集,(F-{X→A})∪{Z→A}与F不等价。则称F为最小函数依赖集合,记为Fmin。 (8) 无损联接:设R是一关系模式,分解成关系模式ρ={R1,R2...,Rk},F是R上的一个函数依赖集。 如果对R中满足F的每一个关系r都有r=πR1(r)πR2(r)...πRk(r)则称这个分解相对于F是"无损联接分解"。 (10) 保持依赖集:所谓保持依赖就是指关系模式的函数依赖集在分解后仍在数据库中保持不变, 即关系模式R到ρ={R1,R2,...,Rk}的分解,使函数依赖集F被F这些Ri上的投影蕴涵。 (11) 1NF:第一范式。如果关系模式R的所有属性的值域中每一个值都是不可再分解的值, 则称R是属于第一范式模式。如果某个数据库模式都是第一范式的,则称该数据库存模式属于第一范式的数据库模式。第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合和组属性组成。 (12) 2NF:第二范式。如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键, 则称是第二范式模式;如果某个数据库模式中每个关系模式都是第二范式的,则称该数据库模式属于第二范式的数据库模式。 (注:如果A是关系模式R的候选键的一个属性,则称A是R的主属性,否则称A是R的非主属性。) (13) 3NF:第三范式。如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键, 则称R是第三范式的模式。如果某个数据库模式中的每个关系模式都是第三范式,则称为3NF的数据库模式。 (14) BCNF:BC范式。如果关系模式R是第一范式,且每个属性都不传递依赖于R的候选键,那么称R是BCNF的模式。 (17) 4NF:第四范式。设R是一个关系模式,D是R上的多值依赖集合。如果D中成立非平凡多值依赖X→→Y时, X必是R的超键,那么称R是第四范式的模式。3.4 对函数依赖X→Y的定义加以扩充,X和Y可以为空属性集,用φ表示, 那么X→φ,φ→Y,φ→φ的含义是什么? 根据函数依赖的定义,以上三个表达式的含义为: (1)一个关系模式R(U)中,X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2, 由t1[X]=t2[X]必有t1[φ]=t2[φ]。即X→φ表示空属性函数依赖于X。这是任何关系中都存在的。 (2)φ→Y表示Y函数依赖于空属性。由此可知该关系中所有元组中Y属性的值均相同。 (3)φ→φ表示空属性函数依赖于空属性。这也是任何关系中都存在的。 3.6关系模式R有n个属性,在模式R上可能成立的函数依赖有多少个? 其中平凡的函数依赖有多少个?非平凡的函数依赖有多少个? (要考虑所有可能的情况,数学排列组合问题。对于数据库本身而言,本题没多大意义) 所有属性相互依赖时,函数依赖最多。平凡的函数依赖:对于函数依赖X→Y,如果YX,那么称X→Y是一个“平凡的函数依赖”。3.7已知关系模式R(ABC),F={A→C,B→C},求F+。 可以直接通过自反律、增广律、传递律加以推广: F+={φ→φ,A→φ,B→φ,C→φ,A→C,B→C,AB→φ,AB→A,AB→B,AB→C,AB→BC,AB→AB,AB→ABC,BC→φ,BC→C,BC→B,BC→BC,AC→φ,AC→C,AC→A,AC→AC,ABC→φ,ABC→A,ABC→B,ABC→C,ABC→BC,ABC→AB,ABC→ABC}4.6 试分析下列分解是否具有无损联接和保持函数依赖的特点:
