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

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

若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个分别是ABC、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。

数据库中候选键的确定相关推荐

  1. 数据库中的实体、元组、字段、属性、码、分量、依赖关系、完全部份传递依赖、范式等你了解吗?【笔记自用】

    我们读不同的描写数据库的文章,会看到不同的概念名称,从某种意义上来讲,是公说公有理,婆说婆有理的问题,只是个人理解不同而称呼有异,这也给一些人,尤其是初学者带来一定的困扰,鉴于此,特整理<数据库 ...

  2. 数据库中什么是主键,什么是外键?

    数据库中什么是主键,什么是外键? 作者:不染丹心  来源:博客园  发布时间:2009-12-17 22:57  阅读:128 次  原文链接   [收藏]   这需要理清几个概念: 1)候选键: 关 ...

  3. oracle常见单词_数据库中常用的英文单词

    数据库中常用的英文单词 ORACLE 开发 2010-06-30 16:20:05 阅读 17 评论 0 字号:大中小 订阅 下列是一些数据库中经常碰到的英文单词: Access method (访问 ...

  4. MySQL的关系模式集是什么_数据库中“关系模式”的定义是什么?

    展开全部 数据库中"关系模式"的定义是对关系的描述,其必须指出这个元组集合的结构,也就是它32313133353236313431303231363533e4b893e5b19e3 ...

  5. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

  6. java 捕获异常并存入数据库_java异常处理,报异常的话怎么处理对象值,并持久化到数据库中...

    展开全部 //没看到有人回e68a843231313335323631343130323136353331333365646233答你,我还没学到框架,不知道那个是不是可以很便捷操作你说的这样过程 / ...

  7. 知识图:从图和数据库中获取知识

    知识图:从图和数据库中获取知识 知识图到底是什么,以及关于它们的所有炒作是什么?如果想成为世界各地的Airbnbs,Amazon,Google和LinkedIn,那么学会区分真实的炒作,定义不同类型的 ...

  8. 用java向mysql数据库中插入数据为空

    利用java面向对像编程,向数据库中插入数据时.遇到插入的数据为空的情况.在此做一小结: 1.数据库连接正正常 2.sql语句没有问题 3.程序没有报异常 4.代码: import java.util ...

  9. bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...

    最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下 ...

最新文章

  1. python能够做什么软件-Python能做什么
  2. idea 快速搭建spring boot 多模块项目(底部附源码)
  3. nltk book的下载
  4. SAP Analytics Cloud里取出SAP Cloud for Customer的Reports列表
  5. 加速布局无服务器生态,腾讯云与Serverless.com达成全球战略合作!
  6. Docker入门-安装
  7. html 内嵌xml数据库,是否可以在SQLite数据库中存储XML/HTML文件?
  8. SAP License:SAP顾问是如何炼成的——我所理解的SAP顾问
  9. ifix从sqlserver里读数据_国外自动化组态软件介绍:InTouch|WinCC|iFix|Citect
  10. 《信号与系统学习笔记》—信号与系统的时域和频域特性(二)
  11. BT没死!305个国外BT资源聚合站点大全
  12. (二十二)【模电】(波形的发生与信号的转换)电压比较器
  13. matlab求组合数不想求组合数矩阵,【潘德的预言】用关系模型与组合数计算NPC最大相容人数和所有组合...
  14. L2-016 愿天下有情人都是失散多年的兄妹(25 分)
  15. NUnit 入门知识
  16. UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initial
  17. WireShark流量分析(中国菜刀,webshell)
  18. 下一个十年,区块链将如何厚“基”薄发?
  19. 扩散模型Diffusion Model 【质量提升2.0】【扩散模型】
  20. 列表的增删改查:day4

热门文章

  1. 计算机数字媒体毕业论文,求数字媒体艺术毕业论文题目
  2. 人工智能就业方向及前景,前景如何?好就业吗?
  3. Linux下常用的编辑文件与保存命令
  4. Nodejs 正则表达式
  5. C字符串操作strlen/strnlen_s详解
  6. JavaScript 数字格式化怎么写(#,##.00) (实用,赞)
  7. Best Free Web Applications
  8. 大数据实时计算流程介绍
  9. Fluent API
  10. 因果推断——现代统计的思想飞跃