我们知道候选键是一列或列的组合,它们唯一地标识关系中的行。
假设我有一个关系,其中候选键是列的组合。我想问一下,
候选键的子集是否也可以唯一地标识该行?
OR
是一个候选键,一个键没有唯一标识该行的子集?
答案 0 :(得分:3)
候选键是列或列的组合。或者更准确地说是一组一列或多列。或者更确切地说是一组列。
候选键是一组唯一标识行的列,并且不包含唯一标识行的较小(“正确”)列子集。
超级键是一组唯一标识行的列。所以候选键是一个超级密钥,不包含任何较小的超级密钥。
在SQL中,您无法声明空的候选键。此外,UNIQUE NOT NULL和PRIMARY KEY(在约束方面仅表示UNIQUE NOT NULL)声明超级密钥,而不是密钥本身。如果这样的声明的列集不包含声明为超级键的较小列集,则它声明的超级键是候选键。
你的问题最初说你有一个关系,其中候选键是“键组合”。也许你的意思是,超级密钥的一些较小的子集(超级密钥是超级密钥或候选密钥)。
所以不,候选键不能包含较小的候选键。另一方面,在SQL中,您可以在另一个UNIQUE / PK声明的列的较小子集上具有UNIQUE / PK声明。但后者不会成为候选人。
答案 1 :(得分:2)
根据定义,候选键的任何适当子集都不能识别行。