为什么我们可以通过主键唯一地识别元组时需要超级键?

时间:2013-04-18 08:04:50

标签: database database-design relational-database

维基百科中超级键和主键的定义

  

超级键是表中的一组属性,其值可用于唯一标识元组。

  

主键必须包含任何其他行都无法复制的特征。主键可以由单个属性或多个属性组合而成。

我经历了很多书并在网上冲浪,但我发现它们的主要内容是什么是主键,什么是超级键。

但我想知道的是,当我们通过primarykey唯一地识别元组时,为什么需要超级密钥?

5 个答案:

答案 0 :(得分:4)

超级键是为概念完整性定义的。您永远不需要超级密钥作为参考。对主键的引用也可以。

当您分析数据主体以发现其中的所有功能依赖性时,超级密钥的概念非常有用。

一旦找到密钥,下一个问题是它是否是超级密钥。如果是,您将注意力转移到超级键中包含的候选键。

答案 1 :(得分:3)

让我们首先定义这些术语的含义:

  • “超级密钥”是任何一组属性,当它们合在一起时,唯一地标识表中的行。
  • 最小 1 超级密钥称为“候选密钥”,或只是“密钥”
  • 同一个表中的所有键在逻辑上都是等价的,但对于historical and practical reasons我们选择其中一个并称之为“primary”,而其余的“alternate”< / strong> keys。

因此,每个主键都是键,但不是每个键都是主键。每个密钥都是超级密钥,但不是每个密钥都是密钥。

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

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


1 也就是说,如果从中删除了任何属性,那么该超级密钥将不再是唯一的(因此,它是一个超级密钥)。

2 I.e。创建PRIMARY KEY或UNIQUE约束。

答案 2 :(得分:2)

  • 单词key通常是candidate key的缩写。
  • Superkey表示密钥的超集(关键属性等等)。
  • 不可减少的superkey被称为candidate key。 (不可减少意味着如果你删除一个属性,它就不再是一个键);一般来说,给定关系(实际上是关系变量)有多个candidate key
  • 设计师选择喜欢的candidate key(由于某种原因)被称为primary key

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

在物理实施中:

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

答案 3 :(得分:2)

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

首先,关系模型的多功能性非常源于它预先确定如何在表中访问数据的事实。用户或应用程序可以根据当时可能需要或方便的任何属性集来自由查询表。没有义务使用“主要”密钥,这可能与某些查询相关,也可能不相关。

其次,唯一性约束(通常在候选键上)是数据完整性特征。它们保证数据不会在关键属性中重复。这种约束通常适用于多个属性集,其中业务规则规定事物应该是唯一的。单独一件事的独特性显然不能保证另一件事的独特性。

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

答案 4 :(得分:1)

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