【例1】关系模型R<U,F>,U={A,B,C,D},F={B→D,AB→C},求R候选码。

在求解之前先要明白一些定理。我们把函数依赖集中F中的属性分为四类:

L类:所有依赖关系中仅出现在函数依赖左部的属性。

R类:所有依赖关系中仅出现在函数依赖右部的属性。

LR类:所有依赖关系中即出现在函数依赖左部又出现在函数依赖右部的属性。

N类:所有依赖关系中没有出现的属性。

定理一:对于给定的关系模式R及其函数依赖集F,若X(X∈U)是L类属性,则X必为R的任一候选码的成员。

定理二:对于给定的关系模式R及其函数依赖集F,若X(X∈U)是R类属性,则X不在任何候选码中。

定理三:对于给定的关系模式R及其函数依赖集F,若X(X∈U)是LR类属性,则X可能在候选码中。

定理四:对于给定的关系模式R及其函数依赖集F,若X(X∈U)是N类属性,则X必包含在R的任一候选码中。

第一步:先判断属性集U中所有属性属于哪一类。A仅出现在AB→C左边,属于L类。B仅出现在B→D左边和AB→C左边,属于L 类。C仅出现在AB→C右边,属于R类。D仅出现在B→D右边,属于R类。

第二步:由定理可知,A,B必在候选码中,C,D必不在候选码中。因为不知道是否还有其他属性,假定目前候选码K=AB。

第三步:求K=AB的闭包。根据闭包算法(具体请见闭包求法)得,AB+ =ABCD,发现AB的闭包等于属性集U。可以得出结论K=AB就是R的候选码,且是唯一候选码。

但如果第三步中,求得的闭包不等于U,便要继续算下去,看例2。

【例2】关系模型R<U,F>,U={A,B,C,D},F={BCD→A,A→C},求R候选码。

第一步:同样对U中属性进行分类,得出A是LR类,B是L类,C是LR类,D是类。

第二步:由定理可知,B,D必在候选码中,A,C可能在候选码中。假定目前候选码K=BD。

第三步:求K=BD的闭包。根据闭包算法得,BD+=BD,并不等于U。这时,我们从LR类中取一个属性,和BD组成临时候选码K。

第四步:先从LR类中取A,得到K=ABD。再求K=ABD的闭包,得到ABD+=ABCD,正好等于U,说明K=ABD是R的一个候选码。再从LR类中取C,得到K=BCD。再求K=BCD的闭包,得到BCD+=ABCD,也等于U,说明K=BCD也是R的一个候选码。所以R的候选码K={ABD,BCD}。

最后,如果第四步中在LR类中取一个属性的组合都不满足K的闭包等于数据集U,则从LR类中取2个,3个,……n个,分别组合,直到选出一个数据集K的闭包等于属性集U,K就是R的一个属性集。

数据库求候选码的算法相关推荐

  1. 狂学数据库之候选码的算法

    候选码的算法 闭包的介绍 候选码的算法 背景 例子 在了解候选码的算法之前,先了解一下闭包 闭包的介绍 计算属性集闭包的思路是:从给定的属性集出发,如果发现包含了某个函数依赖左边的 属性,就把其右边的 ...

  2. 数据库候选关键词怎么求_数据库中候选码求法.(比较全的哦)

    =ABCDE,又有E→A,求E+=ABCDE而CD→E,求(CD)+=ABCDE,可以得出属性A,E,CD为候选码;除去A,E,CD外,根据一般求解法求两个属性组合的闭包,可以得到(BC)+=ABCD ...

  3. 候选码求解算法——数据库考试复习

    前言 定义:设K为关系模式R<U, F>中的属性或属性组.若U完全依赖K,则K称为R的一个候选码(Candidate Key).换句话说,R中所有属性完全依赖于K,不存在K'是K的真子集, ...

  4. 根据函数依赖求候选码

    算法:按以下步骤求候选键: 1.只在FD右部出现的属性,不属于候选码; 2.只在FD左部出现的属性,一定存在于某候选码当中; 3.外部属性一定存在于任何候选码当中; 4.其他属性逐个与2,3的属性组合 ...

  5. 数据库(笔记)——候选码、主码、外码以及关系的完整性

    关系的码与关系的完整性 关系的码 1. 候选码 2. 主码 3. 外码 关系的完整性 总结 关系的码 1. 候选码 候选码是能够唯一标识关系中某一个元组的一个属性或属性集,也叫候选键 如: 学生关系中 ...

  6. 理解数据库中候选码,主码,外码,主属性,非主属性!

    候选码:如果一个关系中,若某一个属性组的值能唯一标识一个元组,而该属性组的子集不能,则称该属性组为候选码. 主码:如果候选码只有一个,那么这个就是候选码就是主码.如果候选码是多个,那就任意选择一个候选 ...

  7. 候选码的求解基本方法集合

    候选码的求解基本方法集合 一.求解候选码基本算法的具体步骤. 第1 步,求关系模式R < U , F > 的最小函数依赖集F 第2 步, 按照上面的定义, 分别计算出UL ,UR , UB ...

  8. 数据库函数依赖与候选码求解

    函数依赖 1.理解函数依赖: (1)完全函数依赖(F):多个属性[即复合属性]决定一个属性.例:AB两个属性决定属性C. (2)部分函数依赖(P):单个属性就可决定一个属性.例:A属性决定B属性 (3 ...

  9. 如何求一个关系模式的候选码

    首先来看候选码的定义:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码. 若W是候选键,则必须满足两个条件:W的闭包是U:W没有冗余. 设关系模式R中U=ABC.......等N个属 ...

最新文章

  1. 国科大回应:博士生每月不低于4300元!
  2. 深度学习和普通机器学习之间有何区别?
  3. linux下防DDOS***软件及使用方法详解
  4. python signal模块的使用(自定义超时异常)
  5. IFRAME jquery 获取document对象
  6. Android之内核学习笔记
  7. flowable实战(七)flowable核心数据库表清单
  8. 农行软开是总行编制吗_2021农行总行校招笔试来啦,你知道农行笔试都考些什么吗?...
  9. android折叠listview,android – 如何在listview中展开和折叠项目
  10. php.ini修改php上传文件大小限制的方法
  11. 总算完成了第一个项目,宿管系统,和感想
  12. 微信小程序的在线学习每日签到打卡 项目源码介绍
  13. java日常基础知识2
  14. Windows cmd常用命令
  15. Python | Python也可以“举”
  16. 汇编实现吃豆子小程序
  17. windows搭建nginx + php环境
  18. python飞机大战概要设计_飞机大战展示.ppt
  19. 华为机试真题 C++ 实现【最大化控制资源成本】【100%通过率】【2022.11 Q4 新题】
  20. python时间函数纳秒_python – 获取纳秒级精度的文件修改时间

热门文章

  1. VSTO开发指南(VB2013版) 第一章 Office对象模型
  2. GAN介绍 - 相关研究课题
  3. no main manifest attribute, in xxxx.jar 项目部署报错
  4. xmppFrameWork的使用
  5. 谈谈智能设备的电池技术
  6. 51单片机8位带符号乘法运算(汇编)
  7. 不到 100 行 Python 代码即可实现换脸功能
  8. (PC+WAP)织梦模板财经新闻资讯类网站
  9. 四个月的写作之路No.22
  10. MYSQL高可用架构MMM实现