0

正如我们所知,候选键是唯一标识关系中的行的列或列组合。

假设我有一个关系,其中候选键是列的组合。我想问一下,

候选键的子集是否也可以唯一标识该行?

或者

候选键是没有唯一标识行的子集的键吗?

4

2 回答 2

3

候选键是一列或列的组合。或者更准确地说是一组一个或多个列。或者更准确地说是一组列。

候选键是唯一标识行的一组列,并且不包含唯一标识行的列的较小(“适当”)子集。

超级键是一组唯一标识行的列。所以候选键是一个不包含更小的超键的超键。

在 SQL 中,您不能声明一个空的候选键。此外,UNIQUE NOT NULL 和 PRIMARY KEY(就约束而言仅表示 UNIQUE NOT NULL)声明超级键,而不是键本身。如果此类声明的列集不包含声明为超键的较小列集,则它声明的超键是候选键。

您的问题最初是说您有一个关系,其中候选键是“键的组合”。也许您的意思是,超级键(列)的一些较小子集是超级键或候选键。

所以不,候选键不能包含较小的候选键。另一方面,在 SQL 中,您可以在另一个 UNIQUE/PK 声明的列的较小子集上使用 UNIQUE/PK 声明。但是后者不会成为候选键。

于 2014-07-27T12:13:40.850 回答
2

根据定义,没有一个候选键的真子集可以识别一行。

于 2014-07-27T12:10:38.613 回答