主键、唯一键和候选键的区别

Posted

技术标签:

【中文标题】主键、唯一键和候选键的区别【英文标题】:Difference between Primary Key, Unique Key and candidate key 【发布时间】:2011-04-06 17:34:31 【问题描述】:

主键、唯一键和候选键有什么区别?

【问题讨论】:

【参考方案1】:

Google 不再工作了?

http://en.wikipedia.org/wiki/Candidate_key

http://en.wikipedia.org/wiki/Unique_key

【讨论】:

问题想要它们之间的具体区别。【参考方案2】:

候选键是一个最小(即不可约)键,唯一键是一个 pleonasm,主键是一个过时的概念,从人们认为一个键可能比任何其他人。

【讨论】:

候选键可以复合吗?我很困惑,因为有些消息来源说它应该是单列,有些人说它可以是复合的? 键可以是复合的。他们没有错。如果属性的数量变得相当大(想想,4 个或更多),那么您可能开始遇到实际的缺点,但即便如此,它们仍然没有任何问题,在基础理论层面。【参考方案3】:

复合键是具有多于 1 列的主键。例如考虑学生和课程之间的多对多关系。这里我们需要另一个表,比如说 studentcourses。

此 studentcourses 表将包含 student_id 和 course_id 作为其列。这将形成您的复合键。

候选键是一组列,可以唯一标识表中的值,并且可以充当唯一键。这些候选键中的一个将成为主键,其余的将成为备用键。

Unique key 顾名思义,用于唯一标识表中的一个值。例如 Emp_id 等。每个候选键都将充当唯一键。唯一键永远不能是 NULL 值。

【讨论】:

【参考方案4】:

候选键 – 候选键可以是任何列或可以作为数据库中唯一键的列组合。一张表中可以有多个候选键。每个候选键都可以作为主键。

主键 – 主键是唯一标识记录的列或列组合。只有一个候选键可以是主键。 在选择主键时需要非常小心,因为不正确的选择会对数据库架构师和未来的规范化产生不利影响。对于有资格作为主键的候选键,它应该是非 NULL 并且在任何域中都是唯一的。我经常观察到主键很少更改。我希望收到您关于不更改主键的反馈。

For more articles

【讨论】:

【参考方案5】:

超级键是唯一标识一条记录的一个或多个列(即属性)的集合。

候选键是最小的超级键。(这意味着我们不能从中删除任何属性,否则它将不再是超级键)。

主键是任意选择的候选键。必须只有且只有一个主键。我们可以选择任何候选键作为主键。 其他未被选为主键的候选键称为备用键。

如果主键多于一列(或属性),则称为复合键。

【讨论】:

想知道你对“唯一键”的看法!! 唯一键允许 NULL 值。但是,主键或候选键不允许 NULL 值。【参考方案6】:

候选键 - 它是一个可以唯一标识特定行或数据库表实例的所有列的列。您的护照 ID 是候选密钥的一个很好的示例,使用此 ID 时,您可以检索与该特定人员相关的人名、姓氏和其他详细信息。

主键 - 特定数据库表上可能有几个候选键,它们是唯一的,可用于标识表中的特定实例,例如车辆登记号、底盘号、发动机序列号等……但请记住,只能有一个候选键用作主键。 候选键与主键之间的区别:- ) 主键和候选键都可以唯一标识数据库表中的记录。

2) 主键和候选键都有约束 UNIQUE 和 NOT NULL。

3) 主键或候选键可以是单列,也可以是表中多列的组合。

【讨论】:

这是一个不完整的答案。任何地方都没有提到唯一键。【参考方案7】:

所有答案都缺少物理表示,其中一些不完整。所以这是图形表示的区别


说明

超级密钥

超级键是一组一个或多个键,可用于唯一标识表中的一条记录。

示例:主键、唯一键、备用键是超级键的子集。

候选键

候选键是一组一个或多个字段/列,可以在表中唯一标识一条记录。一张表中可以有多个候选键。每个候选键都可以作为主键。

示例:在上图中,IDRollNoEnrollNo 是候选键,因为这三个字段都可以作为主键。

主键

主键是一组一个或多个表的字段/列,用于唯一标识数据库表中的一条记录。它不能接受空值、重复值。主键只能有一个候选键。

备用键

备用键是可以用作主键的键。基本上它是一个候选键,目前没有被用作主键。

示例:在上图中,当我们将ID 定义为主键时,RollNoEnrollNo 成为备用键。

复合/复合键

复合键是表格中多个字段/列的组合。可以是候选键、主键。

唯一键

Uniquekey 是一个表的一个或多个字段/列的集合,用于唯一标识数据库表中的一条记录。它类似于主键,但它只能接受一个空值,并且不能有重复值。如需更多帮助,请参阅文章Difference between primary key and unique key。

外键

外键是数据库表中的一个字段,它是另一个表中的主键。它可以接受多个空的、重复的值。如需更多帮助,请参阅文章Difference between primary key and foreign key。

示例:我们可以在 Employee 表中有一个 DeptID 列,它指向一个部门表中的 DeptID 列,它是一个主键。

source

【讨论】:

以及几乎 - FOREIGN KEY 约束不必只链接到另一个表中的 PRIMARY KEY 约束;它也可以定义为引用另一个表中唯一约束的列。 @Manoz 候选键、唯一键和复合键有什么区别?您已经为这三个术语编写了类似的定义。请解释。提前致谢。

以上是关于主键、唯一键和候选键的区别的主要内容,如果未能解决你的问题,请参考以下文章

数据库中的键码,候选键码,主键码,公共键码,外键码有啥区别?求高人,谢谢了

3.啥是键、候选键、主键和外键?

主键和唯一键的区别

SQL Server 中的“键”是啥意思?主键和外键是啥?

外键为啥必须是唯一键?为啥至少唯一键才能作为其他表的外键?不唯一为啥不可以?

主键、外键和索引的区别?