DBMS中的主键和超级键有什么区别


20

我是DBMS的新手,但仍在学习该理论。

我对这个关键业务感到非常困惑,在谷歌搜索之后,我将其范围缩小到只有我没有得到的两个关键(主键和超级键)。

我对DBMS有几个问题。如果您能为我回答,我将不胜感激。

1)DBMS中的主键和超级键有什么区别? 如果您可以使用一个全面的示例正确解释,请多多关照

2)主键和超级键可以有多个列组合形成主键和超级键吗?

3)主键是超级键的子集,反之亦然吗?


1
很多东西掩盖的一件事是,元组(行)本身是一个超键。由于目的是能够唯一地标识该行,即能够唯一地标识包含值的特定组合的元组,所以一种实现方法是已经具有所有可用值。因此,元组本身就是一个超键,因为一旦我们知道了元组中的值,那么显然我们就会知道如何找到具有这些值的元组。乍一看似乎很愚蠢,但它为元组的超级键(元组本身)建立了上限。
戴夫

@Dave关系/表的所有列名(及其每个元组/行)的集合是它的超键。不是“元组(行)本身”。
philipxy

@philipxy您说得对,我弄错了-我的立场是正确的。感谢您添加说明。
戴夫

Answers:


23

一个超级中心是一个简单的非最小的候选键,也就是一个有没有严格要求,以确保该行的唯一附加列。

一个主键是一个最小的候选键,这是说所有组成列,以确保其唯一性严格要求。

作为拥有30年经验的数据库开发人员/设计人员,直到我看到这个问题并加以查询之前,我什至从未听说过“ 超级密钥 ”一词。超级键的概念似乎与性能和物理模式设计主题更紧密相关,因为它直接映射到唯一的非聚集索引的概念,该索引带有附加的列以改善查询范围。


3
这是非常不准确的。您正在使用超级键,CK和PK代替适当的超级键,超级键和CK。超级键是唯一集。(一个CK是一个“最小”超键。没有“最小CK”的概念。每个CK都是一个超键。因此,一个超键不必具有比CK多的列。一个PK是一个称为PK的CK。如果必须为“最小CK”,则“最小”必须表示“任意”。)SQL PK和UNIQUE NOT NULL声明超键。(SQL PK可能是PK,也可能不是PK。)超键对于CK的定义至关重要,而CK对于定义包括规范化的设计至关重要。看我的答案。
philipxy

1
此外,需要使用Boyce-Codd NF
Tanckom

16

超级密钥:超级密钥代表密钥的超级集。超级密钥是一个或多个属性的集合,这些属性被共同采用并且可以唯一地标识所有其他属性。

例如,我们有桌子

Book (BookId, BookName, Author)

因此,在此表中,我们可以

   (BookId)
   (BookId,BookName)
   (BookId, BookName, Author)
   (BookId, Author)
   (BookName, Author)

作为我们的超级钥匙。每个超级键都可以唯一地标识每个元组(记录)。

候选键候选键是没有任何冗余属性的超级键。换句话说,候选密钥是最小超级密钥。例如,在上图中

   (BookId)
   (BookName,Author)

这两个密钥可以是候选密钥,因为其余密钥具有冗余属性。超级键(BookId,BookName)记录中的均值可以仅通过bookid唯一标识,因此Bookname是冗余属性

主键:是数据库设计人员选择的候选键,用于标识实体集中的实体。或用于唯一标识每个记录的键称为主键。

从上面,候选键中的任何一个都可以是主键。而另一个未被选择为主键的键称为备用键


这回答了这个问题,值得赞扬。
srk

另请注意,它们的另一个名称alternative keysecondary key相同的。好答案!
Wael Alshabani

2

从我的这个stackoverflow.com答案

候选关键字是一组唯一标识行的列,并且不包含唯一标识行的较小(“适当”)列子集。

超键是一组唯一标识行的列。因此,候选键是不包含更小的超级键的超级键。

在SQL中,您不能声明空的候选键。同样,UNIQUE NOT NULL和PRIMARY KEY(就约束而言,这意味着UNIQUE NOT NULL)声明了超键,而不是键本身。如果此类声明的列集不包含声明为超键的较小列集,则它声明的超键是候选键。

从我的这个stackoverflow.com答案重新给定表:

对于列集合X和Y的,我们可以写X - >ÿ我们说X是行列式集,而Y是函数依存关系FD)X-> Y 的确定集

我们说X在功能上确定 Y,而Y 在功能上由 X 确定。我们说X是X-> Y 的行列式。在{C}-> Y中,我们说C在功能上确定 Y。在X-> {C}中,我们说X 功能上确定 C。当X是Y的超集时,我们说X-> Y是平凡的

当X值的每个子行始终/仅与Y值的相同子行一起出现时,我们说X-> Y 表T中成立。或者我们说X-> Y是T中的FD FD 。当X是行列式时在表T中的某些FD中,我们说X T 的决定因素

超密钥一个表T的是一组列在功能上确定的每个属性。一个候选键CK)是不包含更小的超密钥一个超密钥。我们可以选择一个CK作为主键PK),然后将其他CK称为备用键。当列位于某些CK中时,该列为素数

(正如我在此处评论的那样,“ FD,hold,superkey和CK这四个粗体字就足够了。”)

(具有空CK的表被限制为最多包含一行。由空集确定的列集被限制为每行具有相同的子行值。)


1

密钥密钥是单个或多个字段的组合。它的目的是根据需要访问或检索表中的数据行。在表中定义了键,以便快速,平稳地访问或排序存储的数据。它们还用于在不同表之间创建链接。

按键类型下表或关系式将用于定义不同的按键类型。

主键唯一标识关系中的行或记录的属性或属性组合称为主键。

辅助键作为检索基础的字段或字段组合称为辅助键。辅助密钥是一个非唯一字段。一个辅助键值可以引用许多记录。

候选键或备用键关系只能有一个主键。它可能包含许多字段或可用作主键的字段组合。一个字段或字段的组合用作主键。未用作主键的字段或字段组合称为候选键或备用键。

复合键或串联键由两个或多个属性组成的主键称为复合键。

排序或控制键用于对存储的数据进行物理排序的字段或字段组合,称为排序键。也称为控制键。

超密钥是可以唯一地用于识别的数据库记录的属性的组合。一个表可能有许多超级键。候选键是超键的特殊子集,其中没有任何多余的信息。

超键示例:想象一个包含名称,年龄,SSN和<电话分机>字段的表。该表有许多可能的超级键。其中三个是SSN,电话分机和名称。在列出的那些中,只有SSN是候选密钥,因为其他的包含唯一标识记录所不需要的信息。

外键外键是关系中属性的值或属性组合,其值与另一个关系中的主键匹配。在其中创建外键的表称为从属表。它引用的外键表称为父表。

有关“ 最小超级键”的信息,请参见此链接,网址为http://www.answers.com/topic/superkey-1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.