Restrições de integriadade referencial
Objetivos
- Compreender os tipos de restrições em bancos de dados.
- Explorar cardinalidade: 1:1, 1:N, N:N.
- Entender dependência de existência.
- Aprender sobre integridade referencial.
O que são Restrições?
Restrições são regras que definem as condições que os dados devem satisfazer para manter a consistência e integridade do banco de dados.
Definição: “O esquema E-R de uma empresa pode definir certas restrições, as quais o conteúdo do banco de dados deve respeitar.”
Tipos Principais de Restrições
- Cardinalidade: Define quantas ocorrências de uma entidade podem se relacionar com outra
- Dependência de Existência: Regras sobre existência obrigatória de entidades relacionadas
- Integridade Referencial: Garante que relacionamentos entre tabelas sejam válidos
Cardinalidade
A cardinalidade especifica o número de ocorrências de uma entidade que pode estar associado a ocorrências de outra entidade em um relacionamento.
Tipos de Cardinalidade
1:1 (Um para Um)
Cada elemento de uma entidade se relaciona com no máximo um elemento da outra entidade.
Exemplo: Relacionamento entre PESSOA e CPF
- Uma pessoa tem no máximo um CPF
- Um CPF pertence a no máximo uma pessoa
┌─────────┐ ┌─────┐
│ PESSOA │ ──○ │ CPF │
└─────────┘ └─────┘
1 1
Implementação:
-- Tabela PESSOA
CREATE TABLE pessoa (
id_pessoa INT PRIMARY KEY,
nome VARCHAR(100),
id_cpf INT UNIQUE -- FK opcional
);
-- Tabela CPF
CREATE TABLE cpf (
id_cpf INT PRIMARY KEY,
numero VARCHAR(14) UNIQUE,
id_pessoa INT, -- FK opcional
FOREIGN KEY (id_pessoa) REFERENCES pessoa(id_pessoa)
);
1:N (Um para Muitos)
Um elemento da entidade A se relaciona com múltiplos elementos da entidade B, mas cada elemento de B se relaciona com apenas um de A.
Exemplo: Cliente e Empréstimos
- Um cliente pode ter vários empréstimos
- Cada empréstimo pertence a apenas um cliente
┌─────────┐ ┌────────────┐
│ CLIENTE │ ──○ │ EMPRÉSTIMO │
└─────────┘ └────────────┘
1 N
Implementação:
-- Tabela CLIENTE
CREATE TABLE cliente (
id_cliente INT PRIMARY KEY,
nome VARCHAR(100)
);
-- Tabela EMPRESTIMO
CREATE TABLE emprestimo (
id_emprestimo INT PRIMARY KEY,
valor DECIMAL(10,2),
id_cliente INT NOT NULL,
FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente)
);
N:N (Muitos para Muitos)
Elementos de ambas as entidades podem se relacionar com múltiplos elementos da outra.
Exemplo: Produtos e Notas Fiscais
- Um produto pode aparecer em várias notas fiscais
- Uma nota fiscal pode conter vários produtos
┌──────────┐ ┌──────────────┐
│ PRODUTO │ ──○ │ NOTA_FISCAL │
└──────────┘ └──────────────┘
N N
Implementação: Requer tabela associativa
-- Tabela PRODUTO
CREATE TABLE produto (
id_produto INT PRIMARY KEY,
nome VARCHAR(100),
preco DECIMAL(10,2)
);
-- Tabela NOTA_FISCAL
CREATE TABLE nota_fiscal (
id_nota INT PRIMARY KEY,
data_emissao DATE,
total DECIMAL(10,2)
);
-- Tabela associativa PRODUTO_NOTA
CREATE TABLE produto_nota (
id_produto INT,
id_nota INT,
quantidade INT,
valor_unitario DECIMAL(10,2),
PRIMARY KEY (id_produto, id_nota),
FOREIGN KEY (id_produto) REFERENCES produto(id_produto),
FOREIGN KEY (id_nota) REFERENCES nota_fiscal(id_nota)
);
Participação em Relacionamentos
Além da cardinalidade, devemos considerar a participação:
- Participação Total: Toda instância deve participar do relacionamento (linha obrigatória)
- Participação Parcial: Participação é opcional (pode ser nula)
Notação: Min-Max
- 1:1 (obrigatório dos dois lados)
- 0:1 (opcional de um lado, obrigatório do outro)
- 0:N (opcional de um lado, múltiplo do outro)
Integridade Referencial
Garante que os relacionamentos entre tabelas sejam válidos:
- Chaves Estrangeiras: Referenciam chaves primárias de outras tabelas
- Regras de Exclusão: O que fazer quando uma entidade referenciada é excluída
- Regras de Atualização: Como propagar mudanças nas chaves
Exemplo de Integridade
-- Restrição de integridade referencial
ALTER TABLE emprestimo
ADD CONSTRAINT fk_emprestimo_cliente
FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente)
ON DELETE CASCADE -- Exclui empréstimos se cliente for excluído
ON UPDATE CASCADE; -- Atualiza id_cliente se chave primária mudar
Benefícios das Restrições
- Consistência: Dados sempre válidos e consistentes
- Integridade: Relacionamentos preservados
- Segurança: Prevenção de dados inválidos
- Manutenção: Regras automáticas de validação
Restrições são essenciais para manter a qualidade e confiabilidade dos dados em sistemas de banco de dados.