候选键的子集

时间:2014-07-27 11:44:56

标签: sql relational-database candidate-key

我们知道候选键是一列或列的组合,它们唯一地标识关系中的行。

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

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

OR

是一个候选键,一个键没有唯一标识该行的子集?

2 个答案:

答案 0 :(得分:3)

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

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

超级键是一组唯一标识行的列。所以候选键是一个超级密钥,不包含任何较小的超级密钥。

在SQL中,您无法声明空的候选键。此外,UNIQUE NOT NULL和PRIMARY KEY(在约束方面仅表示UNIQUE NOT NULL)声明超级密钥,而不是密钥本身。如果这样的声明的列集不包含声明为超级键的较小列集,则它声明的超级键是候选键。

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

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

答案 1 :(得分:2)

根据定义,候选键的任何适当子集都不能识别行。