domingo, 20 de febrero de 2011

2.- Nomalización

NORMALIZACION
El proceso de normalización consiste verificar el cumplimiento de ciertas reglas que aseguran la eliminación de redundancias e inconsistencias. Esto se hace mediante la aplicación de ciertos procedimientos y en ocasiones se traduce en la separación de los datos en diferentes relaciones.
         El proceso de normalización de una base de datos consiste en aplicar una serie de reglas a las relaciones obtenidas en el modelo E-R (entidad-relación).
         Las bases de datos relacionales se normalizan para:
Evitar la redundancia de los datos.
Evitar problemas de actualización de los datos en las tablas.
Proteger la integridad de los datos.
         En el modelo relacional es frecuente llamar tabla a una relación, la cual  tiene que cumplir con algunas restricciones:
Cada columna debe tener su nombre único.
No puede haber dos renglones iguales. No se permiten los duplicados.
Todos los datos en una columna deben ser del mismo tipo
Ejemplo
Estamos en un servicio de biblioteca y queremos llevar el control del préstamo que incluya los siguientes datos:
Información sobre el usuario del servicio, datos del libro y la información sobre el préstamo que se realiza.
Diagrama E-R para el ejemplo
Estamos en un servicio de biblioteca y queremos llevar el control del préstamo que incluya los siguientes datos:
Información sobre el usuario del servicio, datos del libro y la información sobre el préstamo que se realiza.

 
 
Existe una relación muchos a muchos que hay que romper.
Primera Forma Normal
         En una relación (tabla) no pueden existir grupos de repetición, es decir, un atributo no puede tomar más de un valor del dominio subyacente:
         Considerando la entidad usuario, sus atributos son:
            i_usuario#, n_usuario, i_libro,   d_prestamo, d_entrega
         Y considerando la entidad libro, sus atributos son:
            i_libro#, n_título, n_editorial, n_país, d_año
La entidad usuario, presenta el siguiente problema: cada vez que un usuario pida un libro hay que escribir su número de usuario (i_usuario) y su nombre (n_usuario), además en la realidad se tendrán muchos datos más de los usuarios de la biblioteca.
¿Qué problemas puede traer esto?
Hacer una tabla con datos y ver qué pasa



Aplicando la Primera Forma Normal
  1. Identificar “grupos de repetición”.  En el ejemplo el “grupo de repetición” es lo que está en rojo: i_usuario#, n_usuario, i_libro,  d_prestamo, d_entrega
  2. Eliminar “grupos de repetición”.  Para poderlos eliminar se crea una nueva tabla con una llave primaria compuesta, una parte es la llave primaria de la tabla original (i_usuario) y la otra parte es la llave primaria del grupo de repetición (i_libro), las entidades quedan así:
usuario (i_usuario#, n_usuario)
prestamo (i_usuario#, i_libro#, d_prestamo, d_entrega)
         De una entidad se crearon 2 entidades
         La entidad  libro queda igual
libro(i_libro#, n_título, n_editorial, n_país, d_año)
Segunda Forma Normal
         Establece que todas las dependencias parciales se deben eliminar y separar dentro de sus propias tablas.  Una dependencia parcial es un atributo que no depende completamente de la llave primaria.  Normalmente se presenta  cuando la llave primaria es compuesta, es decir, que está formada por dos atributos.
         Analizando la entidad préstamo que es la que tiene la llave primaria compuesta:
prestamo (i_usuario#, i_libro#, d_prestamo, d_entrega)
En este ejemplo todas las entidades se encuentran en 2 FN, ya que los atributos d_prestamo y d_entrega dependen completamente de la llave primaria compuesta y no de una parte de ésta.
Aplicando la Segunda Forma Normal
         Cuando alguna entidad se encuentre en 2fn, será necesario:
  1. Determinar cuáles atributos  no dependen de la llave primaria compuesta de la tabla.
  2. Eliminar esas columnas de la tabla base.
  3. Crear una segunda tabla con esos atributos cuya llave primaria será el atributo del cual dependen.
Tercera Forma Normal
         Una relación está en 3FN si no hay dependencias transitivas. Una dependencia transitiva es aquella en la cual existen columnas (atributos) que dependen de otras columnas (atributos) que tampoco son llave.
         En el ejemplo, estas dos entidades están en 3FN:
usuario (i_usuario#, n_usuario)
prestamo (i_usuario#, i_libro#, d_prestamo, d_entrega)
         Pero en esta entidad se puede aplicar la 3FN
libro(i_libro#, n_título, n_editorial, n_país, d_año)
Aplicando la Tercera Forma Normal
         Los pasos a seguir son:
  1. Determinar que columnas son dependientes de otra columna no llave.
        En el ejemplo el atributo n_pais y d_año dependen del atributo no llave n_editorial, por lo tanto se puede sacar a otra entidad.
  1. Eliminar esas columnas de la tabla base
  2. Crear otra tabla con esas columnas y con la columna no llave de la cual son dependientes, crear una llave primaria para esta tabla.
            - En el ejemplo, a partir de la entidad libro quedarían las siguientes dos entidades:
     libro(i_libro#, n_título, n_editorial, n_país, d_año)
    editorial(i_editorial#, n_editorial, n_editorial, n_país, d_año)



En conclusión:
La normalización es una técnica que se utiliza para crear relaciones lógicas apropiadas entre tablas de una base de datos. Ayuda a prevenir errores lógicos en la manipulación de datos. La normalización facilita también agregar nuevas columnas sin romper el esquema actual ni las relaciones.

Se discutieron las primeras tres formas. Éstas proveen suficiente nivel de normalización para cumplir con las necesidades de la mayoría de las bases de datos. Normalizar demasiado puede conducir a tener una base de datos ineficiente y hacer a su esquema demasiado complejo para trabajar. Un balance apropiado de sentido común y práctico puede ayudarnos a decidir cuándo normalizar.


Bibliografía:

No hay comentarios:

Publicar un comentario