Unidad IV. Normalización

Normalización en Base de Datos Relacionales
Consiste en aplicar una serie de reglas a las relaciones obtenidas tras el paso del modelo entidad-relación al modelo relacional.
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, aunque para que una tabla sea considerada como una relación tiene que cumplir con algunas restricciones:
  • Cada tabla debe tener su nombre único.
  • No puede haber dos filas iguales. No se permiten los duplicados.
  • Todos los datos en una columna deben ser del mismo tipo.





Normalizar es ordenar las relaciones que existen entre objetos, elementos de un grupo, datos de una base de datos en función de unas determinadas características que cada uno de ellos tiene en común.
La normalización de bases de datos relacional consiste en definir las reglas que determinan las dependencias entre los datos de una base de datos relacional (BDR). Si definimos esta relación o dependencia entre los elementos de una determinada base de datos de la manera más sencilla posible, conseguiremos que la cantidad de espacio necesario para guardar los datos sea el menor posible y la facilidad para actualizar la relación sea la mayor posible. Es decir, optimizaremos su funcionamiento.


Dependencias Funcionales


Una dependencia funcional, denotada por X -> Y, entre dos conjuntos de atributos X y Y que son subconjuntos de R (R ={A1, A2,...,A3}) especifica una restricción sobre las posibles tuplas que podrían formar un ejemplar de relación r de R.  La restricción dice que, para  cualesquier dos tuplas t1 y t2 de r tales que t1[X] = t2[X], debemos tener también t1[Y] = t2[Y].  Esto significa que los valores componentes de Y de una tupla de r dependen de los valores del componente X, o están determinados por ellos; o bien, que los valores del componente X de una tupla determinan de manera única (o funcionalmente) los valores del componente Y.  También decimos que hay una dependencia funcional de X a Y o que Y depende funcionalmente de X. 
 

Sean a y b atributos de una misma tabla o relación T. Se dice que b es funcionalmente dependiente de a y se denota T.a -> T.b o bien simplemente a -> b si todo posible valor de a tiene asociado un único valor de b, o lo que es lo mismo, en todas las tuplas de T en las que el atributo a toma el mismo valor v1, el atributo b toma también un mismo valor v2.  Claramente a -> b no implica b -> a. Pueden repetirse los valores del atributo b para distintos valores de a. Un mismo 
atributo puede determinar funcionalmente a varios atributos lo cual se denota a -> (b1, b2, ...). Puede darse una  dependencia funcional mutua: a -> b y b -> a o lo que es lo mismo a <-> b. Nóse que el concepto de dependencia funcional no depende de la extensión concreta (contenido) que en un momento determinado tenga la tabla sino de cualquier posible extensión que pudiera tener.

Los atributos a y b pueden ser simples o compuestos (formados por la agregación de varios atributos). Los atributos funcionalmente dependientes pueden o no formar parte de la clave primaria de la tabla, de una clave altenativa o de una clave ajena de otra tabla.
El atributo b es funcionalmente dependiente de forma completa de a si a -> b y b no depende funcionalmente de ningún subconjunto de atributos de a. Si a es un atributo simple y a -> b entonces la dependencia funcional es con seguridad completa.
Las dependencias funcionales verifican una serie de propiedades denominadas axiomas de Armstrong:

Reflexividad. A partir de cualquier atributo o conjunto de atributos siempre puede deducirse él mismo. Dependencia trivial: x -> x.

    
Aumentatividad. Si x -> y entonces x+z -> y. Así se puede aumentar trivialmente el antecedente de una dependencia. Ejemplo: si con el dni se determina el nombre de una persona, entonces con el dni más la dirección también se determina el nombre.

    
Proyectividad. Si x -> y+z entonces x -> y. Ejemplo: si a partir del dni es posible deducir el nombre y la dirección de una persona, entonces con el dni es posible determinar el nombre.

    
Aditividad. Si x -> y y z -> w entonces x+z -> y+w. Ejemplo: si con el dni se determina el nombre y con la dirección el teléfono de una persona, entonces con el dni y la dirección podrá determinarse el nombre y el teléfono.

    
Transitividad o enlace de dependencias funcionales. Si x -> y e y -> z entonces x -> z. Ejemplo: si con el dni puede determinarse el código de la provincia de residencia de una persona y con éste código puede determinarse el nombre de la provincia, entonces con el dni puede determinarse el nombre de la provincia. Éste es el mecanismo básico de funcionamiento del enlace entre tablas a partir de claves ajenas. 
  



Reglas de normalización

El punto de partida del proceso de normalización es un conjunto de tablas con sus atributos, el denominado esquema relacional. Se pretende mejorar dicho esquema de datos. Se dice que una tabla están en una determinada forma normal si satisface un cierto número de restricciones impuestas por la correspondiente regla de normalización. La aplicación de una de estas reglas a un esquema relacional produce un nuevo esquema relacional en el que no se ha introducido ningún nuevo atributo.


Un esquema relacional se compone de una serie de ternas T(A,D) donde T es el nombre de una tabla, A el conjunto de los atributos de esa tabla y D el conjunto de dependencias funcionales que existen entre esos atributos.


Si una tabla no satisface una determinada regla de normalización, se procede a descomponerla en otras dos nuevas que sí las satisfagan. Esto usualmente requiere decidir qué atributos de la tabla original van a residir en una u otra de las nuevas tablas. La descomposición tiene que conservar dos propiedades fundamentales:


1.No pérdida de información. Sea T(A,D) que se divide en T1(A1,D1) y T2(A2,D2). A partir de los atributos comunes en ambos esquemas es posible determinar los atributos de T1 no presentes en T2 (es decir, el conjunto A1 - A2) o bien los atributos de T2 no presentes en T1 (el conjunto diferencia A2 - A1). Desde cualquier esquema se consigue recuperar los datos del otro mediante un mecanismo de clave ajena que permite reconstituir el esquema original de partida. Expresado mediante dependencias funcionales, la intersección de los conjuntos de atributos A1 y A2 debe determinar funcionalmente la diferencia de los conjuntos de atributos A1 - A2 o bien A2 - A1.



2.No pérdida de dependencias funcionales.
La normalización consiste pues en descomponer los esquemas relacionales (tablas) en otros equivalentes (puede obtenerse el original a partir de los otros) de manera que se verifiquen unas determinadas reglas de normalización. Evidentemente las reglas de normalización imponen una serie de restricciones en lo relativo a la existencia de determinados esquemas 
relacionales. Según se avance en el cumplimiento de reglas y restricciones se alcanzará una mayor forma normal. Existen cinco formas normales hacia las cuales puede conducir el proceso de normalización de forma incremental más una forma normal independiente de las otras.

Un esquema relacional que satisface todas las restricciones impuestas por la tercera forma normal se considera de buena calidad aunque es mejor que satisfaga una interesante propiedad. La verificación de una forma normal implica el cumplimiento de todas las formas normales anteriores. La primera forma normal es de cumplimiento obligatorio para que exista siquiera un esquema relacional propiamente formado


FN1. Se pretende garantizar la no existencia de grupos repetitivos. Un grupo repetitivo es un conjunto de atributos de igual semántica en el problema y dominio, que toman valores distintos para la misma clave. Cualquier esquema que tenga claves correctas está seguro en FN1.

FN2.Si FN1 y cada atributo de la tabla que no forma parte de la clave depende funcionalmente de forma completa de la clave primaria. Es decir, depende de toda la clave y no de ningún subconjunto de ella. Se pretende garantizar una correcta elección de claves y eliminar redundancias. Si la clave están formada por un único atributo entonces ese esquema estará seguro en segunda forma normal.

FN3. Si FN2 y cada atributo no primo de la tabla no depende funcionalmente de forma transitiva de la clave primaria.FNBC (Forma Normal de Boyce-Codd). Se basa en el concepto de determinante funcional: uno o varios atributos de una tabla de los cuales dependen funcionalmente de forma completa algún otro atributo de la misma tabla. Una relación está en FNBC si FN1 y cada determinante funcional es una clave candidata de la tabla. Así se garantiza que se han elegido bien las claves al no existir dependencias funcionales entre atributos que no son clave. Cada vez que se verifica una dependencia funcional a -> b entonces a es clave primaria o alterna con seguridad. Todas las dependencias funcionales cumplen que en su parte izquierda solo aparecen atributos que son parte de una clave candidata. Esta forma normal es más restrictiva que la tercera y tiene la interesante propiedad de que su cumplimiento implica la satisfacción de FN3 o sea que FNBC -> FN3. 


Forma norma de boyce-cood(FNCB)
Es una de las formas normales mas deseables que se pueden obtener. Es un esquema de relación R esta en FNBC respecto a un conjunto de dependencias funcionales F si , para todas las dependencias funcionales de F+ de la forma α → ß, donde α → R y B→ R, se cumple al menos una de las siguientes condiciones:
α → es una dependencia funcional trivial α es una superclave del esquema R
Un diseño de base de datos esta en FNBC si cada miembro del conjunto de esquemas de relación que constituye el diseño esta en FNBC.





No hay comentarios:

Publicar un comentario en la entrada