3
respostas

Como fazer a constraint do CPF para o banco?

Na aplicação, em nível de código pode-se usar a biblioteca "CPF/CNPJ validation" né? Mas como faz para aplicar isso no nível do banco? No caso o banco é "SQLite"

Pedi pro ChatGPT e não sei se é assim ou ele deu uma viajada. Não consegui colar aqui, pois ultrapassa o limite de caracteres. Tem algum jeito de colar aq ou fazer de outro jeito para alguém ver aq?

3 respostas

Olá, Luidi! Como vai?

Para aplicar uma constraint de CPF diretamente no banco de dados SQLite, você pode criar um trigger que verifica se o CPF é válido antes de inserir ou atualizar um registro. No entanto, vale lembrar que o SQLite tem algumas limitações em relação a funções complexas, então a validação completa do CPF pode ser mais desafiadora de implementar diretamente no banco.

Aqui está um exemplo básico de como você poderia configurar um trigger para verificar o formato do CPF (considerando apenas a estrutura numérica e o tamanho):

CREATE TRIGGER validate_cpf
BEFORE INSERT ON sua_tabela
FOR EACH ROW
BEGIN
  SELECT
    CASE
      WHEN LENGTH(NEW.cpf) != 11 OR NEW.cpf NOT GLOB '[0-9]*' THEN
        RAISE(ABORT, 'CPF inválido')
    END;
END;

Este exemplo básico verifica se o CPF possui exatamente 11 dígitos e se todos são numéricos. Para uma validação completa, que verifica os dígitos verificadores do CPF, você pode precisar fazer essa lógica no nível da aplicação, como você mencionou, utilizando uma biblioteca de validação de CPF.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Então não tem como fazer uma validação completa do CPF usando o SQLite por ser muito simples e ter limitações? Como posso testar a contraint sem ser pela aplicação para ver se funciona?

Oi, Luidi!

O SQLite realmente não permite validar um CPF completo (com cálculo dos dígitos verificadores) diretamente, porque ele não possui funções nativas para isso. No SQLite você consegue validar somente formato e tamanho, como no trigger anterior.

Para testar a constraint sem usar a aplicação, execute o trigger diretamente no CLI do SQLite ou em um cliente como DB Browser for SQLite. Basta inserir um valor inválido manualmente e ver se o erro é disparado.

Veja este exemplo de teste direto no SQLite:


INSERT INTO sua_tabela (cpf, nome)
VALUES ('123', 'Teste CPF inválido');

Se o trigger estiver funcionando, o SQLite retorna:


Error: CPF inválido

E para testar um CPF com 11 dígitos numéricos:


INSERT INTO sua_tabela (cpf, nome)
VALUES ('12345678901', 'Teste CPF válido');

Assim você confirma se a constraint está ativa sem precisar rodar sua API.

Fico à disposição.