我们可以在一个关系中拥有多个候选键。但是我们可以在长度不同的关系中有两个候选键吗?
假设我有一个关系 R(A,B,C,D,E),我们只有两组属性,它们唯一地标识关系中的一个元组:{A,B,C} 和 {D,E}。
那么我们可以说 {A,B,C} 和 {D,E} 都是候选键吗?
我们可以在一个关系中拥有多个候选键。但是我们可以在长度不同的关系中有两个候选键吗?
假设我有一个关系 R(A,B,C,D,E),我们只有两组属性,它们唯一地标识关系中的一个元组:{A,B,C} 和 {D,E}。
那么我们可以说 {A,B,C} 和 {D,E} 都是候选键吗?
但是我们可以在长度不同的关系中有两个候选键吗?
是的。
CK(候选键)是不包含更小的超键(唯一列集)。
所以我们有时说 CK 是一个“最小”的超级密钥,在这个意义上使用“最小”是指一个特定的超级密钥不能通过删除属性变成更小的超级密钥。这并不意味着可能会想到的其他事情。特别是,这并不意味着一个 CK 的属性比任何其他 CK 少,或者没有比另一个 CK 更多的属性。
您需要了解技术术语的定义。名字不会告诉你任何事情。
在遵循定义时担心您注意到的事情也是没有意义的。跟着它走。
假设我有一个关系 R(A,B,C,D,E),我们只有两组属性,它们唯一地标识关系中的一个元组:{A,B,C} 和 {D,E}。
这是不可能的。如果 {A,B,C} 和 {D,E} 是唯一的,那么它们的所有超集也是唯一的。例如,所有属性的集合总是唯一的,这里是 {A,B,C,D,E}。
大概你的意思是,我们只有两个最小的“唯一标识一个元组的属性集”,即只有两个CK。
那么我们可以说 ABC 和 DE 都是候选键吗?
如果这两个唯一集都不包含较小的唯一集,则可以。根据CK的定义。
如果需要满足两个要求,为了使行组合成为主键候选者:
a.) 所有列都不能包含 NULL 值。
b.) 组合必须是唯一的。