2014-07-27 35 views
0

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

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

候选关键字的一个子集是否有可能唯一标识该行?

OR

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

+0

这个问题似乎是脱离主题,因为它是关于关系数据库理论,而不是实际的编程。 cs.stackexchange.com可能会是一个更好的地方问。 – Barmar

+0

为什么要关闭这个问题。有这个问题与这个论坛上提出的问题,如stackoverflow.com/questions/8337309/superkey-candidate-key-primary-key。 –

+0

那是几年前,从那时起规则已经收紧了。 – Barmar

回答

3

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

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

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

在SQL中,您无法声明空候选键。此外,UNIQUE NOT NULL和PRIMARY KEY(就约束而言意味着UNIQUE NOT NULL)声明超级密钥,而不是密钥本身。如果这样的声明的列集不包含声明为超级键的较小列集,那么它声明的超级键是候选键。

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

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

2

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