快速理解数据库超键,候选键,主键
先了解下对这三种关键码的定义如下:
键名 | 定义 |
---|---|
超键 (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 |
(学号)是超键,而且没有其他多余属性所以是候选键。
(学号,姓名)是超键,但是去除姓名后也能区分每一行,所以姓名是多余的,(学号,姓名)不是一个候选键。
(姓名,年龄)是超键,而且没有多余的 属性,所以是一个候选键。
还有一些也可以做候选键,这里不在赘述。所以,这里可以看出,候选键是没有多余属性的超键。
主键
为了查询的方便性和便于表之间的连接,往往设置一组主键。主键是从候选键中选出来的一组,比如之前的表,我们可以以学号作为主键,也可以选择(姓名,年龄)作为主键,或者旋转其他的一个候选键。我们将我们最终选择的一组幸运候选键称为主键。
快速理解数据库超键,候选键,主键相关推荐
- sql超键 候选键 主键
超键:如bai果一个关系(表)du中所有属性(列)都由zhi一个属性集合决定,那么这组属性集合称为超键. 显然,由一个关系的所有属性组成的属性集合必然是这个关系的超键. 通俗地讲,超键用来唯一确定一个 ...
- 数据库三范式(联合主键)
数据库设计的三大范式~联合主键 什么是范式 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中,这种规则就是范式.范式是符合某一种级别的关系模式的集合.关系型数据库中 ...
- 数据库中什么是主键,什么是外键?
数据库中什么是主键,什么是外键? 作者:不染丹心 来源:博客园 发布时间:2009-12-17 22:57 阅读:128 次 原文链接 [收藏] 这需要理清几个概念: 1)候选键: 关 ...
- mysql linux导入csv主键,MySQL导入csv文件内容到Table及数据库的自增主键设置
写在前面 目的是测试将csv文件内容导入到表中, 同时记录一下自增主键的设置. 测试采用MySQL8.0. 新建表customer_info如下, 未设置主键. 修改上表, 添加主键id, 并设置为自 ...
- 分布式数据库中全局唯一主键
[相关文章] <分布式数据库中全局唯一主键生成策略的设计与实现> <activiti5.10解决分布式集群部署的主键问题> <分布式环境下数据库主键方案> < ...
- 五.获得MYSQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- 主键由数据库mysql 映射native_Hibernate主键生成策略详解
转载自:http://blog.csdn.net/wanghuan203/article/details/7562395 hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定 ...
- 关于数据库中有自增主键时如何插入数据?
这里以一张user表为例,id为自增的. CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varc ...
最新文章
- 面向对象课程第二单元作业总结
- echart 圆饼图 显示单位_玩转ECharts之实现“1/2圆的玫瑰图”
- CF思维联系--CodeForces - 218C E - Ice Skating (并查集)
- 使用IntelliJ调试Java流
- 谷歌Chrome浏览器添加新技术 可防止广告主追踪用户
- Java数据库驱动链接大全
- 【mac apache】了解自带的apache
- 有关python的知识点_Python常见的知识点整理
- Android2D理解坑
- linux目录数据块,如何在Linux上列出文件的数据块?
- SpringBoot之lombok引入后@Data无法生成getset方法
- arsc编辑器手机版_APK编辑器中文版,任意修改你手机中的APP名称、logo!
- mysql 数据字典详解_MySQL8功能详解——数据字典
- ViewGroup的LayoutParams理解
- java axis2 jar包下载_axis2所有jar包
- vue解决mintui中使用MessageBox弹窗拦截,移动端多次点击手机的物理返回键,选择确定后页面返回不正确问题
- 美国大学生数学建模竞赛获奖经验贴
- 字节跳动校招面试题演练
- 【面试题】:工人分金条问题
- UniApp 小程序实现PDF电子签名 拖拽