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

我对这个关键业务感到非常困惑,在使用Google谷歌搜索之后,我将其范围缩小到只有我不知道的2个关键超级键)。

我对DBMS有一些疑问。

1)DBMS中的主键和超级键有什么区别?
如果您可以使用一个综合的例子来对它进行高度赞赏,请多加赞赏。正确解释

2)主键和超级键是否可以将多列组合在一起以形成主键和超级键?

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

评论

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

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

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

#1 楼

超级键只是一个非最小的候选键,也就是说,为确保行的唯一性,没有严格要求的附加列。

主键是最小的候选键,也就是说,必须严格要求所有构成列以确保唯一性。

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

评论


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

–philipxy
17年7月25日在9:10

此外,使用Boyce-Codd NF需要了解SK

–坦科姆
19-10-3在10:58

#2 楼

超级密钥:超级密钥代表密钥的超集。
超级密钥是一个或多个属性的集合,这些属性共同构成,并且可以唯一地标识所有其他属性。例如,
我们有桌子

Book (BookId, BookName, Author)


因此在此表中我们可以拥有
我们的超级钥匙。每个超级键都可以唯一地标识每个元组(记录)。

候选键
候选键是不具有任何冗余属性的超级键。键是最小的超级键。例如,在上图中,


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


这两个键可以是候选键,因为其余键具有冗余属性。
超级键(BookId,BookName)记录中的均值可以通过bookid唯一标识,因此Bookname是冗余属性。数据库设计人员选择使用它来标识实体集中的实体。
OR
用于唯一标识每个记录的键称为主键。

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

评论


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

–srk
18年8月19日在15:46

另请注意,备用键的另一个名称是辅助键,它们是相同的。好答案!

– Wael Alshabani
19年12月1日在19:11

#3 楼

来自我的这个stackoverflow.com答案:


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

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

在SQL中,您不能声明空的候选键。同样,UNIQUE NOT NULL和PRIMARY KEY(在约束方面仅表示UNIQUE NOT NULL)声明了超键,而不是键本身。如果这样的声明的列集不包含较小的声明为超键的列集,则它声明的超键是候选键。


从此stackoverflow.com的答案给定表:对于列X和Y的集合,我们可以写X->Y。我们说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成立在表T中,当X值的每个子行始终/仅与Y值的相同子行一起出现时。或者我们说X-> Y是T中的FD的FD。说X是T的决定因素。

表T的超键是一组起作用的列盟友确定每个属性。候选密钥(CK)是不包含更小的超级键的超级键。我们可以选择一个CK作为主键(PK),然后将其他CK称为备用键。


(我在那儿评论说,“ FD,holds,superkey和CK的四个粗体字就足够了。”)

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

#4 楼

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

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

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

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

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

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

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

超键是可以唯一地用于标识数据库记录的属性的组合。一个表可能有许多超级键。候选键是超键的特殊子集,其中没有任何多余的信息。该表有许多可能的超级键。其中三个是SSN,电话分机和名称。在列出的记录中,只有SSN是候选键,因为其他包含不包含唯一标识记录所必需的信息。

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

有关最小超级键的信息,请参考此链接,在http://www.answers.com/topic/superkey-1