Em bancos de dados relacionais, as tabelas frequentemente possuem relacionamentos entre si.
Para garantir que esses relacionamentos permaneçam corretos, utilizamos o conceito de Integridade Referencial.
Integridade referencial é um conjunto de regras que impede a existência de registros relacionados de forma incorreta.
Essas regras são aplicadas através das chaves estrangeiras (Foreign Keys).
| Cliente | ID Cliente |
|---|---|
| Maria | 1 |
| Carlos | 2 |
| ID Pedido | ID Cliente |
|---|---|
| 1001 | 1 |
| 1002 | 2 |
Um registro órfão ocorre quando um registro referencia outro que não existe mais.
Um pedido aponta para um cliente que foi excluído da tabela Cliente.
Considere a tabela Cliente contendo apenas os IDs 1 e 2.
INSERT INTO pedido
VALUES (1003, 10);
O valor 10 não existe na tabela Cliente.
O MySQL rejeitará a operação.
CREATE TABLE cliente (
id_cliente INT PRIMARY KEY,
nome VARCHAR(100)
);
CREATE TABLE pedido (
id_pedido INT PRIMARY KEY,
id_cliente INT,
FOREIGN KEY (id_cliente)
REFERENCES cliente(id_cliente)
);
O banco verifica automaticamente se o cliente informado existe.
Quando um registro pai possui registros filhos relacionados, o banco pode agir de diferentes formas.
| Ação | Descrição |
|---|---|
| RESTRICT | Impede a exclusão. |
| CASCADE | Exclui os registros relacionados. |
| SET NULL | Define o valor como NULL. |
| NO ACTION | Mantém o comportamento padrão. |
CREATE TABLE pedido (
id_pedido INT PRIMARY KEY,
id_cliente INT,
FOREIGN KEY (id_cliente)
REFERENCES cliente(id_cliente)
ON DELETE CASCADE
);
Ao excluir um cliente, todos os pedidos relacionados também serão removidos.
FOREIGN KEY (id_cliente)
REFERENCES cliente(id_cliente)
ON DELETE SET NULL
Quando o cliente for removido, o campo ficará com valor NULL.
| Sistema | Relacionamento |
|---|---|
| Loja Virtual | Cliente → Pedido |
| Escola | Aluno → Matrícula |
| Hospital | Médico → Consulta |
| Biblioteca | Usuário → Empréstimo |