候选键和复合键有什么区别?

时间:2011-04-10 06:51:08

标签: sql composite-key candidate-key

我正在阅读候选键和复合键。我知道了

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

对于复合键,我已经引用了这个链接

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

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

6 个答案:

答案 0 :(得分:15)

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

每张桌子至少有一把钥匙。假设我们已经确定了表格的每个可能的关键字。这些键中的每一个都是候选键。

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

在SQL中,决定选择一个键并将其处理为“比表格的其他键”更“平等”。该密钥称为主密钥。其他键也可以在表上声明,这些键通常称为Unique Contsraints。

(!)在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列。那可能是(非复合)主键。但是我们仍然应该为表格声明其他键。

答案 1 :(得分:14)

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

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

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

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

答案 5 :(得分:0)

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

  • 我们可以有1个以上的候选键

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

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

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

-希望有帮助