martes, 1 de septiembre de 2009

Normalización de Base de Datos

Cuántas veces no vemos como algunos analista de base de datos comienzan a culpar al motor de base de datos porque las consultas son muy lentas o porque las transacciones se quedan muchas veces bloqueadas, entre muchas situaciones que hacen que las tareas del día a día sean cada día más tediosa.
  1. Pero, no se han preguntado ustedes, si puede ser un problema de diseño de la base de datos que viene arrastrándose hasta la aplicación que hace que nuestro sistema no funcione de forma correcta?
  2. No será que tenemos muchos registros redundante en nuestra base de datos, haciendo que esta ocupe más espacio del permitido?
Para responder algunas de esas preguntas, les voy a tratar el tema de normalización de base de datos, y como podemos corregir muchos errores en nuestros sistemas tomando las medidas de lugar al momento de diseñar un base de datos. Ahora que es la normalización, es un proceso que consiste en aplicar una grupo de reglas a las relaciones resultantes de la aplicación del modelo entidad-relación. Que nos facilita la normalización:
  • Evitar incongruencia de datos, tipos de datos y nombres.
  • Evitar datos redundantes.
  • Obtener una mayor integridad de nuestros datos.
  • Evitar inconvenientes con mantenimiento de datos.
Paso 1: 1ra. Forma Normal (1FN)
  • Todas la tablas deben contener una llave primaria.
  • Los campos en la tabla deben ser invisibles o mínimo (mejor conocido como atómicos).
  • La tabla no debe contener atributos nulos (uno de los errores más cometidos, especialmente en actualizaciones de tablas)
De esta forma se deben eliminar los datos repetidos, y disminuir los fallos de errores por la inexistencia de un determinado dato.

Paso 2: 2da. Forma Normal (2FN)

En este paso se deben verificar las dependencias de las distintas tablas, donde no existan dependencias parciales, es decir cada datos (Contraint) debe tener una dependencia completa a una tabla definida en nuestra base de datos.

Paso 3: 3ra. Forma Normal (3FN)

Cada atributo que no se encuentre relacionado a otra tabla mediante dependencia, depende directamente de la llave primaria. En otras palabras, cualquier dato que no sea clave debe ser eliminado o movido a otra tabla separada.

Existen otros dos pasos de normalización 4FN y 5FN, pero no son muy usados por los analistas de datos, que buscan mejorar aún más la estructuración de una base de datos.

Notas: para mejorar el uso de las base de datos es recomendable crear base de datos cerradas, es decir, que no le permitan muchas libertades al desarrollador de obviar registros que pueden ser importantes o que permitan errores en la extracción o consulta de alguna información que no fue insertada.

Para más información sobre el tema, ver:
Análisis y Diseño de Sistemas
Kendall y Kendall
Capítulo 17, Normalización de Base de Datos
Pág. 607

Un libro viejo, pero muy bueno, a veces no es el gran conocimiento que tengas sobre un determinado motor de base de datos o que tan eficiente sea éste, sino, que tan bien puedes aplicar las reglas de análisis al momento de diseñar tu base de datos.

4 comentarios:

NoobSaibot dijo...

hola esta muy bueno pero.. q no entendi el punto de:

* La tabla no debe contener atributos nulos.

acaso que refiere podras decirlo mas detallado?

gracias

Michael Núñez dijo...

Hola, con esto me refiero a no dejar que los campos en las tablas acepten valores NULL y mucho más si estos campos sirven para relacionar una tabla con otra(s). Aunque se sabe, por ejemplo en MySQL y MS SQL, un campo NULL ocupa menos espacios en disco que otro que tenga datos, es igual de cierto que muchos sistemas funcionan de forma más lenta o pueden generar inconvenientes al momento de leer datos NULL.

Anónimo dijo...

Buenas ingeniero, no estoy muy clara con lo de la normalizacion de la BD resulta que varios de los prof a los que he consultado no se ponen de acuerdo :S me preguntaba si tendria oportunidad de revisar mi cuadro y decirme que opina, es para una asignación de clases no se si hay que hacer eso tabla por tabla y presentar un cuadro aparte para cada uno, o si se vale todos juntos :S
gracias

Michael Núñez dijo...

Hola, claro que puedo brindarte una ayuda, solo que hay que tener en consideración que el paradigma de normalización ha cambiado un poco, hay base de datos en memoria que lo mejor es usar una sola tabla y no se cual tu profesor ha usado.