August 05, 2010

Errores frecuentes en la normalización de una Base de Datos

En los trabajos que me e envuelto con base de datos, e visto un gran número de ellas, muchas echas por empresas pequeñas y medianas especializadas en el desarrollo, de cualquier sector; comercial, educativo o independientes, al final de todo, existe algo en común, y me llevo a una  conclusión, “Será que NO tienen la mas mínima y remota idea de ¿Cómo hacer un modelo físico y aprovechar todas las bondades de un manejador de base de datos?”, y lo peor del caso, es que eso funciona milagrosamente y para ellos es indispensable toda su información (obviamente), pero tienen un problema en común, el sistema no funciona bien, ¿Por qué será?

En este artículo, a pesar de como empieza, se que podría generar muchas polémicas con desenlaces incomodos, para evitar disgustos a los lectores, se limitará todo a un solo aspecto, la debida normalización de una base de datos y todas aquellas características que reflejan los síntomas de una practica errónea. Se busca crear una conciencia en aquellas personas que participan en el campo y mejorar el producto al cliente.

Estaré expresando mi opinión muy particular sobre la normalización de una Base de Datos en sistemas comunes, manteniendo un criterio firme ante los fundamentos adquiridos por la perseverante documentación y puesta en practica, con sus respectivos correctivos durante todo un ciclo de aprendizaje e implementación, en mi opinión un ejemplo a seguir son las buenas practicas de Oracle.

La carrera de base de datos es muy amplia para su formación, se requiere de una fusión entre el diseño, la administración, y la programación para lograr un nivel aceptable, solo se tiene que hallar un punto intermedio de conocimiento que pueda prosperar en nuestro trabajo, no se pide que sean unos genios (si es posible mejor) ni unos mediocres (dios no los perdonará), hoy en día no existe excusa alguna para obtener información al respecto, el tiempo invertido será recompensado. La búsqueda se puede hacer en cualquier medio; Internet, Libros, Foros, Cursos oficiales, entre otros, al final de todo, el concepto y las características básicas de un manejador son comunes entre ellos.

Hoy en día, una base de datos es una parte muy básica y elemental en todo sistema de información, si partimos de un correcto modelo, robusto e íntegro, nos traerá beneficios a futuro. ¿Porqué? esté es el núcleo de todo sistema, el que define las reglas de negocio, por ello se insiste mucho de su importancia, si aprovechamos sus bondades se descargan de actividades los programadores durante el desarrollo, perduraría mas en el tiempo, los administradores no tendrían fuertes dolores de cabeza para resolver los problemas, y como estas, existen otras.

A continuación menciono cuales son las diversas situaciones que indican una mala practica, y de cada una de ellas explicare a que se hace referencia:

  • Incorrecta normalización: Esto es algo muy habitual, y debe ser básico implementarlo. No se cumple el proceso de analizar y aplicar las diversas formas normales para hallar su mejor diseño, como mínimo se debe llegar hasta la tercera forma normal, su ausencia genera una inconsistencia en la data, por lo que trae la redundancia y limitación en la expansión del modelo, los cambios para reparar esto pueden ser muy radicales que comprometen los datos y el funcionamiento de la aplicación en una reacción en cadena.
  • Ausencia de las relaciones: Esto ya parece ser una regla (ironía), existen casos de que se implementan relaciones de forma parcial, pero la mayoría de las tablas son huérfanas, no existe una dependencia de una con otras como tal, su ausencia permite de forma incontrolable la inconsistencia de los datos, la relación es un simple mecanismo de validación que restringe una dependencia, su uso es básico, por ende, los manejadores de base de datos no se llamarían “Manejadores de Base de Datos Relacionales”, obvio no?.
  • Ausencia de un estándar: Esta situación es muy amplia, se considera desde el nombrado de cualquier objeto hasta su orden, haciendo referencia que un objeto; puede ser una tabla, clave primaria, clave foránea, columnas, intertablas, indices, etc. Generando un malgaste de caracteres sin necesidad, falta de una “Auto-Documentación”, mayor esfuerzo de escritura, la identificación de cada objeto de forma intuitiva, y muchas otras cosas que se tienen que vivir para comprender sus bondades, a pesar que es algo en función de la estética, pero a todos nos gusta algo con unos detalles bien refinados, por eso un lamborghini a todos nos gusta.
  • Ausencia de las restricciones y mecanismos de control: Esto ya parece ser una ciencia oculta y desconocida, e incluso he llegado a escuchar que hay empresas que quitan estos controles (pre infarto), puede que tenga una explicación, como también la hay para cuando los crearon, la situación es que su ausencia evita validaciones adicionales, estos mecanismos de control pueden ser varios; como los disparadores (triggers), condiciones (check) y reglas (rules). Conocer sus bondades e implementarlas nos ayudaría mas de lo que imaginamos, como lo que es la auditoria, partición de tablas, controles mas robustos de los datos, etc. la imaginación es nuestro limite.
  • Ausencia de la documentación: A pesar que no se implementa un correcto nombrado a los objetos, se presenta una escasez de la misma actividad para describir cada objeto, la ausencia de esta documentación puede generar una gran perdida de tiempo por malos entendidos, resultados erróneos, búsqueda de ayuda imprecisa, y cualquier inconveniente, seguramente nadie se quiere verse envuelto en esta situación tan incomoda.

Estas situaciones no será el todo, pero son comunes, existen muchas otras mas que se deben cuidar, darle el correctivo adecuado ayudara a mitigar estos problemas a su debido tiempo, de lo contrario existirán problemas en un futuro no muy lejano. Es importante entender que quitarle los mecanismos de control a una aplicación y asignarlos a la Base de Datos es más óptimo, el motor del manejador está mucho mas optimizado que el de un lenguaje de programación, y la transferencia de información es otro factor que disminuye el rendimiento. La aplicación en si solo debe ser una herramienta para capturar y mostrar información, no para procesar la información.

La base de datos no puede ser un simple y vulgar repositorio, donde cada problema se sale del paso con la improvisación, es preferible sentarse únicamente para analizar su correcto modelado, y con el tiempo se podrá disfrutar de sus grandes beneficio.

Este es un pensamiento que siempre les digo:

Toda información debe ser administrada desde su origen, de allí es donde se resuelven los problemas, así sus datos serán iguales en todos lados, al revés, será solo una gran pelota de parches.