Chave primária
# Chave primária

Chaves primárias (em inglês, Primary keys ou "PK"), sob o ponto de vista de um banco de dados relacional, referem-se aos conjuntos de um ou mais campos, cujos valores, considerando a combinação de valores em caso de mais de uma chave primária, nunca se repetem na mesma tabela e, desta forma, podem ser usadas como um índice de referência para criar relacionamentos com as demais tabela do banco de dados (daí vem o nome banco de dados relacional). Portanto, uma chave primária nunca pode ter valor nulo, nem repetição.
Simplificando, quando a chave primária é simples, ou seja, é formada por um único campo da tabela, esse campo não pode ter dois ou mais registros de mesmo valor e também não pode conter nenhum registro nulo. Se a chave primária é composta, ou seja, formada por mais de um campo, os valores de cada campo podem se repetir, mas nunca a combinação desses valores. Exemplo: a tabela 'Livros_Autores' tem como chave primária (cod_livro, cod_autor). Podem existir nessa tabela os registros:
* (5, 9);
* (5, 10);
* (4, 9);
* (9, 5).
mas não podem existir dois registros (5, 9).
Ao criarmos uma chave primária, criamos automaticamente um índice do tipo aglomerado (CLUSTERED). Este é o tipo criado por padrão, mas caso já exista um índice desse tipo em sua tabela, então é necessário ser criado um índice do tipo não-aglomerado (NONCLUSTERED).
Podemos inserir uma chave primária durante ou após a criação da tabela. Com a tabela já criada, o campo que escolhermos para ser a chave primária deve ter a opção NOT NULL adicionada. Para inserirmos durante a criação usamos a seguinte sintaxe:
Nessa estrutura, escolhemos um índice do tipo CLUSTERED e resolvemos nomear com algum nome desejado a constraint de primary key. O índice poderia ser do tipo Nonclustered e poderíamos deixar o próprio SQL Server nomear a constraint, da seguinte forma:
Além disso, pode-se definir a chave primária após a declaração dos campos, como segue:
Na definição de chave primária, usamos o comando ALTER TABLE para inserirmos e excluirmos uma primary key. As sintaxes respectivamente são:
Uma "chave candidata" consiste em um atributo ou grupo de atributos cujo valor identifica unicamente cada tupla em uma relação e para o qual nenhum dos atributos pode ser removido sem destruir a identificação única.