2013-02-07 68 views
3

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

请注意,我不问他们是否是相同的任期。我只是问一个方向,而不是相反方向。

+0

是的主键是候选键,因此也是一个超级键。 – sqlvogel

回答

0

能够识别数据库中的任何行的不同属性集称为超级密钥。并且最小超级密钥被称为候选密钥,即在具有最小数量的属性的超级密钥集合之中。主键可以是能够以唯一方式识别数据库中的特定行的任何键。 from this thread

和打字在谷歌所有的三个按键为您提供有关2,480,000 results

0

这要看情况。

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

候选键是可能成为主键的所有键。所有的钥匙都是独一无二的,并且可以在桌子上加以区分。

超级密钥是具有附加属性的主键,这些额外信息用于唯一标识实体组的实例。

7
  • 超级中心 - 是一套可用于在表中唯一标识记录的一个或多个列的

  • 候选键 - 可以是任何列或组合可以作为数据库中唯一密钥的列。在一个表中可以有多个候选键。每个候选键都可以被认定为主键。你可以认为这是“最短”超级键或最小超级键

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

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

所以,基本上主键只是其中一个候选键,它只是一个最小的超级键。

2

根据干的定义:

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

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

+0

+1好点,但最后一句话是不正确的。根据定义,主键必须是最小的(即候选键)。也许你的意思是,SQL中的PRIMARY KEY约束可能被定义在非最小的一组列上。那是真实的。但是,这只能证明SQL语法是不恰当的,因为定义的列可能根本不是主键。 SQL语法的奇怪之处肯定与实际问题没有关系,这只是关于主键(即候选键总是最小的超级键)。 – sqlvogel

0

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

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

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