26

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

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

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

如何使用 SQL Server Management Studio 创建复合键?

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

4

6 回答 6

20

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

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

于 2011-04-10T06:56:01.660 回答
16

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

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

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

在 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列,使用数据库中可用的任何自动编号工具。那可能是(非复合)主键。但是我们仍然应该为表声明其他键。

于 2011-04-10T07:03:03.247 回答
7

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

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

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

于 2011-04-10T06:57:27.460 回答
4

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

于 2017-07-27T09:27:39.763 回答
2

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

于 2011-04-10T07:07:13.137 回答
2

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

  • 我们可以有超过 1 个候选键

<----- 现在在所有这些候选键中,其中一个成为主键(这取决于开发人员哪个适合他们)------>

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

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

-希望这可以帮助

于 2020-10-03T09:21:03.340 回答