Facilidades de Normalizacion

Normalización


Las relaciones pueden tener una estructura no efectiva o inapropiada. Cuando esto sucede, algún cambio en los datos puede traer consecuencias no deseadas llamadas anomalías de modificación.

Para eliminar estas anomalías tenemos que redefinir la relación descomponiéndola en dos o más relaciones. Este proceso se llama normalización.

Anomalías de modificación

Observe la siguiente relación:

ACTIVIDAD(NúmeroEstudiante,Actividad,Costo)

Llave: NúmeroEstudiante

NúmeroEstudiante Actividad Costo
100 Esquí 200
150 Natación 50
175 Tenis 50
200 Natación 50

Si borramos la tupla del estudiante 100, se perdería no solo el hecho de que el estudiante 100 es un esquiador, sino también el hecho de que esquiar cuesta $200, Esto se llama anomalía de borrado; que significa que al borrar los hechos de una entidad, se borran inadvertidamente hechos de otra entidad en una sola operación de borrado.

Ahora suponga que queremos almacenar el hecho de que el buceo cuesta $175. No podremos meter esta información en la relación ACTIVIDAD hasta que un estudiante tome buceo. Esta restricción se denomina anomalía de inserción. No es posible insertar un hecho nuevo acerca de una entidad hasta que se tiene un hecho adicional sobre otra entidad.

Es evidente que la relación ACTIVIDAD tiene problemas. Estos problemas pueden eliminarse si se divide la relación en dos relaciones como se ve a continuación:

EST_ACT(NúmeroEstudiante,Actividad)

Llave: NúmeroEstudiante

NúmeroEstudiante Actividad
100 Esquí
150 Natación
175 Tenis
200 Natación

ACT_COST(Actividad,Costo)

Llave: Actividad

Actividad Costo
Esquí 200
Natación 50
Tenis 50

De esta forma, si queremos borrar al estudiante 100 de EST_ACT, no se pierde el hecho de que esquiar cuesta $200. También podemos añadir buceo y su costo a la relación ACT_COST antes de que exista algún estudiante que tome buceo.

Formas normales

Las relaciones se clasifican por los tipos de anomalías de modificación a las que son vulnerables. En los años 70s, los teóricos relacionales encontraban anomalías, las clasificaban y determinaban la forma de prevenirlas. Estas clases de relaciones y técnicas de prevensión de anomalías son llamadas formas normales.

E.F. Codd definió la primera, segunda y tercera forma normal. Más tarde se especificó la forma normal Boyce-Codd y después se definieron la cuarta y la quinta forma normal. Estas formas normales están anidadas como se muestra en la figura. Esto es, una relación en segunda forma normal está también en primera forma normal, y una relación en quinta forma normal, está también en 4NF, BCNF, 3NF, 2NF y 1NF (NF son las siglas de Normal Form).

Los teóricos, sin embargo, no garantizaban que alguna de estas formas normales eliminara todas las anomalías, hasta que R. Fagin, en 1981, definió una nueva forma normal llamada forma normal dominio/llave (domain/key). Fagin mostró que una relación en forma normal dominio/llave está libre de todas las anomalías de modificación. También mostró que cualquier relación libre de anomalías de modificación está también en forma normal dominio/llave. Esto significa que si podemos llevar a una relación a la forma normal dominio/llave, podemos estar seguros de que no tendrá anomalías, solo hay que saber poner a las relaciones en forma normal dominio/llave.

Las formas normales se explican cada una por separado:

 


 

Primera Forma Normal

(1NF)


Cualquier tabla que cumpla con la definición de relación está en primera forma normal. Para que una tabla sea una relación debe tener las siguientes características: Cada celda de la tabla debe contener un solo valor, y no se permiten grupos o arreglos como valores. Todas las entradas en cualquier columna (atributo) debe ser del mismo tipo. Cada columna debe tener un nombre único, pero el orden de las columnas en la tabla es insignificante. Finalmente, dos renglones en una tabla no pueden ser idénticos, pero el orden de los renglones es insignificante.

La siguiente tabla es una relación en primera forma normal. Esta relación presenta anomalías de modificación.

ACTIVIDAD(NúmeroEstudiante,Actividad,Costo)

Llave: NúmeroEstudiante

NúmeroEstudiante Actividad Costo
100 Esquí 200
150 Natación 50
175 Tenis 50
200 Natación 50

 

 

Segunda Forma Normal

(2NF)


Considere la siguiente relación:

ACTIVIDADES(NúmeroEstudiante,Actividad,Costo)

Llave: (NúmeroEstudiante,Actividad)

NúmeroEstudiante Actividad Costo
100 Esquí 200
100 Golf 65
150 Natación 50
175 Tenis 50
175 Natación 50
200 Natación 50
200 Golf 65

La relación ACTIVIDADES tiene anomalías de borrado, ya que si borramos la tupla del estudiante 175, se pierse el hecho de que el tenis cuesta 50. También presenta anomalías de inserción, porque si queremos agregar una actividad nueva, por ejemplo buceo que cuesta $175, tendremos que tener antes un estudiante que desee tomar buceo.

El problema de esta relación es que tiene una dependencia que involucra solo a una parte de la llave. La llave es (NúmeroEstudiante,Actividad), pero la relación contiene una dependencia, Actividad ---> Costo. El determinante de esta dependencia (Actividad) es solo una parte de la llave. Se dice que Costo es parcialmente dependiente de la llave. No habría anomalías de modificación si Costo fuera dependiente de toda la llave.

Definición de segunda forma normal:

Una relación está en segunda forma si todos sus atributos no-llave son dependientes de toda la llave.

Según la definición, todas las relaciones que tienen por llave a uno solo de sus atributos, están automáticamente en segunda forma normal. Si la llave es de un solo atributo, todos los atributos no-llave son dependientes de toda la llave; ahí no pueden existir dependencias parciales.

Para eliminar las anomalías de modificación de la relación ACTIVIDADES debemos dividir la relación en dos relaciones en segunda forma normal. Las nuevas relaciones son EST_ACT y ACT_COST.

EST_ACT(NúmeroEstudiante,Actividad)

Llave: (NúmeroEstudiante,Actividad)

NúmeroEstudiante Actividad
100 Esquí
100 Golf
150 Natación
175 Tenis
175 Natación
200 Natación
200 Golf

ACT_COST(Actividad,Costo)

Llave: Actividad

Actividad Costo
Esquí 200
Natación 50
Tenis 50
Golf 65

 

 

 

Tercera Forma Normal

(3NF)


Las relaciones en segunda forma normal también pueden tener anomalías. Considere la relación VIVIENDA. Cada estudiante vive en un solo edificio, y cada edificio tiene un solo costo. La llave de esta relación es NúmeroEstudiante y tiene las dependencias NúmeroEstudiante --->Edificio y Edificio ---> Costo.

VIVIENDA(NúmeroEstudiante,Edificio,Costo) Llave: NúmeroEstudiante Dependencias Funcionales: Edificio ---> Costo NúmeroEstudiante ---> Edificio ---> Costo

NúmeroEstudiante Edificio Costo
100 Randolph 1200
150 Ingersoll 1100
200 Randolph 1200
250 Pitkin 1100
300 Randolph 1200

Como NúmeroEstudiante determina Edificio y Edificio determina Costo, indirectamente NúmeroEstudiante ---> Costo. Un arreglo de dependencias como el anterior se llama dependencia transitiva, pues NúmeroEstudiante determina el Costo a través del atributo Edificio.

La relación VIVIENDA está en segunda forma normal porque tanto Edificio como Costo están determinados por NúmeroEstudiante. Sin embargo, VIVIENDA tiene anomalías.

Si eliminamos la tupla del estudiante 150, no solo se pierde el hecho de que el estudiante 150 vive en el edificio Ingersoll, también se pierde el hecho de que este edificio tiene un costo de $1100. Y si queremos almacenar el hecho de que el edificio Carrigg Hall cuesta $1500 tendremos que esperar a que un estudiante se mude a ese edificio. Hemos encontrado que VIVIENDA tiene anomalías de borrado y de inserción debido a la dependencia transitiva.

Definición de tercera forma normal:

Una relación está en tercera forma normal si está en segunda forma normal y no tiene dependencias transitivas.

La relación vivienda puede dividirse en dos relaciones en tercera forma normal que eliminan las anomalías, estas relaciones son

EST_VIVIENDA(NúmeroEstudiante,Edificio) y EDIF_COSTO(Edificio,Costo).

EST_VIVIENDA(NúmeroEstudiante,Edificio)

Llave: NúmeroEstudiante

NúmeroEstudiante Edificio
100 Randolph
150 Ingersoll
200 Randolph
250 Pitkin
300 Randolph

EDIF_COSTO(Edificio,Costo)

Llave: Edificio

Edificio Costo
Randolph 1200
Ingersoll 1100
Pitkin 1100