Criar e usar domínios (domain's)

No InterBase e FireBird domínios são como tipos de dados. Tais domínios têm grande semelhança com o conceito de domínio aplicado à matemática, ou seja, um domínio define um conjunto de valores válidos para uma dada situação.

Podemos criar qualquer banco de dados sem fazer uso explícito de domínios. No entanto usar domínios explicitamente pode deixar o banco de dados mais organizado, com regras claras e bem definidas, e ainda conseguir uma economia substancial de mão de obra na construção e manutenção do banco.

Para demonstrar a utilidade dos domínios, vamos criar dois exemplos.

Exemplo 1 - Sem uso explícito de domínios:

CREATE TABLE Cliente( Codigo INTEGER NOT NULL, Nome VARCHAR(40) NOT NULL, Fone VARCHAR(20), Fax VARCHAR(20), Celular VARCHAR(20), Renda NUMERIC(9,2) DEFAULT 0 NOT NULL, CONSTRAINT PK_Cliente PRIMARY KEY(Codigo), CONSTRAINT CHK_Cliente_Codigo CHECK(Codigo > 0), CONSTRAINT CHK_Cliente_Renda CHECK(Renda >= 0));

Exemplo 2 - Com uso explícito de domínios:

CREATE DOMAIN DM_ChavePrimaria INTEGER NOT NULL CHECK(VALUE > 0); CREATE DOMAIN DM_NomePessoa VARCHAR(40) NOT NULL; CREATE DOMAIN DM_Fone VARCHAR(20); CREATE DOMAIN DM_Renda NUMERIC(9,2) DEFAULT 0 NOT NULL CHECK(VALUE >= 0); CREATE TABLE Cliente( Codigo DM_ChavePrimaria, Nome DM_NomePessoa, Fone DM_Fone, Fax DM_Fone, Celular DM_Fone, Renda DM_Renda, CONSTRAINT PK_Cliente PRIMARY KEY(Codigo));

Comentários:

  • O benefício imediato do uso explícito de domínios é a organização do código que define as tabelas.
  • Como um mesmo domínio será usado em várias tabelas (exemplo: DM_NomePessoa), ganharemos muito tempo ao definir outras tabelas que comporão o banco de dados.
  • O domínio DM_Fone é um exemplo que demonstra como um mesmo domínio pode ser usado para colunas diferentes que possuem conteúdos semelhantes.
  • Os domínios DM_ChavePrimaria e DM_Renda mostram aspectos mais interessantes na declaração de domínios, tais como a especificação de um valor padrão (DEFAULT) e regras para validação (CHECK).
  • Se mais tarde resolvermos alterar os nomes de pessoas para 50 caracteres, ou seja, VARCHAR(50), bastará alterar a definição do domínio DM_NomePessoa e todos os campos definidos com este domínio serão automaticamente ajustados. Neste caso bastaria o comando ALTER DOMAIN DM_NomePessoa TYPE VARCHAR(50).
  • Nos bancos de dados que crio, uso domínios explicitamente para todos os campos de todas as tabelas, mesmo onde aparentemente são desnecessários. Mas é bom lembrar que domínios mal definidos podem trazer mais prejuízos do que benefícios. Portanto, antes de sair criando domínios deliberadamente, faça um estudo minucioso do banco de dados a ser construído.

Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br