Regras de Validação – Além de evitar que os usuários insiram valores inexistentes na tabela, as regras de validação dos dados evitam situações como a ilustrada a seguir:


Como você pode ver, na tabela Produtos, na coluna QTDEPRODUTO, temos um valor negativo, que é o do Monitor, que está com -100. Esse é um valor errôneo e que pode causar problemas dependendo da complexidade e das regras de negócios envolvidas em suas tabelas.

Para resolver este (e muitos outros que podem acontecer) problema, devemos utilizar as regras de validação nas colunas a fim de evitar a inclusão de valores inadequados. Neste caso, a regra de validação é não permitir valores negativos nas colunas QTDEPRODUTO e VALORPRODUTO. Para isso, devemos criar a constraint CHECK, da seguinte forma:


Reparem que usei WITH NOCHECK. Isto indica que a constraint que adicionei não será capaz de validar dados antigos, ou seja, se eu der um SELECT * FROM na tabela PRODUTOS, verei que o valor negativo da coluna QTDEPRODUTO continua lá:


Para alterarmos isso podemos fazer um UPDATE simples no banco.


Se quisermos fazer outro UPDATE e tentarmos alterar os valores das colunas QTDEPRODUTO e VALORPRODUTO para valores negativos, como a instrução abaixo nos sugere, ocorrerá o erro a seguir:


Msg 547, Level 16, State 0, Line 1

The UPDATE statement conflicted with the CHECK constraint "CHK_QTDEPRODUTO". The conflict occurred in database "Clientes", table "dbo.PRODUTOS", column 'QTDEPRODUTO'.

The statement has been terminated.

Este erro nos diz que o UPDATE que tentamos fazer entrou em conflito com uma de nossas constraints CHECK que criamos anteriormente (ao conflitar com a primeira constraint ele nem tenta a segunda).

Observação importante: a constraint FOREIGN KEY também permite controlar os valores inseridos nas colunas, porém ela baseia-se em uma lista de valores válidos obtidos a partir de uma tabela. A constraint CHECK, por sua vez, utiliza uma expressão lógica para definir os valores que podem ser adicionados, sem tomar como base os dados de outra coluna ou tabela.

Com todos os procedimentos realizados para evitar a inclusão de valores negativos, os dados estarão íntegros e consistentes.

Valor Padrão – O valor padrão é outra regra que pode ser aplicada às colunas de uma tabela. Quando um valor padrão é estabelecido para uma coluna, o sistema assume que ele deve ser utilizado nas situações em que o usuário deixa de inserir o valor desejado. Como nem sempre é recomendável trabalhar com colunas que aceitem valores nulos, a recomendação é que usemos um valor padrão para a coluna por meio da constraint DEFAULT.

Para compreendermos melhor, voltemos à tabela VENDAS. Vamos definir que o tipo da venda, por padrão, terá o valor Á VISTA (lembrando que esse é um exemplo fictício).

Para inserirmos esta constraint a coluna TIPOVENDA, faça a seguinte instrução:


Lembre-se de colocar o FOR para indicar para qual coluna a constraint será aplicada.

Assim, se não especificarmos o tipo da venda, por default, ela será Á VISTA.

Regras de Constraints – Cada tipo de constraint possui suas próprias regras. Veja na tabela a seguir quais são elas:

Tipos de constraints

Descrição

Constraint Primary Key

(Chave Primária)

Uma coluna que é definida como chave primária não pode aceitar valores nulos. Em cada tabela, pode haver somente uma constraint de chave primária.

Constraint Foreign Key

(Chave Estrangeira)

Várias colunas podem ser definidas como chave estrangeira. No entanto, para que uma coluna seja definida desta forma, é preciso que ela já tenha sido definida como chave primária em outra tabela. As colunas definidas como chave estrangeira podem aceitar valores nulos, e os datatypes das colunas relacionadas devem ser iguais (int com int, por exemplo).

Constraint Unique

(Chave Única)

Várias colunas de uma tabela podem ser definidas como chave única e, ainda, aceitar valores nulos.

Constraint Check

Diversas colunas de uma tabela podem ser definidas como constraint check. Essas colunas podem aceitar valores nulos, mais isso depende das regras que são determinadas para elas.

Constraint Default

Várias colunas de uma tabela podem ser definidas como constraint default. Essas colunas podem aceitar valores nulos.

 

E aqui finalizamos nosso artigo. Estou disponibilizando a quem se interessar o script das 3 partes dos artigos, com os assuntos abordados. O script está comentado para melhor entendimento. Quem quiser baixar, só clicar aqui.

Quaisquer dúvidas postem nos comentários ou sintam-se à vontade para mandar emails para wellingtonbalbo@gmail.com.

Abraços.

Até o próximo artigo!