Chave Primária
Objetivos
- Compreender o conceito de chave primária.
- Identificar atributos que podem servir como chave primária.
- Entender os requisitos e exemplos de chaves primárias.
O que é uma Chave Primária?
A chave primária é um atributo (ou conjunto de atributos) que identifica exclusivamente cada registro em uma tabela. Ela garante que não haja duplicatas e permite referenciar registros de forma única.
Em termos simples: imagine uma tabela de alunos. A matrícula de cada aluno é única — nenhum outro aluno tem a mesma matrícula. Isso faz da matrícula uma chave primária perfeita.
A Tabela Pessoas
Considere a tabela PESSOAS:
| ID | Nome | |
|---|---|---|
| 1 | Aragorn II Elessar | aragorn.rei@gondor.com |
| 2 | Arwen Undómiel | arwen.estrela@rivendell.com |
Aqui, o atributo ID é a chave primária, pois cada valor é único e identifica um aluno específico.
Ao tentar inserir o ID com valor repetido, o banco rejeita o comando, pois o valor já existe na tabela.
INSERT INTO PESSOAS (ID, NOME, DATA_NASCIMENTO, ID_SEXO, EMAIL) VALUES
(1, 'Balrock', '2021-03-01', 1, 'ballrock.rei@gondor.com');
--ERROR: duplicate key value violates unique constraint "pessoas_pkey"
--Key (id)=(1) already exists.
--SQL state: 23505
--Detail: Key (id)=(1) already exists.
Requisitos de uma Chave Primária
Para ser uma chave primária válida, o atributo deve atender a estes critérios:
- Não pode ser nulo: Todo registro deve ter um valor para a chave primária.
- Deve ser único: Não pode haver dois registros com o mesmo valor.
- Imutável: O valor não deve mudar ao longo do tempo (idealmente).
- É um índice: A chave vai estar associada a uma estrutura de indexação. As chaves primárias são automaticamente indexadas pelo SGBD para otimizar consultas.
Chave candidata
Na tabela PESSOAS, o CPF pode servir como chave primária, pois cada pessoa tem um CPF único, podemos chamar essa chave candidata.
| CPF | Nome | |
|---|---|---|
| 123.456.789-00 | Ana Costa | anacasota@gmail.com |
| 987.654.321-00 | Pedro Lima | pedrolima@gmail.com |
Se não houver um atributo único natural, podemos usar uma combinação (chave composta) ou um ID artificial gerado automaticamente.
Chave primária autonumerada
CREATE TABLE IF NOT EXISTS DEPARTAMENTOS (
ID SERIAL PRIMARY KEY,
NOME VARCHAR(100) NOT NULL,
DESCRICAO VARCHAR(200) NOT NULL
);
Inserindo um novo registro com chaves autonumerada.
INSERT INTO DEPARTAMENTOS (NOME, DESCRICAO) VALUES
('RH', 'Recursos Humanos'),
('TI', 'Tecnologia da Informação'),
('Vendas', 'Departamento de Vendas');
Chave primária composta
CREATE TABLE ATENDENTES (
ID_PESSOA BIGINT,
ID_DEPARTAMENTO INT,
SALARIO NUMERIC(10, 2),
CONSTRAINT PK_ATENDENTE PRIMARY KEY (ID_PESSOA, ID_DEPARTAMENTO),
CONSTRAINT FK_PESSOA_ATENDENTE FOREIGN KEY (ID_PESSOA) REFERENCES PESSOAS (ID),
CONSTRAINT FK_DEPARTAMENTO_ATENDENTE FOREIGN KEY (ID_DEPARTAMENTO) REFERENCES DEPARTAMENTOS (ID),
CONSTRAINT CK_SALARIO_ATENDENTE CHECK (SALARIO BETWEEN 2000 AND 40000)
);
INSERT INTO ATENDENTES (ID_PESSOA,ID_DEPARTAMENTO, SALARIO) VALUES
(6, 1, 15000.00), -- Legolas Greenleaf (ID_PESSOA 6) no RH (ID_DEPARTAMENTO 1)
(7, 2, 35500.00), -- Éowyn de Rohan (ID_PESSOA) no TI (ID_DEPARTAMENTO 2)
(8, 3, 8200.50); -- Gimli, Filho de Glóin (ID_PESSOA 8) no Vendas (ID_DEPARTAMENTO 3)