主键是否也是超级密钥和候选密钥?他们的定义很冗长,但我想知道这是否属实?
请注意,我不是在问他们是否是同一个词。我只是向一个方向询问,而不是反过来。
答案 0 :(得分:7)
超级密钥 - 是一组可用于在表格中唯一标识记录的一列或多列
候选键 - 可以是任何可以作为数据库中唯一键的列或列组合。一个表中可以有多个候选键。每个候选密钥都可以作为主键。您可以将此视为“最短”超级密钥或最小超级密钥
主键 - 是唯一标识记录的列或列组合。只有一个候选密钥可以是主密钥。
要使候选人资格成为主要资格,它应该是唯一且非空的。
因此,基本上主键只是候选键之一,这只是一个最小的超级键。
答案 1 :(得分:2)
根据干燥定义:
根据定义,您的主键是超级键 - 您不能有两行具有相同的主键。
但是,主键不是您商家的natural约束,而是数据存储中的人为约束:例如,您可以将某人的生日设置为表中的主键,并且永远不会有两个人出生在同一天。那将是愚蠢的,但可能。在这种情况下,表的主键不是域的超级键。
但是,您的主键不一定是候选键 - 您可以向主键添加冗余列。
答案 2 :(得分:0)
能够识别数据库中任何行的不同属性集称为超级密钥。并且最小超级密钥被称为候选密钥,即具有最小数量的属性的一组超级密钥。主键可以是能够以唯一方式标识数据库中的特定行的任何键。 from this thread
在Google中键入所有三个键会显示2,480,000 results
答案 3 :(得分:0)
取决于。
主键是表用于在不同元素之间进行标识的主键。它是从候选键中选择的。
候选键是可以作为主键的所有键。所有键都是唯一的,可以在表格中区分。
超级密钥是具有附加属性的主键,此额外信息用于唯一标识实体集的实例。
答案 4 :(得分:0)
候选键是唯一标识元组的最小字段子集。例如,如果列上有候选键" user_id"和" pet_id"你永远不会有超过1个具有相同user_id和pet_id的元组,并且user_id和pet_id都不能单独作为元组的唯一标识符。
超级密钥是一组包含密钥的字段。使用以上示例组合" user_id"和" pet_id"如果我们添加" pet_name"则唯一标识元组。 (这不是关键,因为我们可以有多个名为&#34的宠物;蓬松")它将是一把超级钥匙。基本上它就像一个没有"最小字段子集的候选键"约束。
主键是您告诉DB优化的候选键。可能有多种方式可以引用唯一的元组(即多个候选键),但是当您创建最常使用的表时,可以指定一个。
答案 5 :(得分:0)
是的,我们可以简单地说一个候选键是主键,但是它必须是唯一的。