在学习数据库的时候,经常要碰到候选键的求取,但是一开始的时候,根本搞不清楚怎么去求,最近看了一些文章和资料,终于搞明白了。

首先来看候选键的定义:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选键。

若W是候选键,则必须满足两个条件:W的闭包是U;W没有冗余。

设关系模式R中U=ABC.......等N个属性,U中的属性在FD中有四种范围:

(1)左右出现;
(2)只在左部出现;
(3)只在右部出现;
(4)不在左右出现;

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

例1: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进行组合
  先看ABD
  ABD本身自包ABD,而AB-->C,CD-->E,A-->G,所以ABD的闭包为ABDCEG=U
  再看BDC
  CD-->E,E-->A,A-->G,BDC本身自包,所以BDC的闭包为BDCEAG=U
  最后看BDE
  E-->A,A-->G,AB-->C,BDE本身自包,所以BDE的闭包为BDEAGC=U

因为(ABD)、(BCD)、(BDE)的闭包都是ABCDEG所以本问题的候选码有3个分别是ABD、BCD和BDE

例2:R<U,F>,U=(A,B,C),F={AB-->C,C-->B},求候选码。

因为A只出现在左边,所以A一定是候选键。A的闭包还是A,则对A进行组合,可以和B,C进行组合。

首先看AB,AB本身自包AB,而AB-->C,所以AB的闭包是ABC=U。

再看AC,AC本身自包AC,而C-->B,所以AC的闭包是ABC=U。

因为AB,AC的闭包都是ABC,也就是U,所以候选键是AB,AC。

以上举例说明了候选键的求取算法,如有什么不足之处,请大家批评指正。

转载于:https://www.cnblogs.com/dyc-1234/p/6781846.html

关系模式候选键求取的算法相关推荐

  1. Manachar算法(马拉车算法):快速求取最长回文子串

    当我们求取最长回文子串时,常见的方法就是中心扩散法,即从字符中心出发,向两边对比,检查是否相等,若等于,则继续检查,并使当前字符中心对应的最长回文子串长度加一,否则,结束该字符中心的回文检查,比较与当 ...

  2. (算法)通俗易懂的字符串匹配KMP算法及求next值算法

    大多数据结构课本中,串涉及的内容即串的模式匹配,需要掌握的是朴素算法.KMP算法及next值的求法.在考研备考中,参考严奶奶的教材,我也是在关于求next值的算法中卡了一下午时间,感觉挺有意思的,把一 ...

  3. E-R图中联系向关系模式的转化

     1.一对一的转化         (1)方法一:将联系转化成一个独立的关系模式,关系模式的名称取联系的名称,属性包括该联系所关联的两个实体的主键,及其本身的属性.此关系的主键取任意一方实体的主键. ...

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

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

  5. mysql是如何设置候选码_如何求一个关系模式的候选码

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

  6. 算法学习:后缀数组 height的求取

    [前置知识] 后缀数组 [定义] [LCP]全名最长公共前缀,两个后缀之间的最长前缀,以下我们定义 lcp ( i , j ) 的意义是后缀 i 和 j 的最长前缀 [z函数] 函数z [ i ] 表 ...

  7. 数据库候选关键词怎么求_关系模式中候选关键字的图论求解法

    关系模式中候选关键字的图论求解法 李 莉 [摘 要] 文章首先介绍了函数依赖图的概念及理论,并应用该理论对数据库理 论和实际问题中关系模式候选关键字的求解问题进行了深入系统的讨论,并用 该方法解决了关 ...

  8. 用机器学习算法来求取战斗力公式

    一般游戏的战力公式,是一个线性回归方程: a*x+b*y+c*z+- =p 其中,p是战斗力,[a,b,c-]是属性,[x,y,z-]是属性价值. 属性一般包括:最大生命值,攻击力,防御力,闪避,暴击 ...

  9. MATLAB点云处理:读取、展示、最近邻、ICP算法求取转移矩阵、旋转

    MATLAB中关于点云的几个函数的简单应用.作者使用的是MATLAB R2015b,这几个函数应该是在Computer Vison包里. 全文都是作者自己结合MATLAB文档的理解,欢迎指教. 1. ...

最新文章

  1. 数通手稿留档——ISIS
  2. 邮件发送 --- 纯Java、JavaWeb、Spring三种实现方式
  3. 程序员必须掌握的核心算法有哪些?
  4. C语言中字符串常用函数--strcat,strcpy
  5. 安装python38_debian8安装python3.7
  6. flutter_web 实战之文章列表与详情
  7. Vue项目中使用svg文件
  8. HLG 1357 Leyni,罗莉和怪叔叔
  9. jpush推送格式 swift_Swift中配置极光推送
  10. 【渝粤教育】广东开放大学 系统工程 形成性考核 (25)
  11. jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等...
  12. CentOs 7 Linux系统下我的/etc/sysconfig/路径下无iptables文件
  13. 解决html5中video标签无法播放mp4问题的办法
  14. CentOS安装QQ2012
  15. bin(二进制文件)
  16. 用Java代码实现区块链技术
  17. Bandicam 录屏设置
  18. 技术人如何打造个人品牌?
  19. storm源码分析研究(五)
  20. LangSrcCurise ubuntu18.04部署指北

热门文章

  1. node process
  2. 和我一起读Java8 LinkedList源码
  3. 【BZOJ 1036】 树的统计count
  4. 云服务器是什么,有什么用?
  5. android 事件反拦截
  6. 开源监控利器grafana
  7. jenkins 持续集成, 使用sbt多项目同时package
  8. 【高斯消元】bzoj1013 [JSOI2008]球形空间产生器sphere
  9. 字节跳动暑期实习前端面试
  10. linux系统rar命令行,Linux下rar命令详解