10.5.6 - Mantendo a Ordem na Casa - Constraints
Fala, guardião(ã) da ordem! Já manja tudo de criar tabelas, definir colunas, chaves e até manipular dados com SQL (CRUD + JOIN), né? Mas me diz: como a gente garante que os dados que entram no nosso banco Supabase sejam certinhos, sem erros e bagunça?
Imagina seu quarto: se não tiver umas regras (tipo, lugar certo pra cada coisa, não deixar roupa suja no chão), rapidinho vira zona, né? 😅
No banco, essas regras se chamam Constraints — tipo os “guardas de trânsito” do banco, que garantem que só dados válidos e organizados entrem nas tabelas.
Vamos conhecer as principais constraints que vão deixar nosso QG tinindo de organizado!
A Missão: Impor Regras e Garantir a Qualidade
Constraints são regras que definimos quando criamos a tabela (CREATE TABLE) ou podemos acrescentar depois (ALTER TABLE). Elas ficam nas colunas ou na tabela toda.
Por que usar Constraints?
Integridade: Dados sempre corretos e confiáveis.
Evitar Erros: Bloqueiam dados inválidos (ex: email repetido, campo vazio).
Consistência: Mantêm as ligações entre tabelas funcionando.
Regras de Negócio: Seu banco ajuda a aplicar as regras do seu projeto.
1. NOT NULL: Campo Obrigatório! 🚫🕳️
NOT NULL: Campo Obrigatório! 🚫🕳️Simples, mas poderosa. NOT NULL significa que essa coluna nunca pode ficar vazia. Sempre que inserir (INSERT) ou atualizar (UPDATE), tem que ter valor nessa coluna.
Exemplo: Na tabela usuarios, faz sentido que nome e email sejam obrigatórios, né? Sem nome ou email, nem cadastra!
CREATE TABLE usuarios (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
nome TEXT NOT NULL, -- nome obrigatório
email TEXT UNIQUE NOT NULL, -- email único e obrigatório
data_nascimento DATE,
cidade TEXT
);Tentar inserir um usuário sem nome:
Vai dar erro! ❌
2. UNIQUE: Nada de Repetecos! ☝️👯♀️🚫
UNIQUE: Nada de Repetecos! ☝️👯♀️🚫UNIQUE garante que os valores numa coluna (ou conjunto de colunas) sejam sempre diferentes. Nada de duplicar!
Exemplo: O email tem que ser único na tabela usuarios.
Se tentar inserir um email que já existe:
Vai dar erro! ❌
Dica:
UNIQUEpermite valoresNULL, mas é melhor combinar comNOT NULLse o campo for obrigatório e único.
3. DEFAULT: Valor Padrão, na Faixa! 🤷♂️➡️🎁
DEFAULT: Valor Padrão, na Faixa! 🤷♂️➡️🎁DEFAULT define um valor padrão para a coluna, usado quando não especificamos nada ao inserir.
Exemplo: Na tabela posts, que tal numero_likes começar com zero? Ou o status do usuário ser 'ativo' por padrão?
Inserir um post sem likes nem data:
O banco preenche numero_likes com 0 e data_publicacao com o horário atual automaticamente.
4. PRIMARY KEY (PK): O RG Único 🔑🆔
PRIMARY KEY (PK): O RG Único 🔑🆔Já vimos, mas reforçando: PRIMARY KEY é especial. Junta NOT NULL + UNIQUE, garantindo que a coluna (ou conjunto) identifica única e obrigatoriamente cada linha.
Também pode ser composta por várias colunas:
Cada tabela tem uma única chave primária.
5. FOREIGN KEY (FK): O Elo Secreto 🔗⛓️
FOREIGN KEY (FK): O Elo Secreto 🔗⛓️Também já falamos: FK cria link entre tabelas, garantindo que o valor da FK exista na PK da tabela referenciada.
Ou:
Novidade: Ações da FK — ON DELETE e ON UPDATE
ON DELETE e ON UPDATELembra do problema de apagar um usuário que tem posts? Essas ações definem o que acontece:
ON DELETE {ação}: o que fazer na tabela filha se apagar a linha na tabela pai.ON UPDATE {ação}: o que fazer na tabela filha se atualizar a PK da tabela pai (raro).
Ações possíveis:
NO ACTIONouRESTRICT: Impede apagar ou atualizar na tabela pai se tiver filhos. (Mais seguro)CASCADE: Apaga/atualiza na tabela filha automaticamente. (Cuidado!)SET NULL: Define FK comoNULLse pai for apagado. FK precisa aceitarNULL.SET DEFAULT: Define FK com valor padrão.
Exemplo perigoso, mas prático:
Exemplo seguro:
E no Supabase?
No editor de tabelas, ao criar ou editar FK, você escolhe as ações ON DELETE e ON UPDATE.
Ufa! Constraints são as guardiãs da ordem do banco de dados, mantendo tudo limpo, seguro e funcionando certinho.
Atualizado

