Los dominios nos ayudan a evitar que entre basura en una Base de Datos. Como seguramente ya sabes, se le llama basura a los datos que están pero que no deberían estar.

Usando dominios podemos determinar claramente cuales datos son permitidos dentro de una columna.

Como mucha gente aún no los conoce, o no los conoce bien, a continuación hay unos cuantos ejemplos con sus respectivas explicaciones. Al autor de este blog le gusta que todos los nombres de dominios empiecen con D_ para que sea muy fácil saber que se trata de un dominio pero no es obligación que sea así, es cuestión de gustos.

Ejemplo 1. Valores booleanos

Para las columnas que solamente admiten dos posibilidades: verdadero o falso, podríamos tener un dominio como el siguiente:


CREATE DOMAIN D_BOOLEAN AS
CHAR(1)
CHECK (VALUE = 'F' OR VALUE = 'V');

El dominio D_BOOLEAN solamente admitirá una letra ‘F’ mayúscula o una letra ‘V’ mayúscula, cualquier otro carácter que se quiera introducir será rechazado. Podríamos usarlo para saber si un cheque fue impreso o no, si una Factura está anulada o no, etc.

Ejemplo 2. Cantidades mayores o iguales que cero

Para las columnas donde se guarda la cantidad actual en existencia de un producto (o artículo) podríamos tener un dominio como el siguiente:


CREATE DOMAIN D_CANTIDAD1 AS
INTEGER
CHECK (VALUE >= 0);

El dominio D_CANTIDAD1 solamente admitirá números enteros (o sea, sin decimales) y que sean iguales o mayores que cero y menores o iguales que 2.147.483.647, ¿porqué ese valor? porque el tipo de datos INTEGER admite números desde -2.147.483.648 hasta 2.147.483.647

Ejemplo 3. Cantidades mayores que cero

Para la columna donde se guarda la cantidad comprada o vendida de un producto (o artículo) se podría tener un dominio como el siguiente:


CREATE DOMAIN D_CANTIDAD2 AS
INTEGER
CHECK (VALUE > 0);

El dominio D_CANTIDAD2 solamente admitirá números que sean enteros (o sea, sin decimales) y mayores que cero y menores o iguales que 2.147.483.647

Si se compra o se vende algo, la cantidad siempre es mayor que cero, y el dominio D_CANTIDAD2 justamente nos ayuda con esa restricción.

Ejemplo 4. Sexo de una persona

Para la columna donde se guarda el sexo de una persona (femenino o masculino) podríamos tener un dominio así:

CREATE DOMAIN D_SEXO AS
CHAR(1)
CHECK (VALUE = 'F' OR VALUE = 'M');

El dominio D_SEXO solamente permitirá que en una columna se ingrese una ‘F’ mayúscula o una ‘M’ mayúscula.

Ejemplo 5. Estado civil de una persona

Para las columnas donde se guarda el estado civil podríamos tener un dominio como este:


CREATE DOMAIN D_ESTADO_CIVIL AS
CHAR(1)
CHECK (VALUE IN ('S', 'C', 'E', 'D', 'V'));

El dominio D_ESTADO_CIVIL admitirá una sola letra mayúscula, la cual puede ser ‘S’ (soltero), ‘C’ (casado), ‘E’ (separado), ‘D’ (divorciado), o ‘V’ (viudo).

Ejemplo 6. Fechas del año 2013 o posteriores

Para aceptar solamente fechas correspondientes al año 2013 o posteriores, podríamos tener un dominio así:


CREATE DOMAIN D_FECHA2013 AS
DATE
CHECK (VALUE >= '01.01.2013');

De esta manera, ninguna fecha anterior será permitida en las columnas que tengan este dominio.

Ejemplo 7. Fotografías o imágenes

Para que en una columna podamos guardar archivos de cualquier tamaño (por ejemplo fotografías, pero también podrían ser archivos, planillas Excel, documentos Word, etc.) podríamos definir este dominio:


CREATE DOMAIN D_FOTOGRAFIA AS
BLOB SUB_TYPE 1;

Ejemplo 8. Nombres de hasta 20 caracteres

Para los textos que tendrán un máximo de 20 caracteres (nombres, apellidos, etc.) podríamos definir un dominio:


CREATE DOMAIN D_NOMBRE20 AS
VARCHAR(20);

El dominio D_NOMBRE20 admite un máximo de 20 caracteres, esos caracteres pueden ser cualesquiera pero no pueden ser más que 20.

Ejemplo 9. Nombres de hasta 60 caracteres

Para los textos que tendrán un máximo de 60 caracteres (direcciones, nombres de productos, etc.) podríamos definir un dominio:

CREATE DOMAIN D_NOMBRE60 AS
VARCHAR(60);

El dominio D_NOMBRE60 admite un máximo de 60 caracteres, esos caracteres pueden ser cualesquiera pero no pueden ser más que 60.

Ejemplo 10. Precios de productos o servicios

Para las columnas donde se guardará el precio de compra o de venta de un producto o de un servicio, podríamos tener un dominio como este:


CREATE DOMAIN D_PRECIO AS
NUMERIC(18, 4)
CHECK (VALUE > 0);

El dominio D_PRECIO admite decimales pero todos sus valores deben ser sí o sí mayores que cero.

Conclusión:

Los dominios son una de las herramientas con las cuales contamos en Firebird para disminuir la probabilidad de que entre basura en nuestras bases de datos. Es muy conveniente utilizarlos y aquí hemos visto varios ejemplos para que se pueda entender bien como crearlos y la utilidad que tienen.

Artículos relacionados:

Entendiendo a los dominios

Un stored procedure para obtener el contenido de los dominios

¿Cómo Firebird trata a los cambios de dominio?

La forma más fácil de cambiar un dominio

El índice del blog Firebird21

El foro del blog Firebird21