Diseño de Base de Datos: La importancia de los catálogos

Publicado en

Los catálogos, en una base de datos, son indispensables para un buen diseño de la misma. Es por eso la importancia de conocer las ventajas y desventajas de su uso. Comencemos definiendo “catálogo” en una base de datos. Un catálogo es una tabla de datos que contiene información relevante sobre las opciones finales de un usuario en una aplicación.  A continuación menciono las ventajas y desventajas de los catálogos en el diseño de base de datos:

Ventajas

  • Permite una rápida obtención de los datos requeridos  al momento de realizar una consulta.
  • Permite una reducción de tiempo en programación.
  • Permite al usuario final la posibilidad de realizar una modificación de manera dinámica a las opciones del software, fácil y rápidamente desde una administración.
  • Permite crear una base de datos normalizada.

Desventajas

  • El uso de memoria en el servidor SQL puede verse afectado.
  • La desventaja puede ser solucionada con el uso correcto de las consultas SQL, tal es el caso de evitar productos cartesianos al momento de dicha consulta y en su reemplazo utilizar INNER JOIN, LEFT JOIN, RIGHT JOIN según se requiera.
  • Ciertos desarrolladores necesitan ver un proceso de normalización de una base datos, sin embargo, si comienzas a diseñarla utilizando catálogos, dicho proceso puede llegar a ser innecesario.

Ejemplo 1

“Un sistema requiere que almacene el país de origen de un cliente” pero este dato puede cambiar y/o aumentar en base a las necesidades del usuario final. El desarrollador puede elegir entre varias opciones:

  1. Agregar un campo de tipo cadena de caracteres, permitiéndole al usuario escribir el dato en un campo de texto.
  2. Añadir un campo de tipo entero y colocando un campo de selección obteniendo la información desde el código de manera estática.

Los problemas que se generan cuando se utiliza un campo de tipo cadena de caracteres, radica en la integridad de los datos, pues en esta se pierde completamente. Los errores humanos siempre hay que tenerlos presentes y por tanto, alguien como usuario final puede llegar a escribir el nombre de un país de la manera incorrecta. Además la normalización no está presente en este caso.

Cuando se obtienen los datos de manera estática en el código, se presenta el problema en el tiempo invertido que se requiere en la programación de los elementos, así como el mantenimiento de ciertos módulos.

Enseguida muestro una solución utilizando los catálogos: Se diseña la tabla –Cliente- y la tabla –Pais-,  La tabla Pais almacena los datos que necesitamos con dos simples campos: “idPais y nomPais”, dicha tabla siendo relacionada 1:N  con la tabla clientes, de esta manera es posible obtener la información necesaria del cliente con una simple consulta SQL, además de que el proceso de normalización e integridad de los datos se está dando de manera automática.

Si el usuario final desea que su sistema sea capaz de aumentar los datos de los países, el administrador del catálogo Pais podrá agregarlo fácil y rápidamente. Inclusive, los reportes que se hayan programado no requerirán de inversión de tiempo, puesto que la información que se pida será obtenida mediante una consulta SQL.

En la siguiente figura muestro un diagrama de clases de lo que sería una relación de la tabla cliente con la tabla país (1:N).

Ejemplo 2

“Un sistema requiere que se almacene la especialidad de un médico” este dato se puede aumentar, actualizar y/o eliminar.

La solución fácil y rápida pero errónea,  sería crear un campo en la tabla médico llamado “especialidadMedico” y que este sea de tipo cadena de caracteres. Como he venido platicado, esta solución pierde completamente la integridad de los datos y por consiguiente la normalización de la base de datos no existe.  Por tanto si se elige la solución por catálogos como se muestra en la figura siguiente:

Realizar búsquedas, generar reportes, obtener información para desplegar en alguna lista, etc., todo esto puede llevarse a cabo de manera rápida y eficiente. En todos los sistemas una búsqueda es básica e indispensable, por lo tanto imaginemos esto: El cliente desea una lista desplegable con las especialidades que se tienen para  realizar un mejor filtrado de la información. Ahora, imagina esto en más de 10 páginas. Por ultimo imagina que el usuario final te comenta que se requiere agregar una nueva especialidad.

Considerar la creación de un catálogo para un mejor control e integridad de la información sería ideal para solucionar varios problemas como el que se describe en el párrafo anterior. Si se requiere un reporte de todos los médicos de cierta especialidad, esto sería muy sencillo de obtener mediante una consulta SQL. Permitirle al usuario modificar las opciones de un sistema es siempre ideal, pues el usuario verá lo sencillo que es hacerlo desde un ambiente grafico.

Cuando se necesita cotizar una aplicación, se debe dejar en claro al cliente, que el administrador del sistema será capaz de modificar opciones del sistema de manera fácil y rápida; tu cliente verá esto como un buen desarrollo.

Cuando me encuentro en reuniones con clientes para hablar sobre las opciones que se desean en el sistema, siempre hay un punto en el que se comenta “Este módulo debe ser así, porque CASI NO se eligen esas opciones” es entonces cuando se tiene que realizar un análisis de ese caso, puesto que si eliges una opción errónea, al momento de entregar tu software se te diga que SIEMPRE SI se usarán dichas opciones, para solucionarlo te podrías ver en la necesidad de reprogramar uno o varios módulos; sin embargo, al elegir la opción de catálogos, simplemente se agrega el dato a la base de datos y listo.

Finalmente podemos concluir que si los desarrolladores ven la importancia del uso de catálogos, esto puede significar auténticos ahorros en tiempo de programación,  proceso de normalización  y mejorar la integridad de los datos en la aplicación.








 

Bio

Víctor Hugo García es Líder de Desarrollo Web en C-Technologies. Es egresado del Instituto Tecnológico de Ciudad Guzmán. Cuenta con experiencia en el diseño de base de datos y programación con tecnologías .NET y PHP. Actualmente se encuentra desarrollando software en diversas verticales de negocio para clientes en Estados Unidos. Durante el 2007 colaboró con proyectos en el Gobierno del estado de Guanajuato.