3

主键也是超级键和候选键吗?他们的定义很长,但我想知道这是不是真的?

请注意,我不是在问它们是否是同一个术语。我只是问一个方向,而不是反过来。

4

6 回答 6

7
  • 超级键- 是一组一个或多个列,可用于唯一标识表中的记录

  • 候选键- 可以是任何列或可以作为数据库中唯一键的列组合。一张表中可以有多个候选键。每个候选键都可以作为主键。您可以将其视为“最短”超级密钥或最小超级密钥

  • 主键– 是唯一标识记录的列或列组合。只有一个候选键可以是主键。

对于有资格作为主键的候选键,它应该是唯一且非空的。

因此,基本上主键只是候选键之一,它只是一个最小的超级键。

于 2013-02-07T06:36:35.343 回答
2

根据干定义:

根据定义,您的主键是超级键- 您不能有两行具有相同的主键。
但是,主键不是你业务的自然约束,而是你数据存储中的人为约束:例如,你可以在表中设置一个人的生日作为主键,并且永远不会有两个人出生在同一天。这很愚蠢,但有可能。在这种情况下,主键不是域的超键

但是,您的主键不一定是候选键- 您可以向主键添加冗余列。

于 2013-02-07T06:36:47.047 回答
0

这取决于。

主键是表用来识别不同元素的主键。它是从候选键中选择的。

候选键是所有可能是主键的键。所有唯一且可以在表中区分的键。

超级键是一个带有附加属性的主键,这个附加信息用于唯一标识实体集的一个实例。

于 2013-02-07T06:17:48.860 回答
0

能够识别数据库中任何行的不同属性集称为超级键。最小超键被称为候选键,即在一组超键中具有最少属性的一个。主键可以是能够以唯一方式识别数据库中特定行的任何键。从这个线程

在谷歌中输入所有三个键会得到大约2,480,000 个结果

于 2013-02-07T06:15:12.063 回答
0

候选键是唯一标识元组的最小字段子集。例如,如果您在“user_id”和“pet_id”列上有一个候选键,那么您永远不会有超过 1 个具有相同 user_id 和 pet_id 的元组,并且 user_id 和 pet_id 都不能单独用作元组的唯一标识符。

超级键是一组包含键的字段。使用上面的示例,如果我们添加“pet_name”(这不是键,因为我们可以有多个名为“fluffy”的宠物),“user_id”和“pet_id”的组合唯一地标识了一个元组,这将是一个超级键。基本上它就像一个没有“最小字段子集”约束的候选键。

主键是您告诉数据库进行优化的候选键。可能有多种方法可以引用唯一元组(即多个候选键),但您可以在创建最常使用的表时指定一种。

于 2015-08-18T14:01:25.747 回答
0

是的,我们可以简单地说候选键是主键,但它必须是唯一的。

于 2019-07-31T23:28:23.077 回答