Normalizacion

Post on 07-Jul-2015

832 views 0 download

Transcript of Normalizacion

Normalización

L.I. María Luisa Velasco Ramírez

• La teoría de la Normalización es un método objetivo y riguroso que se aplica en el diseño de bases de datos relacionales.

• El proceso de normalización de una base de datos consiste en aplicar una serie de reglas a las relaciones obtenidas tras el paso del modelo E-R (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.

• Dependencias:– Funcional: dado un atributo B de una entidad o

relación, este es funcionalmente dependiente de otro A, si para cualquier valor dado del atributo A existe un valor simple asociado en el atributo B.

• Siempre existe entre los atributos no clave respecto del clave

• Que es clave?– Un Identificador único– Claves, son:

» primaria» candidatas

Ejemplos:

• Matrícula -> Nombre_alumno

• Un valor único de matrícula determina un solo valor para Nombre_alumno

• ISBN-> Título, igualmente un valor único de ISBN determina un solo valor de Título de libro.

–Parcial: un atributo B (no clave) depende de un subconjunto A (clave)

–Transitiva: un atributo B (no clave) depende de un atributo C no clave

–Boyce Codd: un atributo B (Clave o parte de clave) depende de un atributo que no es clave. Todo determinante es clave.

• Formas normales– Primera Forma: todos los atributos tiene

cardinalidad 0 o 1. Evitar grupos repetidos.

– Segunda Forma: una tabla está en 2NF si está en 1NF y no existen dependencias parciales.

– Tercer Forma: una tabla está en 3NF si está en 2NF y no existen dependencias transitivas

– Boyce Codd Forma: una tabla está en BCNF si está en 3NF y no existen dependencias de B-C.

Por ejemplo, dada la siguiente relación:Id_orden Fecha Id_cliente Nom_cliente Estado Num_Item Desc_Item Cant Precio

2301 23/03/11 101 Martí VE 3786 Red 3 100

2301 23/03/11 101 Martí VE 4011 Raqueta 6 700

2301 23/03/11 101 Martí VE 9132 Paq-3 8 25

2302 25/03/11 102 Sports NL 5794 Paq-6 4 55

2303 27/03/11 103 Mr. Tenis VE 4011 Raqueta 2 700

2303 27/03/11 103 Mr. Tenis VE 3141 Funda 2 125

Observen bien las tuplas de la relación, ¿Qué observan en los campos Id_Orden, Fecha, Id_Cliente, Nom_Cliente, Estado?

• La relación no cumple con la 1FN, ya que existen grupos repetidos, qué se debe hacer:

• Eliminar los grupos repetidos

• Crear una nueva relación con la llave primaria (PK, por sus siglas en inglés) de la relación base y el grupo repetido

Se tienen ahora 2 relaciones:Id_orden Fecha Id_cliente Nom_cliente Estado

2301 23/03/11 101 Martí VE

2302 25/03/11 102 Sports NL

2303 27/03/11 103 Mr. Tenis VE

Id_Orden Num_Item Desc_Item Cant Precio

2301 3786 Red 3 100

2301 4011 Raqueta 6 700

2301 9132 Paq-3 8 25

2302 5794 Paq-6 4 55

2303 4011 Raqueta 2 700

2303 3141 Funda 2 125

Ordenes

Artículos_Ordenes

¿Qué atributo tienen en común las 2 relaciones?

Ahora hay que aplicar la 2FN a las relaciones resultantes• Determinar cuáles columnas que no son llave no dependen de la llave primaria de la tabla.• Eliminar esas columnas de la tabla base, para lo cual se debe:• Crear una segunda tabla con esas columnas y la PK de la cual dependen.• Analizar la relación Artículos_Ordenes• Observar que las columnas PRECIO y DESC_ITEM son dependientes de NUM_ITEM ( un

subconjunto de la llave primaria), pero no son dependientes de ID_ORDEN. CANT sin embargo, si depende de la PK, ya que se refiere a la cantidad de artículos que lleva la orden.

Id_Orden Num_Item Desc_Item Cant Precio

2301 3786 Red 3 100

2301 4011 Raqueta 6 700

2301 9132 Paq-3 8 25

2302 5794 Paq-6 4 55

2303 4011 Raqueta 2 700

2303 3141 Funda 2 125

Artículos_Ordenes

¡Observar que la llave primaria (PK) de esta relación es compuesta!

Id_Orden Num_Item Cant

2301 3786 3

2301 4011 6

2301 9132 8

2302 5794 4

2303 4011 2

2303 3141 2

Artículos_OrdenesNum_Item Desc_Item Precio

3786 Red 100

4011 Raqueta 700

9132 Paq-3 25

5794 Paq-6 55

4011 Raqueta 700

3141 Funda 125

Artículos

Las relaciones resultantes son:

¿Qué representa Num_Item, en la relación Artículos_Ordenes?¿La llave primaria de la relación Artículos_Ordenes es compuesta?

Analizar la relación Ordenes

Ordenes

Id_orden Fecha Id_cliente Nom_cliente Estado

2301 23/03/11 101 Martí VE

2302 25/03/11 102 Sports NL

2303 27/03/11 103 Mr. Tenis VE

¿Cumple la 2FN?

Si, porque cualquier valor único de ID_ORDEN determina un sólo valor paracada columna. Por lo tanto, todas las columnas son dependientes de la llave primaria ID_ORDEN.

¿Cumple la 3FN?

Id_orden Fecha Id_cliente Nom_cliente Estado

2301 23/03/11 101 Martí VE

2302 25/03/11 102 Sports NL

2303 27/03/11 103 Mr. Tenis VE

Ordenes

La tercera forma normal indica que se debe eliminar cualquier columna no llave que sea dependiente de otra columna no llave (dependencia transitiva). Los pasos a seguir son:» Determinar las columnas que son dependientes de otra columna no llave.» Eliminar esas columnas de la tabla base.» Crear otra tabla con esas columnas y con la columna no llave de la cual son dependientes.

Observar que las columnas Nom_cliente y Estado son dependientes de ID_cliente, que es una columna no clave

Al crear otra relación o tabla se obtiene:

Id_orden Fecha Id_cliente

2301 23/03/11 101

2302 25/03/11 102

2303 27/03/11 103

OrdenesId_cliente Nom_cliente Estado

101 Martí VE

102 Sports NL

103 Mr. Tenis VE

Clientes

Llave foránea

La llave foránea, dónde es primaria?

Las relaciones resultantes son:

Id_Orden Num_Item Cant

2301 3786 3

2301 4011 6

2301 9132 8

2302 5794 4

2303 4011 2

2303 3141 2

Artículos_OrdenesNum_Item Desc_Item Precio

3786 Red 100

4011 Raqueta 700

9132 Paq-3 25

5794 Paq-6 55

4011 Raqueta 700

3141 Funda 125

ArtículosId_orden Fecha Id_cliente

2301 23/03/11 101

2302 25/03/11 102

2303 27/03/11 103

Ordenes

Id_cliente Nom_cliente Estado

101 Martí VE

102 Sports NL

103 Mr. Tenis VE

Clientes

Analizar ahora la siguiente relación Préstamo

La relación PRESTAMO( num_socio, nombre_socio, cod_libro, fec_prest, editorial, país_edit )

las claves candidatas son: (num_socio, cod_libro) y (nombre_socio, cod_libro)

La combinación de num_socio y cod_libro son las ideales para formar la llave primaria, sin embargo la combinación nombre_socio y cod_libro también es una clave candidata.

¿La relación está en primera forma normal?

–Primera Forma: todos los atributos tiene cardinalidad 0 ó 1.

Si está en 1FN, todos los atributos tienen cardinalidad 0 ó 1

Segunda Forma: una tabla está en 2NF si está en 1NF y no existen dependencias parciales.

• PRESTAMO( num_socio, nombre_socio, cod_libro, fec_prest, editorial, país_edit )

• Se puede observar que ciertos atributos que no forman parte de las claves candidatas, tales como editorial y país editorial, constituye información acerca del libro, pero no acerca de las claves candidatas (que son compuestas).

Por lo tanto, la relación préstamo no se encuentra en 2FN.

• La solución es descomponer esta relación en las siguientes:

• PRESTAMO1( num_socio, nombre_socio, cod_libro, fec_prest )

• LIBRO( cod_libro, editorial, país_edit )

• En la relación PRESTAMO1, el único atributo que no forma parte de las claves candidatas es fec_prest, pero es determinado funcionalmente por la clave completa. Por lo que está en 2FN.

• La relación LIBRO, la clave es cod_libro, y los dos atributos: editorial y país son determinados funcionalmente por la clave completa. Por lo tanto, está en 2FN.

Tercer Forma: una tabla está en 3NF si está en 2NF y no existen dependencias transitivas

• Tercera Forma Normal (3FN), propuesta por Codd. Una relación está en 3FN, si además de estar en 2FN, los atributos que no forman parte de ninguna clave candidata facilitan información sólo acerca de la(s) clave(s) y no acerca de otros atributos.

• En la relación PRESTAMO1, el atributo fec_prest es determinado por la clave, ya que no existen más atributos. Por lo que está en 3FN.

• En la relación LIBRO, el atributo país entrega información acerca de la editorial que publica el libro, por lo que no está en 3FN, país es una columna no clave que es determinado por otra columna no clave que es editorial .

• La solución es descomponerla en:

• LIBRO1( cod_libro, editorial )

• EDITORIAL( editorial, país ), • que están en 3FN, ya que todo atributo no

clave facilita información acerca de la clave.

Boyce Codd: un atributo B (Clave o parte de clave) depende de un atributo que no es clave. Todo determinante es clave.

• Forma Normal de Boycce y Codd (FNBC). La relación PRESTAMO1, que está en 3FN, todavía presenta anomalías, ya que num_socio y nombre_socio, se repiten innecesariamente por cada cod_libro.

• Una relación no cumple con la FNBC si un atributo B (clave o parte de clave) depende de un atributo que no es clave. Todo determinante es clave.

• En la relación PRESTAMO1, num_socio es información acerca de nombre_socio y viceversa. Ninguno de estos atributos son clave (aunque formen parte de la clave).

• Es decir

• num_socio -> nombre_socio

• nombre_socio->num_socio• Un atributo no clave determina a otro que

es clave o parte de ella

La solución es:

• SOCIO( num_socio, nombre_socio )

• PRESTAMO2( num_socio, cod_libro, fec_prest ), que están en FNBC

Esquema relacional resultante:

• LIBRO1( cod_libro, editorial )

• EDITORIAL( editorial, país )

• SOCIO( num_socio, nombre_socio ) • PRESTAMO2( num_socio, cod_libro,

fec_prest )

• Consultar en Mysql-hispano.org el artículo Normalización de bases de datos, del cual se tomaron algunos conceptos y el primer ejemplo.