# Superkey

Uma superkey, ou superchave, é definida no modelo relacional de organização de banco de dados como um conjunto de atributos de uma variável de relação para a qual se afirma que em todas as relações atribuídas a essa variável, não há duas linhas distintas que tenham o mesmo valores para os atributos neste conjunto. Ele pode ser definido como um conjunto de atributos de um esquema de relação do qual todos os atributos do esquema são funcionalmente dependentes.
O conjunto de todos os atributos é uma superkey trivial, porque na álgebra relacional linhas duplicadas não são permitidas: linhas são um conjunto (sem duplicatas), não um multiconjunto (duplicatas permitidas). A superkey também é conhecida como chave de superconjunto.
Se o conjunto de atributos K é uma superchave da relação R, então sempre acontece que a projeção de R sobre K tem a mesma cardinalidade que o próprio R.
Uma superchave é um conjunto de atributos em uma tabela cujos valores podem ser usados para identificar exclusivamente uma tupla. Uma chave candidata é um conjunto mínimo de atributos necessários para identificar uma tupla; isso também é chamado de superchave mínima. Dado um esquema de funcionário que consiste nos atributos employeeID, name, job e departmentID, em que nenhum valor no atributo employeeID é repetido, podemos usar o employeeID em combinação com qualquer ou todos os outros atributos desta tabela para identificar exclusivamente uma tupla em a mesa. Exemplos de superchaves neste esquema seriam {employeeID, Name}, {employeeID, Name, job} e {employeeID, Name, job, departmentID}. O último exemplo é conhecido como superchave trivial, porque usa todos os atributos desta tabela para identificar a tupla.
Em um banco de dados real, não precisamos de valores para todos esses atributos para identificar uma tupla. Precisamos apenas, por nosso exemplo, do conjunto {employeeID}. Esta é uma superchave mínima - ou seja, um conjunto mínimo de atributos que podem ser usados para identificar uma única tupla. EmployeeID é uma chave candidata.

## Exemplo

Monarcas Ingleses :
| Nome do Monarca | Número do Monarca | Casa Real |
| Edward | II | Plantagenet |
| Edward | III | Plantagenet |
| Richard | III | Plantagenet |
| Henry | IV | Lancaster |
Primeiro, liste todos os conjuntos de atributos:
* {Nome do Monarca}
* {Número do Monarca}
* {Casa Real}
* {Nome do Monarca, Número do Monarca}
* {Nome do Monarca, Casa Real}
* {Número do Monarca, Casa Real}
* {Nome do Monarca, Número do Monarca, Casa Real}
Em segundo lugar, elimine todos os conjuntos que não atendam aos requisitos da superchave. Por exemplo, {Nome do Monarca, Casa Real} não pode ser uma superchave porque para os mesmos valores de atributo (Edward, Plantagenet), existem duas tuplas distintas:
* (Edward, II, Plantagenet)
* (Edward, III, Plantagenet)
Finalmente, após a eliminação, os conjuntos restantes de atributos são as únicas superchaves possíveis neste exemplo:
* {Nome do Monarca, Número do Monarca} (Chave Candidata)
* {Nome do Monarca, Número do Monarca, Casa Real}
Na realidade, as superchaves não podem ser determinadas simplesmente examinando um conjunto de tuplas em uma relação. Uma superchave é uma propriedade de uma variável de relação que deve valer para todos os valores possíveis e só pode ser determinada a partir das dependências funcionais que se aplicam a essa variável de relação.
Se uma relação contém n atributos, então o número máximo de superchaves possível é 2$^n$.
Uma relação de grau n tem 2$^n$ superchaves sempre que ∅ é uma chave candidata para essa relação. Por exemplo:
Presidente :
| Nome | Cargo Presumido |
| Donald Trump | 2017-01-20 |
Onde ∅ → {Nome, Cargo Presumido} - significando que apenas uma pessoa pode ser presidente. Existem quatro superchaves em Presidente:
* {Nome}
* {Cargo Presumido}
* {Nome, Cargo Presumido}