函数依赖集闭包、属性集闭包、超键、候选键和最小函数依赖集的求法。
目录
关系模式
函数依赖的闭包
属性集闭包
码
求候选键算法
最小函数依赖集
关系模式R(U,D,DOM,F)
R:关系名,符号化的元组定义
U:一组属性
D:属性组U中的属性所来自的域
DOM:属性到域的映射
F:属性组U上的一组数据依赖
函数依赖集的闭包
F:FD(Functional Dependency)的集合称为函数依赖集。
F闭包:由F中的所有FD可以推导出所有FD的集合,记为F+。
例1,对于关系模式R(ABC),F={A→B,B→C},求F+。
根据FD的定义,可推出F+={φ→φ,A→φ,A→A,A→B,A→C,A→AB,A→BC,A→ABC,…},共有43个FD。其中,φ表示空属性集。
属性集闭包
属性集闭包定义 :
对F,F+中所有X→A的A的集合称为X的闭包,记为X+。可以理解为X+表示所有X可以决定的属性。属性集闭包的算法:
A+:将A置入A+。对每一FD,若左部属于A+,则将右部置入A+,一直重复至A+不能扩大。
码
设K为R(U,F)中的属性或属性集合,
候选码:若U对K完全函数依赖。则K为R的候选码。
超码:若U对K部分函数依赖。则K为R的超码,候选码是最小的超码。若候选码多余一个,则选择一个作为主码
设关系模式R中U=ABC.......等N个属性,U中的属性在FD中有四种范围:
(1)左右出现;
(2)只在左部出现;
(3)只在右部出现;
(4)不在左右出现;
求候选键算法:
1.R:只在FD右部出现的属性,不属于候选码;
2.L:只在FD左部出现的属性,一定存在于某候选码当中;
3.N:外部属性一定存在于任何候选码当中;
4.其他属性逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码。
例2,对于关系模式R(ABCD),F={A→B,B→C,D→B},求其候选键。
先按照属性集闭包的算法,求各个闭包,然后求得候选键。
(1) 求A+。
① A+=A。
② 由A→B,而A €A+可知,则A+=AB。③ 由B→C,而B A+可知,则A+=ABC。
④ A+封闭,即A+=ABC。
(2) 求B+、C+、D+。
按步骤(1)可得:B+=BC,C+=C,D+=BCD。
(3) 求其候选键。 显然,R的候选键为AD。
例3,对于关系模式R(ABC),F={A→BC,BC→A},求其候选键。
(1) 求属性的闭包。
按例2可得:A+=ABC,B+=B,C+=C。(2) 求属性集的闭包。
由BC→A,则(BC)+=ABC,其余属性集闭包为属性闭包的并集。(3) 求其候选键。 显然,R的候选键为A和BC。
最小函数依赖集
定义:如果函数依赖集F满足以下条件,则称F为一个极小函数依赖集。也称为最小依赖集或最小覆盖。
(1)F中任一函数依赖的右部仅含有一个属性。
(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}U{Z→A}与F等价。
最小依赖集通用算法:
① 用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;
② 去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;
③ 去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A属于(X)+,则Y是多余属性,可以去掉。
例4、求F={A→B,B→A,B→C,A→C,C→A},最小(极小)函数依赖集合
1、利用分解规则,将所有的函数依赖变成右边都是单个属性的函数依赖。从题目来看,F中的任何一个函数依赖的右部仅含有一个属性:
{A→B,B→A,B→C,A→C,C→A}2、去掉F中多余的函数依赖
(1)设A→B冗余,从F中去掉A→B,则F1={B→A,B→C,A→C,C→A}。计算(A)F1+:设X(0)=A,计算X(1):扫描F1中各个函数依赖,找到左部为A或A子集的函数依赖,A→C。故有X(1)=X(0)U C=AC;扫描F1中各个函数依赖,找到左部为AC或为AC子集的函数依赖,C→A,X(2)=X(1)U C=AC.但AC不包含B,故A->B不能从F中去掉。
(2)设B→A冗余,从F中去掉B→A,则F2={A→B,B→C,A→C,C→A}。计算(B)F2+:设X(0)=B,计算X(1):扫描F2中各个函数依赖,找到左部为B或者B子集的函数依赖,B→C.故有X(1)=X(0)U C =BC;扫描F2中各个函数依赖,找到左部为BC或为BC子集的函数依赖,C->A,X(2)=X(1)U A=ABC.X(2)包含所有属性,故B→A可从F中去掉。
(3)设B→C冗余,从F中去掉B→C,则F3={A→B,A→C,C→A}。计算(B)F3+:扫描F3中各个函数依赖,找不到左部为B或B子集的函数依赖,因为找不到这样的函数依赖,故有X(1)=X(0)=B,(B)F1+= B不包含C,故B→C不是冗余的函数依赖,不能从F1中去掉。
(4)设A→C冗余,从F中去掉A→C,则F4={A→B,B→C,C→A}。计算(A)F4+:设X(0)=A,计算X(1):扫描F4中各个函数依赖,找到左部为A或A子集的函数依赖,A→B。故有X(1)=X(0)U B=AB;扫描F4中各个函数依赖,找到左部为AB或为AB子集的函数依赖,B→C,X(2)=X(1)U C=ABC.X(2)包含所有属性,故A→C可从F中去掉。
(5)设C→A冗余,从F中去掉C→A,则F4={A→B,B→C}。计算(C)F5+:设X(0)=C,计算X(1):扫描F5中各个函数依赖,找到左部为C或C子集的函数依赖,找不到左部为C或C子集的函数依赖,因为找不到这样的函数依赖,故有X(1)=X(0)=C,(B)F1+= C不包含A,故C→A不是冗余的函数依赖,不能从F中去掉。
(6)至此,所有依赖均以验算完毕,故F最小(极小)函数依赖集合为:{A→B,B→C,C→A}
转载自原文作者:itwolf
函数依赖集闭包、属性集闭包、超键、候选键和最小函数依赖集的求法。相关推荐
- sql超键 候选键 主键
超键:如bai果一个关系(表)du中所有属性(列)都由zhi一个属性集合决定,那么这组属性集合称为超键. 显然,由一个关系的所有属性组成的属性集合必然是这个关系的超键. 通俗地讲,超键用来唯一确定一个 ...
- 超键、候选键、主键、外键、联合主键、复合主键
首先看看各种键的定义: 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键(只要有一个键唯一,再随便组其他的键,合起来叫主键) 候选键(candidatekey):不含有多余 ...
- 菜鸟学数据库(四)——超键、候选键、主键、外键
这些年的一些经历告诉我,很多初学者搞不清超键.候选键等,被数据库中的各种键搞的一头雾水.下面就跟大家一起聊聊数据库中的那些键. 首先看看各种键的定义: 超键(super key):在关系中能唯一标识元 ...
- 菜鸟学数据库——超键、候选键、主键、外键
目录 首先看看各种键的定义: 结合实例的具体解释: 超键: 候选键: 主键: 外键: 欢迎大家关注我的新书<Spring Boot趣味实战课> 京东 当当 天猫 这些年的一些经历告诉我,很 ...
- 数据库——彻底明白超键、候选键、主键、外键
知识就是一遍又一遍的学,每次的学习都有不一样的收获和感受,然后得到了收获就该是分享的过程了,很多人都不易区分超键.候选键.主键.外键这四个键的区别,下来为了大家少走弯路,特总结了此篇博客! 1.书中的 ...
- 快速理解数据库超键,候选键,主键
先了解下对这三种关键码的定义如下: 键名 定义 超键 (super key) 在关系中能唯一标识元组的属性或属性集称为关键模式的超键 候选键 (candidate key) 不含有多余属性的超键称为候 ...
- 主键,超键,候选键,外键的含义
主 键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超 键: 在关系中能唯一标识元组的属性集称为关系模 ...
- 软件设计师 - 超键、无损连接、函数依赖
1.闭包 在函数依赖集F下由α函数确定的所有属性的集合为F下α的闭包,记为α+ . 闭包算法: result:=α; while(result发生变化)dofor each 函数依赖β→γ in F ...
- 关系型数据库的超键、候选键、主键
超键(super key): 在一个关系中,能唯一标识元组的属性或属性集,称为关系的超键. 候选键(candidate key): 不含有多余属性的超键,称为候选键. 主键(primary key): ...
最新文章
- 二值网络训练--Training Competitive Binary Neural Networks from Scratch
- C++ exception
- 处理大并发之四 libevent demo详细分析(对比epoll)
- CBitMap的用法 from http://www.cnblogs.com/toconnection/archive/2012/08/04/mfc.html
- python微信聊天机器人_python实战项目,使用itchat模块制作微信聊天机器人
- 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
- android系统优势 研究,Android系统关注度持续保持优势
- HashMap使用HashMap(int initialCapacity)初始化
- mysql装了一半卡住了_mysql安装问题:安装到configuration overview卡住了
- bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理
- optenstack配置glance
- Learning to Track at 100 FPS with Deep Regression Networks 论文笔记
- java数据类型int_java数据类型
- .mdb mysql_ACCESS数据库(.mdb 文件)转 MYSQL
- ospf路由 华3_华三模拟器ospf的简单配置
- css字体浏览(转)
- 香农编码Shannon
- 电脑时间服务器选哪个文件夹,时间同步服务器 - 卡饭网
- 表格标签-表格基本结构
- cygwin安装gcc/g++