【问题标题】:Superkey vs. Candidate key超级密钥与候选密钥
【发布时间】:2011-03-06 11:37:23
【问题描述】:

ERDB 中的 Super 和 Candidate 键有什么区别?

【问题讨论】:

  • Superkey 和 Candidate Key 是关系数据库模型术语。 “ERDB”是什么意思?也许您指的是实体关系 (ER) 模型,它是一组用于绘制有关数据的图片的约定。 ER 模型与关系模型有所不同。

标签: sql database database-design ddl


【解决方案1】:

超级键是一组唯一标识行的列。候选键将是唯一标识行的最小列集。所以本质上,超级键是一个候选键,其中包含额外的不必要的列。

【讨论】:

  • “超级键是具有额外不必要列的候选键”——实际上可能需要额外的列来引用表并确保数据完整性,例如(employee_ID) 是唯一的,但对于根据部门限制员工的某些表,可能需要 (employee_ID, department_name) 上的键。
【解决方案2】:

候选键是一个最小超级键

【讨论】:

  • +1,另外最好在这里定义“最小”,因为它不直观。例如在表 (a,b,c) 中,(a) 是唯一的,并且 (b,c) 也是唯一的,因此 (a) 和 (b,c) 都应该是候选键。
  • 最小的意思是如果候选键中的一个属性被删除,则该行不能再被唯一标识。
【解决方案3】:
  • 候选键 = 标识行的最小键
  • 超级键 = 至少与候选键一样宽

对我来说,超级键通常会在候选键上引入歧义

【讨论】:

  • 候选键是最小超键。因此,超级键并不是严格意义上的“更宽”,因为候选键也是超级键。
  • @david:“最小超级键”不是矛盾吗?
  • “通常会引入歧义”——你是什么意思?例如,在这个答案 (stackoverflow.com/questions/3938736/…) 中,EmployeeDepartments 表有一个候选键 (employee_ID) 和一个超键 (employee_department_name, employee_ID)。两者都是数据完整性所必需的,歧义在哪里?
  • @onedaywhen: (employee_department_name, employee_ID) 意味着您可以为多个employee_department_name 值使用相同的employee_ID。那么employee_ID 本身怎么可能是唯一键呢?
  • @gbn:FWIW 我自己相信使用自然键,但我反对超自然键;)
【解决方案4】:

让我们保持简单

SuperKey - 一组唯一定义 row 的键。所以在所有属性中,如果任何一个是 unique,那么所有具有该唯一属性的子集都属于 @ 987654323@.

候选键 - 一个superkey,无法从中派生出可以识别rows uniquely的进一步子集,或者我们可以简单地说它是minimal superkey

【讨论】:

    【解决方案5】:

    简而言之:CANDIDATE KEY 是最小的 SUPER KEY。

    其中 Super key 是列(或属性)的组合,用于唯一标识 RDBMS 中关系(表)中的任何记录(或元组)。


    例如,考虑具有 A、B、C 和 D 列的表中的以下依赖项 (给出这个表只是为了一个简单的例子,所以没有涵盖 R 可能具有的所有依赖项)。

    属性集(行列式)---可以识别--->(从属)

    A-----> 广告

    B-----> ABCD

    C-----> 光盘

    AC----->ACD

    AB----->ABCD

    ABC----->ABCD

    BCD----->ABCD


    现在,B、AB、ABC、BCD 标识所有列,因此这四个列符合超级键的条件。

    但是,B⊂AB; B⊂ABC; B⊂BCD 因此 AB、ABC 和 BCD 不符合候选键的资格,因为它们的子集可以识别关系,因此它们不是最小的,因此只有 B 是候选键,而不是其他键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多