Black November

ATÉ 50% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

1
resposta

Como fazer constraint no banco para o nome?

No código, nós podemos fazer a validação do nome para não aceitar números, alguns sinais, número mínimo de letra, etc. Mas se alguém tentar fazer um POST sem ser pelo nosso código ele vai conseguir burlar essa validação do nome, né? Tem alguma contraint para essa validação? Se sim poderia reutilizar o código feito no nível do "app" e colocar nessa constraint em vez de criar do zero? E essa constaint vai valer para todos os bancos ou só para o SQLite?

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta

Olá, Luidi! Como vai?

Você levantou uma questão muito importante sobre a integridade dos dados no banco. No Sequelize, além das validações no nível da aplicação, você pode definir constraints diretamente no banco de dados para garantir que as regras sejam aplicadas independentemente de como os dados são inseridos.

Para garantir que um campo "nome" não contenha números ou certos caracteres, você pode usar constraints de verificação (CHECK constraints) no banco de dados. No entanto, é importante notar que o suporte a CHECK constraints pode variar entre diferentes sistemas de gerenciamento de banco de dados. Por exemplo, o SQLite suporta constraints de verificação, mas a implementação pode ser diferente em outros bancos como PostgreSQL, MySQL, etc.

Aqui está um exemplo de como você poderia definir uma constraint no Sequelize para um campo "nome":

const User = sequelize.define('User', {
  name: {
    type: Sequelize.STRING,
    allowNull: false,
    validate: {
      is: /^[a-zA-Z\s]*$/i  // Regex para permitir apenas letras e espaços
    }
  }
}, {
  // Opções adicionais
  hooks: {
    beforeValidate: (user, options) => {
      // Aqui você pode reutilizar a lógica de validação do app
    }
  }
});

No entanto, para aplicar uma constraint diretamente no banco, você pode precisar usar uma query SQL específica para o seu banco de dados após a criação da tabela, como:

ALTER TABLE Users ADD CONSTRAINT check_name CHECK (name REGEXP '^[a-zA-Z\s]*$');

Infelizmente, não há uma maneira direta de reutilizar o código de validação do aplicativo nas constraints do banco de dados, já que eles operam em níveis diferentes (aplicação vs. banco de dados). Você pode, no entanto, garantir que as regras sejam consistentes entre ambos os níveis, mantendo as expressões regulares ou lógicas de validação sincronizadas.

Espero ter ajudado e bons estudos!

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