超码、候选码和主码有什么区别?

在关系数据库理论中经常出现超码、候选码、主码等概念,它们间的关系是怎样的,有什么区别?

定义

在数据库系统概念(原书第6版)中对这几个概念都有详细的定义。

超码(SuperKey)

是指一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一的标识一个元组(记录)。一个关系模式中可以有多个超码。
其形式化描述: 设R表示关系r模式中的属性集合。如果说R的一个子集K是r的一个超码,则限制了关系r中任意两个不同元组不会在K的所有属性上取值完全相等。即如果t1和t2在r中,且 t1 不等于 t2,则t1.K 不等于 t2.K。
超码中可能会存在无关紧要的属性。

举例说明

假定关系模式,学生(学号,姓名,身份证号)
从分析可知,学号唯一,所以该属性为超码,姓名不唯一,不是超码
身份证号唯一 所以也是一个超码
(学号,姓名) 组合取值唯一, 所以属性组是一个超码
(身份证号,姓名) 组合取值唯一, 所以属性组是一个超码
(学号,身份证号,姓名) 组合取值唯一, 所以属性组也是一个超码
从以上分析可以看出,只要属性或属性组的组合取值唯一,就为超码,很明显,这种唯一可能不是最小的唯一。

候选码(candidate key)

不含有多余属性的超码称为候选码,一个关系模式中可以有多个候选码。
从超码的定义和分析可知,超码中可能包含无关紧要的属性。如果K是一个超码,那么K的任意超集也是超码。比如在上文中的(学号,姓名)属性组,学号本身是超码,所以在学号上的超集也一定是超码。在数据管理和维护中我们更多的会关系学号这个超码对于元组的区分。因此最小的超码称为候选码。

举例说明

在上述关系模式中,学生(学号,姓名,身份证号),
学号是不包含多余属性的超码,所以该属性为候选码。
身份证号也是不包含多余属性的超码,所以该属性为候选码。
也就是说该关系中有两个候选码:学号、身份证号

主码(primary key)

在关系数据库设计中,被设计者选中,用来在一个关系模式中区分不同元组的候选码。一个关系模式中只有一个主码。
关系中的任意两个不同的元组都不允许同时在主码属性上具有相同的值。主码的指定代表了被建模事物在现实世界中的约束。

举例说明

在关系模式中,学生(学号,姓名,身份证号),通过分析学号和身份证号都是候选码,我们可以选择其中一个作为主码。
那到底是选择学号还是身份证号呢?
这里选择学号作为主码。
在主码的选择一般要慎重。一般来说身份证作为敏感信息不用于作为主属性。这也是这里不选择身份证号的主要原因。另外,主码选择时会选择值从不变化或极少变化的属性。假若关系中有属性手机号,当然我们知道每个人的手机号码也是唯一的,所以从分析可知手机号也是候选码,但一个人可能会因为各种原因更换手机号,所以候选码手机号也不且作为主码。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值