候选键和复合键有啥区别?

Posted

技术标签:

【中文标题】候选键和复合键有啥区别?【英文标题】:What is the difference between candidate key and composite key?候选键和复合键有什么区别? 【发布时间】:2011-08-02 09:16:00 【问题描述】:

我正在阅读有关候选键和复合键的信息。我才知道

候选键可以作为主键,它可以是单列或列组合 复合键也是列的组合。

对于复合键,我参考了这个链接

how do I make a composite key with SQL Server Management Studio?

因此,当候选键和复合键都是列的组合时,它们可以作为主键。那么确切的区别是什么?你能用例子解释一下吗?

【问题讨论】:

“候选键”在 SQL 中没有标准含义。 【参考方案1】:

据我所知,候选键是可以用作主键的唯一键。但不一定用作一个。

复合键是唯一标识行的两个或多个属性的键。

【讨论】:

复合键是 a 的键。它不必是主键。【参考方案2】:

键是一组列,可用于唯一标识表中的每一行。

每个表至少有一个键。假设我们已经确定了表的每个可能键。这些键中的每一个都是候选键。

当我们检查这些键中的每一个时,键可能不包含列 (!)、一列或多于一列,当它们一起考虑时,它们可以唯一地标识每一行。术语复合键特指由多于一列组成的键。

在 SQL 中,决定应该选择一个键并将其视为比表的其他键“更平等”。这个键称为主键。也可以在表上声明其他键,这些通常称为唯一约束。

(!) 在 SQL 中,不允许声明没有列的键 - 尽管它有时会很有用(想想应该只有一行的表,其中每列代表配置信息)


作为具有多个键的表的示例,所有键都是复合的。想象一个预约系统,客户和顾问在特定时间在一个房间会面:

CREATE TABLE Appointments (
    ClientID int not null,
    CounsellorID int not null,
    RoomID int not null,
    AppointmentTime datetime not null
)

此表的候选键是 ClientID,AppointmentTime、CounsellorID,AppointmentTime 和 RoomID,AppointmentTime。任何这些列组合都可以用来唯一标识表中的一行,并且它们都是复合键。

我们选择将哪个声明为主键将(可能)取决于我们自己对系统主要“焦点”的解释。我们主要关心房间的使用,还是客户,还是顾问?在任何情况下,我们都会选择一个并将其声明为主键。我们还希望将其他键声明为唯一约束。

或者,我们可以决定使用代理,并声明一个AppointmentID 列,使用数据库中可用的任何自动编号工具。那可能是(非复合)主键。但是我们仍然应该为表声明其他键。

【讨论】:

并非所有表都有键,例如create table tbl (i int); insert tbl values (1), (1), (2), ... @Andomar - 这样的表并不真正属于关系数据库(暂时采取纯粹主义者的观点)。【参考方案3】:

候选键:主键字段的提名者称为候选键。

复合键:创建多个主键统称为复合键。

更新: 候选键是可以用作主键的唯一键。 复合键是唯一标识行的两个或多个属性的键。 键是一组列,可用于唯一标识表中的每一行。

【讨论】:

您并没有完全创建多个主键 - 您正在创建一个由多个列组成的 单个 主键 您的回答具有误导性。请改正。谢谢【参考方案4】:

CANDIDATE KEY:- 候选键是唯一键,是作为主键的“候选键”。 COMPOSITE KEY:- 两列或多列作为主键的“组合”,被视为复合键。

【讨论】:

【参考方案5】:

候选键就是:可以用作主键的列或列组合,即候选或潜在主键,根据定义,组合键是两列或更多列可以用来标识一行。在谈论复合键时,最常见的问题是是否将其作为主键来代替代理键。有时你可能会听到人们提到一个不是主键的复合键(即不是所有行都是唯一的),在这种情况下,它(希望)只是一种在非主键上引用多列连接的方法字段(而不是在 where 子句中进行交叉连接和过滤行)。

【讨论】:

【参考方案6】:

CANDIDATE KEY:候选键是单列/多列(组合),帮助我们唯一标识表中的行。

我们可以有多个候选键

COMPOSITE KEY:复合键由 2 列或更多列组成(不能是单列),这有助于我们识别表中的行。

所以,是的,复合键是候选键 如果将复合键作为主键,我们称之为复合主键(主键由多于 1 列组合而成)。

-希望这有帮助

【讨论】:

这里面有很多错误的东西。也不清楚。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。此外,SQL 中的单词含义与关系模型不同,CK 在 SQL 中甚至没有标准含义。所以问题不是很清楚。这也是一个常见问题解答,应该关闭而不回答。此外,当您回答时,请确保您的帖子是对所有答案的改进。 是的,我确实记住了所有事情以及作者和其他 cmets 的问题,这些都很棒。我已经给出了我的答案版本,我觉得有人可能会更好地理解它。

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

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

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

超键(super key)、候选键(candidate key)和主键(primary key) 外键(foreign key)的区别

数据仓库系列3-键

const 和非 const 键有啥区别?

.net 在.cs文件中,行对齐的时候,按TAB键和按SPACE键有何区别