2013-04-18 40 views
3

认定中的超密钥和维基百科中的主键的当我们可以通过主键唯一识别一个元组时,为什么需要superkey?

A superkey is a set of attributes within a table whose values can be used to uniquely identify a tuple. 

The primary key has to consist of characteristics that cannot be duplicated by any other row. The primary key may consist of a single attribute or a multiple attributes in combination. 

我已经经历了很多书不见了,冲浪互联网上,但我在他们发现的是

what is primarykey and what is superkey 

但是我想知道的是为什么当我们可以通过primarykey唯一地识别一个元组时,为什么需要superkey?

在此先感谢。

+0

可能重复[超级键和候选键之间的区别是什么?](http://stackoverflow.com/questions/4519825/what-are-the-differences-between-a-superkey-and-a -candidate-key) –

+0

我已经提到我知道主键和超键是什么,但我想知道的是他们进化背后的原因,当我们已经有一个可以唯一标识元组的键时,我们为什么需要另一个。 –

回答

3

让我们来定义这些术语的含义在首位:

  • 一个“超密钥”是任何一组,加在一起,唯一地标识表中的行属性。
  • 的最小超密钥被称为“候选键”,或者只是“钥匙”
  • 在同一个表的所有按键均逻辑上等同,但对于historical and practical reasons我们选择其中之一,并把它“初级”,而其余的都是“备用”键。

因此,每个主键都是关键,但不是每个关键都是主关键。每把钥匙都是超级钥匙,但并不是每个超级钥匙都是钥匙。

在数据库中物理强制执行键的约束是:PRIMARY KEY约束(用于主键)和UNIQUE约束(用于备用键)。这些约束不应该在所有超级键上创建,只能在键上创建。

根据数据的性质,在同一个表中有多个密钥并不罕见。例如,USER表可能具有唯一的USER_ID 唯一的USER_NAME。由于它们都必须是独一无二的,所以您必须创建两个密钥,即使只有其中一个密钥用于识别。


即,超密钥,将停止是唯一的(因此,作为一个超密钥)如果任何属性,从它除去。

即,创建PRIMARY KEY或UNIQUE约束。

+0

来自维基百科 - 主键必须包含任何其他行不能复制的特征。 **主键可以由单个属性或多个属性组合而成。**当主键可以有多个属性组合时,那么超级键有什么用? –

+1

@ pd4627是的,对于备用钥匙也是如此。 superkey的概念主要是数据建模的心理装置 - 首先确定超级密钥,然后将它们“缩小”到密钥(只有密钥实际上在数据库中实施)。这并不意味着密钥不能是复合的(即,是多个属性的组合)。 –

+1

@ pd4627让我展开一下superkeys吧...想象一下你有一把钥匙。 **每个**超集都是超级密钥,包括整行!正如你所看到的,可以有大量的超级键,其中许多超级键部分重叠。因此,这不是一个实际的概念 - 它只是为了更容易地对数据建模进行分类和推理。 –

1

我认为superkey只是关系代数抽象的一部分 - 您的主键(可能)是最小的超级键,但您可能有其他超级键,而您只有一个主键。

+0

但他们正在做的核心功能是唯一标识一个元组,当一个密钥可以有效地完成时,那么为什么还需要其他密钥? –

+0

@ pd4627 rjp说得没错,有一个主键也是一个超级键 - 那里_might_也可以是其他一些超级键(或唯一的条目),其中一些可能是主键的候选对象。 – Argeman

+0

但为什么当我们已经有主键来识别唯一元组时,超级键的概念就演变了? –

2
  • 一个词key通常是candidate key的简写。
  • Superkey意味着一个键的超集(关键属性和更多)。
  • Irreducible superkey被称为candidate key。 (不可简化意味着如果你删除一个属性,它不再是一个关键);一般来说,给定关系(实际上是关系变量)有多个candidate key
  • 一个candidate key设计师选择(由于某种原因)选择primary key

这是在逻辑层面上,关键字定义为关系变量,所谓的relvars。

在物理实现:

  • Relvar映射到表。
  • 表的主键的主键。
  • 其他候选键(PK除外)映射到备用键(唯一非空)。
+0

但是答案在这里没有道理,因为我们可以通过主键非常简单地识别一个元组,那么为什么需要superkey? –

+1

@ pd4627 cont ..根据定义,关系不具有重复的元组,因此关系变量中的标题(所有属性的集合)是超级键;从这一点开始减少(去除属性)以获得候选键。最后你选择一个你喜欢的主键。 –

+1

@ pd4627如果** A **是** B的子集** - 如果** B **不存在,是否可以存在** A **?主键是超级键的子集。另外每个集合都是它自己的子集 - 所以主键也是一个超级键。 –

2

主键的超级键。只有一个这样的关键约束并且只有一种识别元组的方式不一定就足够了。

首先,关系模型的多功能性来自于这样一个事实,即它不确定而不是预先确定数据可以或应该如何在表中访问。用户或应用程序可以根据当时可能需要或方便的任何一组属性来查询表格。没有义务使用“主要”密钥,这可能与某些查询相关,也可能不相关。其次,唯一性约束(通常在候选密钥上)是数据完整性特征。它们保证数据不会在关键属性中重复。对于业务规则规定事物应该是唯一的多个属性集合,这种约束通常是有用的。单独一件事的独特性显然不能保证另一件事的独特性。

第三,查询优化器可以利用任何和所有的键作为优化通过查询重写进行数据访问的一种方式。从优化器的角度来看,在表格中使用的键越多越好。

3

超级键是为概念完整性而定义的。您从不需要超级密钥以供参考。对主键的引用将会很好。

当您分析数据主体以发现其中的所有函数依赖关系时,superkeys的概念可能很有用。

一旦你发现了一个密钥,下一个问题是它是否是一个超级密钥。如果是,您将注意力转向包含在超级键中的候选键。

相关问题