【问题标题】:Can a relation have Candidate Keys with different lengths?关系可以有不同长度的候选键吗?
【发布时间】:2017-08-06 15:33:49
【问题描述】:

我们可以在一个关系中拥有多个候选键。但是我们可以在长度不同的关系中有两个候选键吗?

假设我有一个关系 R(A,B,C,D,E) 并且我们只有两组属性可以唯一地标识关系中的一个元组:{A,B,C} 和 {D,E} .

那么我们可以说 {A,B,C} 和 {D,E} 都是候选键吗?

【问题讨论】:

  • 对于 DBA Stack Exchange 来说可能是一个更好的问题。
  • CK的定义是什么?谷歌搜索(许多清晰、简洁、具体的变体)你的问题告诉你什么? PS你原来的帖子中的“Set1”是什么? (点击“已编辑”查看以前的版本。)

标签: database relational unique-key candidate-key


【解决方案1】:

但是我们可以在长度不同的关系中有两个候选键吗?

是的。

CK (candidate key) 是一个超级键(唯一列集),不包含更小的键。

所以我们有时会说 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}。

大概你的意思是,我们只有两个最小“唯一标识一个元组的属性集”,即只有两个CKs

那么我们可以说 ABC 和 DE 都是候选键吗?

如果这两个唯一集都不包含较小的唯一集,则可以。根据CK的定义。

【讨论】:

    【解决方案2】:

    如果需要满足两个要求,则为了使行组合成为主键候选:

    a.) 所有列都不能包含 NULL 值。

    b.) 组合必须是唯一的。

    【讨论】:

    • 这不能回答问题。 PS 关系没有空值,SQL 表有空值。关系术语并不总是与联想 SQL 术语具有相同的含义。假设一个表没有空值和重复行,那么我们可以将关系术语应用于 SQL 表,SQL PK 不一定是 CK,它通常只是一个超键。您已经描述了声明 SQL PK 而非关系 CK/PK 所需的标准。
    • 它确实回答了这个问题,但也许我应该多说一点:我将候选键解释为可能充当 PK 或 FK 的列的组合。如果引用表中的列组合是候选主键,则可以通过在其上定义唯一约束(在大多数 RDBM 上)将其用作外键,因此是候选键。
    • CK 有一个定义,而你没有给出它。 CK 是不包含更小的超级密钥的超级密钥。 FK 无关紧要。它们不是 CK 定义的一部分。无论如何,想叫什么CK并不重要,重要的是question叫什么CK。 (无论如何,关系 FK 引用关系 CK,但是对于可以被视为关系的 SQL 表,所谓的 FK 引用 superkey--SQL 所谓的 PK 或 UNIQUE NOT NULL--不一定CK。
    • 我不回答的意思是,标题和第一段中的问题,“关系可以有不同长度的候选键吗?”。我想给“CK”下一个定义,正如你试图做的那样,是一个开始。 (尽管您给出了其他东西的定义。)我同意将 CK 的定义应用于问题的示例表明答案是“是”。但你没有解决这个问题。或者问题中的其他误解——请参阅我的回答。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2011-08-12
    • 2013-10-29
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    相关资源
    最近更新 更多