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

Sha*_*wal 20 sql composite-key candidate-key

我正在阅读候选键和复合键.我才知道

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

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

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

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

Hea*_*ota 16

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

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


Dam*_*ver 15

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

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

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

在SQL中,决定应该选择一个键,并将其视为与表的其他键"更相等".该密钥称为主密钥.其他键也可以在表上声明,这些键通常称为Unique Contsraints.

(!)在SQL中,不允许声明没有列的键 - 虽然它偶尔会有用(想想一个表应该只有一行,每列代表配置信息)


作为具有多个键的表的示例,所有这些键都是复合的.想象一下预约系统,客户和辅导员在特定时间在一个房间里见面:

CREATE TABLE Appointments (
    ClientID int not null,
    CounsellorID int not null,
    RoomID int not null,
    AppointmentTime datetime not null
)
Run Code Online (Sandbox Code Playgroud)

该表的候选键是{ClientID,AppointmentTime},{CounsellorID,AppointmentTime}和{RoomID,AppointmentTime}.列的任何组合都可用于唯一标识表中的行,并且所有列都是复合键.

我们选择将哪一个声明为主键将取决于(可能)我们对系统主要"焦点"的解释.我们主要关注房间使用,客户或辅导员吗?无论如何,我们将选择一个并将其声明为主键.我们也希望将其他键声明为唯一约束.

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

  • @Andomar - 这样的表并不真正属于关系数据库(暂时采取纯粹主义者观点). (2认同)

Ali*_*oud 6

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

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

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

  • 您并没有完全创建多个主键 - 您正在创建一个由多个列组成的**单个**主键 (5认同)
  • 您的回答是误导的。请更正。谢谢 (2认同)