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.”
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.
Cada elemento de uma entidade se relaciona com no máximo um elemento da outra entidade.
Exemplo: Relacionamento entre PESSOA e CPF
┌─────────┐ ┌─────┐
│ 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)
);
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
┌─────────┐ ┌────────────┐
│ 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)
);
Elementos de ambas as entidades podem se relacionar com múltiplos elementos da outra.
Exemplo: Produtos e Notas Fiscais
┌──────────┐ ┌──────────────┐
│ 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)
);
Além da cardinalidade, devemos considerar a participação:
Notação: Min-Max
Garante que os relacionamentos entre tabelas sejam válidos:
-- 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
Restrições são essenciais para manter a qualidade e confiabilidade dos dados em sistemas de banco de dados.