Olá galera o/

Finalizando nossa série de postagens sobre as restrições de domínio vulgo constraints, hoje abordaremos sobre a constraint CHECK.

Let’s go para nosso sexto e último episódio Guys!!!

O que é a Constraint CHECK?

Restrição utilizada para limitar que determinados valores sejam inseridos em uma coluna na tabela que possui uma lógica de negócio aplicada.

Obs.1: Ao definir o CHECK na coluna, a mesma permitirá apenas inserir valores que atendam a lógica da checagem.

Obs.2: Esta constraint seria semelhante a uma validação dos dados quando imputados as informações em um formulário na aplicação front-end. Exemplo: ao selecionar os estados do Brasil, somente aqueles valores na listagem podem ser inseridos na coluna nome da cidade.

Boa prática!

Cuidado ao definir a constraint check, ela pode inviabilizar algumas operações na tabela.

Para facilitar o entendimento, unificaremos a nomenclatura tudo que for referente a atributo, coluna ou campo, utilizaremos a palavra coluna (Column).

Praticando a criação da constraint Check!

A partir de agora, começaremos a praticar a criação da constraint Default.

1 – Criando tabela com Check – Definição no create table

1.1 – Criaremos uma tabela chamada TB_CHECK com 4 colunas. Percebam que, aplicamos a constraint nas colunas LETRA e VALOR, ou seja, no momento que estivermos inserindo registros na tabela, acontecerá uma validação dos dados inseridos e se os mesmos atendem as condições de checagem. Para a coluna LETRA se o valor inserido é A, B ou C e para VALOR qualquer valor maior que 0.

Sintaxe da atribuição do CHECK:

Sem nome da constraint:
– coluna TIPO CHECK (coluna + condição)

Com nome da constraint:
– coluna TIPO CONSTRAINT nome_constraint CHECK (coluna + condição)

CREATE TABLE TB_CHECK
(
ID SMALLINT PRIMARY KEY IDENTITY,
NOME VARCHAR(10),
LETRA CHAR(1) CHECK (LETRA IN ('A', 'B', 'C')),
VALOR SMALLMONEY CONSTRAINT CHK_VALOR CHECK (VALOR > 0)
)

1.2 – Iremos inserir 3 registros nas tabelas TB_CHECK. Todos os registros atendem as condições do check, ou seja, as letras são A, B ou C e os valores maiores que zero.

INSERT INTO TB_CHECK (NOME, LETRA, VALOR)
VALUES 
	('TESTE 1','A', 10),
	('TESTE 2','B', 20),
	('TESTE 3','C', 30)


SELECT *
FROM TB_CHECK

1.3 – Testaremos a primeira condição de checagem que foi atribuída a coluna LETRA. Atribuiremos o valor D para a coluna LETRA, ou seja, de acordo com nossa condição de checagem, qualquer valor diferente de A, B ou C não deve ser inserido na coluna. Ao tentarmos inserir um registro é exibida uma mensagem informando que houve um conflito da constraint check.

INSERT INTO TB_CHECK (NOME, LETRA, VALOR)
VALUES ('TESTE 4','D', 10)

1.4 – Testaremos a segunda condição de checagem que foi atribuída a coluna VALOR. Atribuiremos o valor 0 (zero) para a coluna VALOR, ou seja, de acordo com nossa condição de checagem, qualquer valor menor ou igual a 0 não deve ser inserido na coluna. Ao tentarmos inserir um registro é exibida uma mensagem informando que houve um conflito da constraint check.

INSERT INTO TB_CHECK (NOME, LETRA, VALOR)
VALUES ('TESTE 5','B', 0)

1.5 – Consultaremos a tabela para analisar se houve inclusão de novos registros e garantir que as checagens funcionaram.

SELECT *
FROM TB_CHECK

2 – Adicionando Check depois de uma tabela já criada.

2.1 – Adicionaremos uma constraint em uma tabela já existente. Faremos da seguinte maneira:

1º – Adicionaremos uma nova coluna chamada NUMERO1 com o tipo DECIMAL (10,2). Utilizamos o comando alter table para realizar a inclusão da nova coluna.

2º – Aplicaremos a constraint na nova coluna inserida. Realizaremos o alter table na tabela TB_CHECK adicionando a constraint chamada CHK_NUMERO na coluna NUMERO1, com a seguinte condição: o valor inserido deve ser maior ou igual a 5.5. Em resumo, toda vez que realizarmos um INSERT e passarmos o valor abaixo de 5.5 na coluna NUMERO1, o registro não será inserido. Utilizamos o comando que possui o nome da constraint personalizado.

ALTER TABLE TB_CHECK
ADD NUMERO1 DECIMAL(10,2)
-- COM O NOME DA CONSTRAINT DEFINIDO
ALTER TABLE TB_CHECK
ADD CONSTRAINT CHK_NUMERO CHECK (NUMERO1 >= 5.5)

-- OU

-- SEM O NOME DA CONSTRAINT DEFINIDO
ALTER TABLE TB_CHECK
ADD CHECK (NUMERO1 >= 5.5)

2.2 – Para apagarmos a constraint CHECK de uma tabela, é necessário realizar o alter table na tabela TB_CHECK colocando a sintaxe DROP Constraint e o nome da constraint. Lembrando que, caso você tenha definido o nome da constraint, informe o nome da mesma, porém, em casos que o próprio SGBD cria o nome da constraint, informe o mesmo no comando de drop constraint.

ALTER TABLE  TB_CHECK
DROP CONSTRAINT  CHK_NUMERO

3 – Considerações Finais

No episódio 06 aprendemos um pouco sobre a constraint CHECK, como criar uma tabela com a mesma, como adicionar em uma tabela já existente.

Este é o sexto e último posts sobre as constraints, fiquem atentos nas próximas séries do Consulta BD.

Espero que tenham gostado pessoal, boa leitura e bons estudos!

Quem quiser mandar comentários, sugestões, críticas ou dicas complementares, fiquem a vontade, pois feedbacks positivos ou negativos engradecem meu conhecimento para poder melhorar as postagens para vocês.

Até a próxima o/

Acessem nossas Redes Sociais: