Banco de Dados

12 mar, 2013

Implementando campos booleanos

Publicidade

Ninguém discute que a definição do modelo de um banco de dados é de importância vital para a boa operação desta base. Mas muitas vezes, o SGBD que usamos não oferece todos os recursos que necessitamos para implementação física deste modelo.

Recentemente, eu me deparei com uma situação destas quando tratava de um problema trivial: a criação de um campo com tipo de dados booleano.

Alguns SGBDs não dão suporte à criação de colunas deste tipo. É até estranho, visto que o tipo de dados BOOLEAN faz parte do padrão ANSI SQL 99. Vejamos como alguns SGBDs tratam a questão:

  1. SQL SERVER suporta a colunas com tipo de dados BIT, que aceita os valores 0, 1 e NULL;
  2. POSTGRES suporta o tipo de dados BOOLEAN, que recebe valores TRUE, FALSE, NULL (além de algumas variações);
  3. ORACLE e DB2 suportam o tipo BOOLEAN apenas para variáveis de código, mas não para colunas de  tabelas.

Naturalmente, podemos usar alguns recursos para implementar indiretamente algo parecido com o tipo de dados BOOLEAN. A solução que eu implementei no DB2 usa o recurso CHECK: criei um campo com o tipo SMALLINT e adicionei uma restrição (CONSTRAINT) que verificava se os valores inseridos neste campo eram exclusivamente 0 (falso) ou 1(verdadeiro).

A sintaxe é bastante simples:

create table meuteste (
ID        	        integer, 
EXISTE	        smallint , 
constraint  CHECKEXIST check (EXISTE in ( 0, 1))
);

Evidentemente, a inclusão de uma restrição deste tipo tem um certo impacto na performance de operações de inserção, atualização ou carga de dados. Porém devemos ter em mente que qualidade dos dados também é um fator importante. Sendo assim, caso seu o SGBD não suporte campos com tipo de dados booleano, a decisão de se usar ou não uma solução como esta deve ser tomada considerando o que é mais importante para o sistema em questão.

Para mais informações sobre os tipos de dados: