数据库最小函数依赖集
- 格式:docx
- 大小:12.97 KB
- 文档页数:5
求最小函数依赖集例题最小函数依赖集是指在关系模式中,能够唯一确定所有属性的最小集合。
为了求最小函数依赖集,我们需要先了解函数依赖的概念。
函数依赖是指在关系模式R中,给定一个关系模式的属性集合X,如果对于X的任意两个元组t1和t2来说,如果t1和t2在属性集合X 的取值相同,那么它们在关系模式的其他属性集合Y上的取值也相同。
这种情况下,我们称Y函数依赖于X,用X -> Y表示。
举个例子来说,假设我们有一个关系模式R(A, B, C),其中A是关系模式的候选键。
如果我们观察到属性集合A的取值能够唯一确定属性集合B的取值,那么我们可以说B函数依赖于A,用A -> B表示。
同样地,如果属性集合A的取值能够唯一确定属性集合C的取值,我们可以说C函数依赖于A,用A -> C表示。
现在我们来解决一个求最小函数依赖集的例题。
假设我们有一个关系模式R(A, B, C, D, E),其中A是候选键。
根据已给的函数依赖集如下:1. A -> B2. A -> C3. BC -> D4. D -> E我们的目标是找出最小函数依赖集。
首先,我们来看一下函数依赖集1和2。
由于A是候选键,并且A能够唯一确定B和C的取值,所以函数依赖集1和2是必要的。
接下来,我们看一下函数依赖集3。
根据函数依赖集3,BC能够唯一确定D的取值。
然而,我们注意到函数依赖集3可以通过分解成两个函数依赖集来表示:B -> D和C -> D。
因此,函数依赖集3不是必要的。
最后,我们来看一下函数依赖集4。
根据函数依赖集4,D能够唯一确定E的取值。
我们可以发现函数依赖集4是必要的。
综上所述,最小函数依赖集为:1. A -> B2. A -> C3. B -> D4. C -> D5. D -> E这样,我们就得到了最小函数依赖集。
在数据库设计中,最小函数依赖集对于避免数据冗余和保持数据一致性非常重要。
python数据库最小函数依赖集在数据库设计中,函数依赖是一种重要的概念,用于描述属性之间的关系。
最小函数依赖集是指在数据库关系中,能够唯一确定其他属性的最小属性集合。
在本文中,我们将探讨Python数据库最小函数依赖集的相关知识。
在数据库中,关系模式通常由属性组成,这些属性之间存在一定的函数依赖关系。
函数依赖可以分为完全函数依赖、部分函数依赖和传递函数依赖等不同类型。
而最小函数依赖集则是指在一个关系中,能够唯一确定其他属性的最小属性集合。
在Python中,我们可以使用第三方库来进行数据库设计和操作,比如使用SQLAlchemy库可以方便地进行数据库表的创建和操作。
在设计数据库表时,我们需要考虑属性之间的函数依赖关系,以确保数据的完整性和一致性。
为了找到数据库表中的最小函数依赖集,我们可以通过分析属性之间的关系来确定。
首先,我们需要找出所有的函数依赖关系,然后逐步排除冗余的属性,直到找到最小的函数依赖集为止。
举个例子来说,假设有一个学生信息表,包含学生ID、姓名、年龄和性别等属性。
在这个表中,如果我们知道学生ID就可以唯一确定学生的姓名,那么学生ID->姓名就是一个函数依赖关系。
而如果知道学生ID和姓名就可以确定学生的年龄,那么学生ID、姓名->年龄就是另一个函数依赖关系。
通过分析这些函数依赖关系,我们可以找到最小函数依赖集,即学生ID->姓名、学生ID、姓名->年龄。
在Python中,我们可以编写程序来自动化地找到数据库表中的最小函数依赖集。
通过读取数据库表的结构,分析属性之间的关系,然后排除冗余的属性,最终得到最小函数依赖集。
这样可以提高数据库设计的效率,减少人工错误的可能性。
总的来说,最小函数依赖集在数据库设计中起着重要的作用,能够帮助我们准确地描述属性之间的关系,确保数据的完整性和一致性。
在Python中,我们可以通过分析属性之间的函数依赖关系,找到最小函数依赖集,从而优化数据库设计和操作。
数据库学习摘记——关系模式的函数依赖关系与关系模式的联系:关系模式是相对稳定的,静态的,是把所有元组删去后的⼀张空表格,是对元组数据组织⽅式的结构描述,⽽关系却是动态变化的,不稳定的,是将若⼲元组填⼊关系模式后得到的⼀个取值实例。
每⼀个关系对应⼀个关系模式,每⼀个关系模式可以定义多个关系。
关系模式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再看BDCCD→E,E→A,A→G,BDC本⾝⾃包,所以BDC的闭包为BDCEAG=U最后看BDEE→A,A→G,AB→C,BDE本⾝⾃包,所以BDE的闭包为BDEAGC=U因为(ABD)、(BCD)、(BDE)的闭包都是ABCDEG所以本问题的候选码有3个分别是ABC、BCD和BDE主键:通常在R(U)的多个候选键中任意选定⼀个候选键作为主键,也称为主码或主关键字。
一个用于求解关系模式上最小函数依赖集合(F)min的算法庆振树;chen,PP
【期刊名称】《计算机工程》
【年(卷),期】1989(000)006
【摘要】本文介绍一个采用DDHD技术求解关系模式上最小函数依赖集合(F)min 的算法,采用这种方法可以方便地从任意给定的函数依赖集合F直接求得相应的最小函数依赖集合,这种方法是关系数据库设计和规范化的有用工具。
【总页数】11页(P32-42)
【作者】庆振树;chen,PP
【作者单位】不详;不详
【正文语种】中文
【中图分类】TP311.13
【相关文献】
1.关系模式最小函数依赖集的求解与应用 [J], 裴祥喜;李珉;赵福伟
2.最小函数依赖集Fmin求解算法研究及实现 [J], 邸振山
3.函数依赖最小覆盖集求解算法——在数据库设计中的应用 [J], 邹炜;周定康
4.用最小不动点理论求解最小函数依赖集 [J], 谢宝永;李磊
5.大型Petri网模型最小trap (siphon)集合的快速求解算法 [J], 廖晶静;王明哲;倪枫;郭法滨
因版权原因,仅展示原文概要,查看原文内容请购买。
最小函数依赖集Fm的求法:1.根据分解规则,将函数依赖的右端分解成单个属性2.对于F中的每个函数X→A,设G=F-{X→A},如果A∈X G+,则将X→A从中删除,否则保留。
3.对于F中每一个左端包含多个属性的X→A,选择X的每个子集Z,如果A∈Z F+,则用Z→A代替X→A。
例如:F={BE→G,BD→G,CDE→AB,CD→A,CE→G,BC→A,B→D,C→D}求Fm。
解:1)右端分解成单个属性F={BE→G,BD→G,CDE→A, CDE→B,CD→A,CE→G,BC→A,B→D,C →D}2)设G=F-{X→A},如果A∈X G+,则将X→A删除,否则保留(1)G=F-{ BE→G }={BD→G,CDE→A, CDE→B,CD→A,CE→G,BC →A,B→D,C→D},则(BE)G+=BEDG,包含G,则删除。
(2)G=F-{BD→G, }={ CDE→A, CDE→B,CD→A,CE→G,BC→A,B →D,C→D},则(BD)G+=BD,不包含G,则保留。
(3)G=F-{CDE→A}={ BD→G, CDE→B,CD→A,CE→G,BC→A,B →D,C→D},则(CDE)G+= CDEBGA,包含A,则删除。
(4)G=F-{CDE→B}={ BD→G, CD→A,CE→G,BC→A,B→D,C→D},则(CDE)G+= CDEAG,不包含B,则保留。
(4)G=F-{CD→A,}={ BD→G, CDE→B,CE→G,BC→A,B→D,C→D},则(CD)G+= CD,不包含A,则保留。
(5)G=F-{ CE→G,}={ BD→G, CDE→B,CD→A, BC→A,B→D,C →D},则(CE)G+= CEDBAG,包含G,则删除。
(5)G=F-{ BC→A,}={ BD→G, CDE→B,CD→A, B→D,C→D},则(BC)G+= BCDGA,包含A,则删除。
(6)G=F-{ B→D,}={ BD→G, CDE→B,CD→A, C→D},则(B)G+= B,不包含D,则保留。
数据库函数依赖和范式总结1 函数依赖1.1 定义:一个集合R(U,F),U为属性全集,F为函数依赖集合。
F中存在着{Xi->Yi...};对于每个X都存在着一个Y与之唯一对应。
意思就是相当于X为主键,Y由主键决定。
比如一个学生他的学号相当于X,而他的姓名与年龄这些其他信息相当于Y。
但是X有时候并不是一个值,比如一个学生他的成绩需要有两个属性才能知道他的成绩,学号+课程号->成绩1.2 平凡函数依赖与非平凡函数依赖平时我们主要讨论的是非平凡函数依赖。
平凡函数依赖概念:Y集合属性属于X集合属性的子集非平凡函数则相反1.3 逻辑蕴涵(为后面求闭包做好基础)X,Y为属性集合U的子集,且X->Y不存在于F中。
即我们需要通过F中的函数依赖推出X->Y称为函数依赖。
而所有函数依赖的集合则称为闭包1.4 函数依赖的推理规则(就是求函数依赖的逻辑蕴涵)1.4.1 几个公理1.4.1.1 公理一(自反律):Y属于X的子集,则X->Y 数学公式描述 Y?X?U1.4.1.2 公理二(增广律):X->Y成立,Z?U也成立,则 XZ?YZ1.4.1.3 公理三(传递律):X->Y成立,Y->Z成立,则 X->Z1.4.2 公理的推广1.4.2.1 推广一(合并律):X->Y,X->Z,则X->YZ1.4.2.2 推广二(伪传递律):X->Y,YW->Z,则XW->Z(证明只需要在XY两边*W)1.4.2.3 推广三(分解律):X->Y成立,Z?Y,则 X->Z1.4.2.4 推广四(复合律):X->Y,W->Z,则XW->YZ1.5 完全函数依赖与部分函数依赖(范式中基础知识)X->Y的集合中,若X的任一真子集x都能 x->Y则为部分函数依赖,若不能则的完全函数依赖,如果X没有真子集则也称为完全函数依赖。
关系模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC} 求F的最小函数依赖集方法如下:1.根据分解规则,将函数依赖的右端分解成单个属性该题目的话要将:BC分解成单个属性。
F={ADG->B,ADG->C,······}2.对于F中的每个函数X->A,设G=F-{X->A},如果A属于X的闭包,则将X->A从中删除,否则保留。
该题目:1)G=F-{B->D},则B的闭包={B},包不含D,则保留2)G=F-{DG->C},则DG的闭包={DG},不包含C,则保留3)G=F-{BD->E},则BD的闭包={BD},不包含E,则保留4)G=F-{AG->B},则AG的闭包={AG},不包含B,则保留5)G=F-{ADG->B},则ADG的闭包={ADGBCE},包含B,则删除6)G=F-{ADG->C},则ADG的闭包={ADGBCE},包含C,则删除F={B->D,DG->C,BD->E,AG->B}R(U, F),U=ABCDEF, F={AD→E, AC→E, BC→F, BCD→AF, BD→A, AB→F, A→C}求最小函数依赖集答案是:分解右部为属性组的函数依赖,得F={AD→E,AC→E,BC→F,BCD→A,BCD→F,BD→A,AB→F,A→C}对于AD→E,∵(AD)的闭包=ADCE, 又∵E不属于ACDE∴AD→E 冗余对于AC→E,∵(AC)的闭包=AC,又∵E不属于AC,∴AC→E不冗余对于BC→F,∵(BC)的闭包=BC,又∵F不属于BC,∴BC→F 不冗余对于BCD→A,∵(BCD)的闭包=ABCDEF,又∵A不属于ABCDEF ∴BCD→A 冗余对于BCD→F,∵(BCD)的闭包=ABCDEF,又∵F不属于ABCDEF ∴BCD→F 冗余对于BD→A,∵(BD)的闭包=BD,又∵A不属于BD,∴BD→A 不冗余对于AB→F,∵(AB)的闭包=ABCDEF,又∵F属于ABCDEF ∵AB→F 冗余对于A→C,∵A的闭包=A,又∵C不属于A,∴A→C 不冗余∴F的最小函数依赖集为{AC→E,BC→F,BD→A,A→C}。
数据库基础与应用一、单选题1.利用 QL 语言所建立的视图在数据库中属于(B)A 实表B 虚表C索引D字段2.下面属于 Aecess 数据库中所含操作对象的是(B)A 文件B 宏C 索引D 视图3.设一个关系为 R(A,B,C D,E),它的最小函数依赖集为 F= 4 一→E,A→C,B 一D,D→B,则该关系的候选码为(A )A AB BC CD D4.在文件系统中,存取数据的基本单位是(A)。
A 记录B 数据项C 二进制位D学节5.在Access 中,如果只想显示表中符合条件的记录,可以使用的方法是(A) 。
A 筛选B 删除C冻结D隐藏6.在Access 中,若利用宏打开一个查询,则选择的宏操作命令是(B)。
A OpenTableB OpenQueryC OpenFormD OpenReport7.在利用计算机进行数据处理的四个发展阶段中,第三个发展阶段是(C)A 人工管理B 文件系统C 数据库系统D 分布式数据库系统8.设两个关系中分别包含有m 和n 个属性,它们具有同一个公共属性,当对它们进行等值连接时,运算结果的关系中包含的属性个数为(C)A m*nB m+n-1 Cm+nD m+n+19.在SOL 的查询语句中, group by 选项实现的功能是(D)A 选择B 求和C 排序D 分组统计10.在报表设计视图中,若需要在报表每一页的顶部都打印出相关信息,则该信息应设置在(B)A 报表页眉B 页面页眉C 主体D 页面页脚11.如果要将查询结果作为一个新表添加到数据库中,应该使用(C)A 选择查询B 追加查询C 生成表查询D 更新查询12.在Access 中,一屏不能够同时显示表中多条记录的窗体类型属于(D )。
A 数据表B 数据透视图C 数据透视表D 纵栏式13.在数据库系统中,存取数据的基本单位是(B)A 记录B 数据项C 二进制位D 字节14.如果要设计一个报表,该报表将用于标识公司的资产设备,则应将该报表设计为(D)A 标签报表B 一般报表C 交叉报表D 数据透视图报表15.如果要将查询结果添加到一个指定的数据表中,应该使用(B)A 选择查询B 追加查询C 生成表查询D 更新查询16.由概念设计进入关系数据模型的逻辑设计时,必须被转换为对应基本表的联系类型是(C) A 1 对1B 1 对多C 多对多D 多对117.设两个关系中分别包含有 m 和n 个属性,它们具有同一个公共属性,当对它们进行自然连接时,运算结果的关系中包含的属性个数为(B)。
一、等价和覆盖
定义:关系模式R<U,F>上的两个依赖集F和G,如果F+=G+,则称F和G是等价的,记做
F≡G。
若F≡G,则称G是F的一个覆盖,反之亦然。
两个等价的函数依赖集在表达能力上是完全相同的。
二、最小函数依赖集
定义:如果函数依赖集F满足下列条件,则称F为最小函数依赖集或最小覆盖。
① F中的任何一个函数依赖的右部仅含有一个属性;
② F中不存在这样一个函数依赖X→A,使得F与F-{X→A}等价;
③ F中不存在这样一个函数依赖X→A,X有真子集Z使得F-{X→A}∪{Z→A}与F等价。
算法:计算最小函数依赖集。
输入一个函数依赖集输出 F 的一个等价的最小函数依赖集G
步骤:
①用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;
②去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去
掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。
直到找不到冗余的函数依赖;
③去掉各依赖左部多余的属性。
一个一个地检查函数依赖左部非单个属性的依赖。
例如XY→A,若要判Y为多余的,则以X→A代替XY →A是否等价?若A (X)+,则Y是多余属性,可以去掉。
举例:
已知关系模式R<U,F>,U={A,B,C,D,E,G}, F={AB→C,D→EG,C→A,BE →C,BC→D,CG→BD,ACD→B,CE→AG},求F的最小函数依赖集。
解1:利用算法求解,使得其满足三个条件
①利用分解规则,将所有的函数依赖变成右边都是单个属性的函数依赖,得F为: F={AB→C,D→E,D→G,C→A,BE→C,BC→D,CG→B,CG →D,ACD→B,CE→A,CE→G}
②去掉F中多余的函数依赖
A.设AB→C为冗余的函数依赖,则去掉AB→C,得: F1={D→E,D →G,C→A,BE→C,BC→D,CG→B,CG→D,ACD→B,CE→A,CE→G}
计算(AB)F1+:设X(0)=AB 计算X(1):扫描F1中各个函数依赖,找到左部为AB或AB子集的函数依赖,因为找不到这样的函数依赖。
故有X(1)=X(0)=AB,算法终止。
(AB)F1+= AB不包含C,故AB→C不是冗余的函数依赖,不能从F1中去掉.
B.设CG→B为冗余的函数依赖,则去掉CG→B,得: F2={AB→C,D →E,D→G,C→A,BE→C,BC→D,CG→D,ACD→B,CE→A,CE→G} 计算(CG)F2+:设X(0)=CG 计算X(1):扫描F2中的各个函数依赖,找到左部为CG或CG子集的函数依赖,得到一个C→A函数依赖。
故有
X(1)=X(0)∪A=CGA=ACG。
计算X(2):扫描F2中的各个函数依赖,找到左部为ACG或ACG子集的函数依赖,得到一个CG→D函数依赖。
故有X(2)=X(1)∪D=ACDG。
计算X(3):扫描F2中的各个函数依赖,找到左部为ACDG或ACDG子集的函数依赖,得到两个ACD→B和D→E函数依赖。
故有X(3)=X(2)∪BE=ABCDEG,因为X(3)=U,算法终止。
(CG)F2+=ABCDEG包含B,故CG→B是冗余的函数依赖,从F2中去掉。
C.设CG→D为冗余的函数依赖,则去掉CG→D,得: F3={AB→C,D →E,D→G,C→A,BE→C,BC→D,ACD→B,CE→A,CE→G} 计算(CG)F3+:设X(0)=CG 计算X(1):扫描F3中的各个函数依赖,找到左部为CG或CG子集的函数依赖,得到一个C→A函数依赖。
故有X(1)=X(0)∪A=CGA=ACG。
计算X(2):扫描F3中的各个函数依赖,找到左部为ACG或ACG子集的函数依赖,因为找不到这样的函数依赖。
故有
X(2)=X(1),算法终止。
(CG)F3+=ACG。
(CG)F3+=ACG不包含D,故CG→D不是冗余的函数依赖,不能从F3中去掉。
D.设CE→A为冗余的函数依赖,则去掉CE→A,得: F4={AB→C,D
→E,D→G,C→A,BE→C,BC→D,CG→D,ACD→B,CE→G} 计算(CG)F4+:设X(0)=CE 计算X(1):扫描F4中的各个函数依赖,找到左部为CE或CE子集的函数依赖,得到一个C→A函数依赖。
故有X(1)=X(0)∪A=CEA=ACE。
计算X(2):扫描F4中的各个函数依赖,找到左部为ACE或ACE子集的函数依赖,得到一个CE→G函数依赖。
故有
X(2)=X(1)∪G=ACEG。
计算X(3):扫描F4中的各个函数依赖,找到左部为ACEG或ACEG子集的函数依赖,得到一个CG→D函数依赖。
故有X(3)=X(2)∪D=ACDEG。
计算X(4):扫描F4中的各个函数依赖,找到左部为ACDEG或ACDEG子集的函数依赖,得到一个ACD→B 函数依赖。
故有X(4)=X(3)∪B=ABCDEG。
因为X(4)=U,算法终止。
(CE)F4+=ABCDEG包含A,故CE→A是冗余的函数依赖,从F4中去掉。
③去掉F4中各函数依赖左边多余的属性(只检查左部不是单个属性的函数依赖)
由于C→A,函数依赖ACD→B中的属性A是多余的,去掉A得CD→B。
故最小函数依赖集为:
F={AB→C,D→E,D→G,C→A,BE→C,BC→D,CG→D,CD→B,CE→G}
解2:利用Armstrong公理系统的推理规则求解①假设CG→B 为冗余的函数依赖,那么,从F中去掉它后能根据Armstrong公理系统的推理规则导出。
因为CG→D (已知)
所以CGA→AD,CGA→ACD (增广律)
因为ACD→B (已知)
所以CGA→B (传递律)
因为C→A (已知)
所以CG→B (伪传递律)
故CG→B是冗余的。
②同理可证:CE→A是多余的。
③又因C→A,可知函数依赖ACD→B中的属性A是多余的,去掉A 得CD→B。
故最小函数依赖集为:
F={AB→C,D→E,D→G,C→A,BE→C,BC→D,CG→D,CD→B,CE→G}。