简短的答案比您描述的要简单得多。键(也称为候选键或主键或辅助键或备用键)是最小超键。换句话说,键是一组属性,它们被保证是不可约唯一的,并且永远不会为空。键可能包含一个或多个属性,有时包含零属性(零属性键相对不常见,不经常讨论,但仍可用作键)。
更长的解释:
按照惯例,为方便起见,每个关系的一个键通常被指定为“主”键,这意味着它被认为具有某种特殊意义。特殊意义可以是任何东西——通常它要么是在其他关系中被引用为外键的键,要么是作为该关系的“首选”标识符的键。
然而,重要的是要理解“主”键与任何其他键基本上没有什么不同,除非您选择这样做(或者由于 DBMS 软件的限制而被迫这样做)。因此,原则上没有绝对的理由必须始终指定一个“主”键。假设每个关系至少有一个候选键(根据定义它必须),那么您不妨将这些键中的一个或多个称为“主”。然而,指定一个且仅一个主键是一个非常严格的约定,这是基于 SQL 的 DBMS 语法所支持的约定。
作为历史细节,应该注意的是,关系模型的发明者 EFCodd 最初使用术语主键来表示关系的任何和所有键,而不仅仅是一个键。然而,在现代用法中,术语候选键用于最初称为主键的内容,而“主键”的名称以我上面描述的方式使用。不幸的是,在这一点上存在很多混淆,您经常会看到声称“主”键以某种任意方式与其他候选键不同的说法。
这是 Hugh Darwen 关于钥匙主题的:
一个 relvar 可以有多个键,但我们只选择一个作为下划线并将其称为主键。选择是任意的,因此从逻辑的角度来看,主要的概念并不是很重要。然而,密钥的一般概念非常重要!候选键一词的含义与键完全相同(即添加候选键没有实际意义——这是由 Ted Codd 提出的,因为他将每个键都视为被提名为主键的候选键)。
http://www.dcs.warwick.ac.uk/~hugh/M359/What-Is-a-Key.html