先了解下对这三种关键码的定义如下:

键名 定义
超键 (super key) 在关系中能唯一标识元组的属性或属性集称为关键模式的超键
候选键 (candidate key) 不含有多余属性的超键称为候选键。也就是在候选键中在删除属性就不是键了。
主键(primary key) 用户选作元组标识的候选键称为主键。一般不加说明,键就是指主键。

即候选键是超键中选出来的,主键是从候选键中选出来的一组。

超键

  • 百科百科的解释:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。
  • 如:在一个学生的表中,假设有“学号”、“姓名”、“相关信息”、“生日”等字段, 其中学号是唯一的,那么(学号)是一个超键,同时(学号,姓名,生日)的组合也是唯一的,所以也可以为一个超键。但(学号,姓名,生日)也有时候不是唯一的,如果有学号、姓名、生日相同的情况,就会出错,反正记住一点,就是这些属性可以区别每一个学生的就是超键,也就是根据这些属性可以唯一确定一名学生的,就是超键。
  • 假设我们有下面这样一个学生信息表:
学号 姓名 年龄 性别 专业
20161 李四 23 CS
20162 李五 24 MA
20163 李六 25 CA
20164 李七 23 AI
20165 李七 24 CS

通过观察,选取能唯一确定一行的属性组合有:

  • (学号)
  • (学号,*其他任何列属性)
  • (姓名,年龄)
  • (姓名,性别)
  • (等等)
    通过选取的过程,我们可以理解这里的超键在于可以区别每一个学生,超键的组合是唯一的,但可能不是最小唯一的。

候选键

候选键实在超键的基础上定义的,在要求可以区分每一行的基础上,同时是最小唯一的,即候选键中删除任何一个属性后就不能再区分每一行。
同样是之前那个表

学号 姓名 年龄 性别 专业
20161 李四 23 CS
20162 李五 24 MA
20163 李六 25 CA
20164 李七 23 AI
20165 李七 24 CS

(学号)是超键,而且没有其他多余属性所以是候选键。
(学号,姓名)是超键,但是去除姓名后也能区分每一行,所以姓名是多余的,(学号,姓名)不是一个候选键。
(姓名,年龄)是超键,而且没有多余的 属性,所以是一个候选键。
还有一些也可以做候选键,这里不在赘述。所以,这里可以看出,候选键是没有多余属性的超键。

主键

为了查询的方便性和便于表之间的连接,往往设置一组主键。主键是从候选键中选出来的一组,比如之前的表,我们可以以学号作为主键,也可以选择(姓名,年龄)作为主键,或者旋转其他的一个候选键。我们将我们最终选择的一组幸运候选键称为主键。

快速理解数据库超键,候选键,主键相关推荐

  1. sql超键 候选键 主键

    超键:如bai果一个关系(表)du中所有属性(列)都由zhi一个属性集合决定,那么这组属性集合称为超键. 显然,由一个关系的所有属性组成的属性集合必然是这个关系的超键. 通俗地讲,超键用来唯一确定一个 ...

  2. 数据库三范式(联合主键)

    数据库设计的三大范式~联合主键 什么是范式 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中,这种规则就是范式.范式是符合某一种级别的关系模式的集合.关系型数据库中 ...

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

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

  4. mysql linux导入csv主键,MySQL导入csv文件内容到Table及数据库的自增主键设置

    写在前面 目的是测试将csv文件内容导入到表中, 同时记录一下自增主键的设置. 测试采用MySQL8.0. 新建表customer_info如下, 未设置主键. 修改上表, 添加主键id, 并设置为自 ...

  5. 分布式数据库中全局唯一主键

    [相关文章] <分布式数据库中全局唯一主键生成策略的设计与实现> <activiti5.10解决分布式集群部署的主键问题> <分布式环境下数据库主键方案> < ...

  6. 五.获得MYSQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  7. javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  8. 主键由数据库mysql 映射native_Hibernate主键生成策略详解

    转载自:http://blog.csdn.net/wanghuan203/article/details/7562395 hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定 ...

  9. 关于数据库中有自增主键时如何插入数据?

    这里以一张user表为例,id为自增的. CREATE TABLE `user` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `username` varc ...

最新文章

  1. 面向对象课程第二单元作业总结
  2. echart 圆饼图 显示单位_玩转ECharts之实现“1/2圆的玫瑰图”
  3. CF思维联系--CodeForces - 218C E - Ice Skating (并查集)
  4. 使用IntelliJ调试Java流
  5. 谷歌Chrome浏览器添加新技术 可防止广告主追踪用户
  6. Java数据库驱动链接大全
  7. 【mac apache】了解自带的apache
  8. 有关python的知识点_Python常见的知识点整理
  9. Android2D理解坑
  10. linux目录数据块,如何在Linux上列出文件的数据块?
  11. SpringBoot之lombok引入后@Data无法生成getset方法
  12. arsc编辑器手机版_APK编辑器中文版,任意修改你手机中的APP名称、logo!
  13. mysql 数据字典详解_MySQL8功能详解——数据字典
  14. ViewGroup的LayoutParams理解
  15. java axis2 jar包下载_axis2所有jar包
  16. vue解决mintui中使用MessageBox弹窗拦截,移动端多次点击手机的物理返回键,选择确定后页面返回不正确问题
  17. 美国大学生数学建模竞赛获奖经验贴
  18. 字节跳动校招面试题演练
  19. 【面试题】:工人分金条问题
  20. UniApp 小程序实现PDF电子签名 拖拽

热门文章

  1. 浅析什么是RFID?
  2. 【云原生概念和技术】1.1 云原生的概述
  3. 深度学习GPU选购指南
  4. 模仿“百度”页面的html代码
  5. 毕业设计-基于微信小程序的高校宿舍报修系统
  6. sqlserver批量(部分)导出一张表中的数据
  7. javac -d . hello.java中的 -d .是什么作用?
  8. 微信小程序分享二维码生成
  9. OpenCV图像处理--设置和获取摄像头参数
  10. 0基础怎么学习短视频剪辑,并通过剪辑赚钱?