维基百科中超键和主键的定义
超级键是表中的一组属性,其值可用于唯一标识一个元组。
和
主键必须包含不能被任何其他行复制的特征。主键可以由单个属性或多个属性组合组成。
我浏览了许多书籍并在互联网上冲浪,但我在其中发现了什么是主键和什么是超级键。
但我想知道的是,当我们可以通过 primarykey 唯一标识一个元组时,为什么需要 superkey ?
维基百科中超键和主键的定义
超级键是表中的一组属性,其值可用于唯一标识一个元组。
和
主键必须包含不能被任何其他行复制的特征。主键可以由单个属性或多个属性组合组成。
我浏览了许多书籍并在互联网上冲浪,但我在其中发现了什么是主键和什么是超级键。
但我想知道的是,当我们可以通过 primarykey 唯一标识一个元组时,为什么需要 superkey ?
超级键是为了概念完整性而定义的。出于参考目的,您永远不需要超级键。对主键的引用就可以了。
当您分析数据体以发现其中的所有功能依赖关系时,超级键的概念可能很有用。
一旦你发现了一个密钥,下一个问题就是它是否是一个超级密钥。如果是,则将注意力转向包含在超键中的候选键。
让我们首先定义这些术语的含义:
因此,每个主键都是键,但不是每个键都是主键。每个键都是超键,但不是每个超键都是键。
在数据库中物理强制执行键的约束是:PRIMARY KEY 约束(用于主键)和 UNIQUE 约束(用于备用键)。不应在所有超级键上创建这些约束,而应仅在键上创建这些约束。
根据数据的性质,在同一个表中有多个键并不罕见。例如,一个 USER 表可能具有唯一的 USER_ID和唯一的 USER_NAME。由于它们本身都需要是唯一的,因此您必须创建2 个这两个密钥,即使只需要其中一个来进行识别。
1也就是说,如果从其中删除任何属性,则超级键将不再是唯一的(因此,成为超级键)。
2即创建PRIMARY KEY 或UNIQUE 约束。
主键是超键。只有一个这样的键约束和只有一种识别元组的方法并不一定足够。
首先,关系模型的多功能性很大程度上源于它不预先确定如何可以或应该如何访问表中的数据。用户或应用程序可以根据当时可能需要或方便的任何属性集自由查询表。没有义务使用“主”键,这可能与某些查询相关,也可能不相关。
其次,唯一性约束(通常在候选键上)是一种数据完整性特征。他们保证数据不会在关键属性中重复。这种约束通常对不止一组属性有用,在这些属性中,业务规则规定事物应该是唯一的。一件事的唯一性显然不能保证另一件事的唯一性。
第三,查询优化器可以利用任何和所有键作为通过查询重写来优化数据访问的一种方式。从优化器的角度来看,它必须在表中使用的键越多越好。
key
通常是 a 的缩写candidate key
。Superkey
表示键的超集(键属性等)。superkey
称为 a candidate key
。(不可约意味着如果你删除一个属性,它就不再是键了);通常,给定关系(实际上是关系变量)不止一个candidate key
。candidate key
设计师选择(出于某种原因)更喜欢的一种称为primary key
.这是在逻辑层面上,键是为关系变量定义的,即所谓的 relvars。
在物理实现中:
我认为超级键只是关系代数抽象的一部分-您的主键(可能)是最小的超级键,但您可能有其他超级键,而您只有一个主键。