domingo, 29 de abril de 2012

Diferencias Datos no Normalizados y la 1FN


La normalización se adoptó porque el viejo estilo de poner todos los datos en un solo lugar, como un archivo o una tabla de la base de datos, era ineficiente y conducía a errores de lógica cuando se trataba de manipular los datos. Por ejemplo, vea la base de datos MiTienda. Si almacena todos los datos en la tabla Clientes, ésta podría verse como se muestra a continuación: 

     Clientes 
  • ID_Cliente Nombre 
  • Apellidos 
  • Nombre_Producto1 Costo_Producto1 
  • Imagen_Producto1 Nombre_Producto2 Costo_Producto2 
  • Imagen_Producto2 Fecha_Pedido 
  • Cantidad_Pedido 
  • Nombre_Cia_Envios 

A diferencia de los datos no normalizados, una tabla está en 1FN si y solo si es "isomorfa a alguna relación", lo que significa, específicamente, que satisface las siguientes cinco condiciones:

  1.  No hay orden de arriba-a-abajo en las filas.
  2.  No hay orden de izquierda-a-derecha en las columnas.
  3.  No hay filas duplicadas.
  4.  Cada intersección de fila-y-columna contiene exactamente un valor del dominio aplicable (y nada más).
  5. Todas las columnas son regulares [es decir, las filas no tienen componentes como IDs de fila, IDs de objeto, o timestamps ocultos].

Ejemplo : (No Normalizada)


En esta tabla podemos apreciar que los datos del lector no están atomizados porque el nombre del lector se puede descomponer en Nombre, Apellidos (Paterno y Materno).
En cambio, en la siguiente tabla los datos del lector se encuentra ya atomizados, pero  sucede que los datos del lector no tiene mayor incidencia con las del libro entonces sucede un tipo de redundancia que es normal en la 1FN pero que en la 2FN se optimiza.



Ejemplo:

Cliente  (1FN)

ID Cliente
Nombre
Apellido
123
Todd
Ingram
456
James
Wright
789
Cesar
Du
   
Teléfono del cliente (1FN)

ID Cliente
Teléfono
123
555-861-2025
456
555-403-1659
456
555-776-4100
789
555-808-9633

Ejemplo 1FN - 4FN


A través del siguiente ejercicio se intenta afirmar los conocimientos de normalización con un ejemplo simplificado de una base de datos para una pequeña biblioteca.

CodLibro
Titulo
Autor
Editorial
NombreLector
FechaDev
1001
Variable compleja
Murray Spiegel
McGraw Hill
Pérez Gómez, Juan
15/04/2005
1004
Visual Basic 5
E. Petroustsos
Anaya
Ríos Terán, Ana
17/04/2005
1005
Estadística
Murray Spiegel
McGraw Hill
Roca, René
16/04/2005
1006
Oracle University
Nancy Greenberg y Priya Nathan
Oracle Corp.
García Roque, Luis
20/04/2005
1007
Clipper 5.01
Ramalho
McGraw Hill
Pérez Gómez, Juan
18/04/2005

Esta tabla no cumple el requisito de la Primera Forma Normal (1NF) de sólo tener campos atómicos, pues el nombre del lector es un campo que puede (y conviene) descomponerse en apellido paterno, apellido materno y nombres. Tal como se muestra en la siguiente tabla.

1NF
CodLibro
Titulo
Autor
Editorial
Paterno
Materno
Nombres
FechaDev
1001
Variable compleja
Murray Spiegel
McGraw Hill
Pérez
Gómez
Juan
15/04/2005
1004
Visual Basic 5
E. Petroustsos
Anaya
Ríos
Terán
Ana
17/04/2005
1005
Estadística
Murray Spiegel
McGraw Hill
Roca

René
16/04/2005
1006
OracleUniversity
NancyGreenberg
Oracle Corp.
García
Roque
Luis
20/04/2005
1006
OracleUniversity
Priya Nathan
Oracle Corp.
García
Roque
Luis
20/04/2005
1007
Clipper 5.01
Ramalho
McGraw Hill
Pérez
Gómez
Juan
18/04/2005

Como se puede ver, hay cierta redundancia característica de 1NF.

La Segunda Forma Normal (2NF) pide que no existan dependencias parciales o dicho de otra manera, todos los atributos no clave deben depender por completo de la clave primaria. Actualmente en nuestra tabla tenemos varias dependencias parciales si consideramos como atributo clave el código del libro.

Por ejemplo, el título es completamente identificado por el código del libro, pero el nombre del lector en realidad no tiene dependencia de este código, por tanto estos datos deben ser trasladados a otra tabla.
2NF
CodLibro
Titulo
Autor
Editorial
1001
Variable compleja
Murray Spiegel
McGraw Hill
1004
Visual Basic 5
E. Petroustsos
Anaya
1005
Estadística
Murray Spiegel
McGraw Hill
1006
Oracle University
NancyGreenberg
Oracle Corp.
1006
Oracle University
Priya Nathan
Oracle Corp.
1007
Clipper 5.01
Ramalho
McGraw Hill

La nueva tabla sólo contendrá datos del lector.

CodLector
Paterno
Materno
Nombres
501
Pérez
Gómez
Juan
502
Ríos
Terán
Ana
503
Roca

René
504
García
Roque
Luis

Hemos creado una tabla para contener los datos del lector y también tuvimos que crear la columna CodLector para identificar unívocamente a cada uno. Sin embargo, esta nueva disposición de la base de datos necesita que exista otra tabla para mantener la información de qué libros están prestados a qué lectores. Esta tabla se muestra a continuación:

CodLibro
CodLector
FechaDev
1001
501
15/04/2005
1004
502
17/04/2005
1005
503
16/04/2005
1006
504
20/04/2005
1007
501
18/04/2005

Para la Tercera Forma Normal (3NF) la relación debe estar en 2NF y además los atributos no clave deben ser mutuamente independientes y dependientes por completo de la clave primaria. También recordemos que dijimos que esto significa que las columnas en la tabla deben contener solamente información sobre la entidad definida por la clave primaria y, por tanto, las columnas en la tabla deben contener datos acerca de una sola cosa.
En nuestro ejemplo en 2NF, la primera tabla conserva información acerca del libro, los autores y editoriales, por lo que debemos crear nuevas tablas para satisfacer los requisitos de 3NF.

3NF
CodLibro
Titulo
1001
Variable compleja
1004
Visual Basic 5
1005
Estadística
1006
Oracle University
 1007
Clipper 5.01


CodAutor
Autor
801
Murray Spiegel
802
E. Petroustsos
803
Nancy Greenberg
804
Priya Nathan
806
Ramalho

CodEditorial
Editorial
901
McGraw Hill
902
Anaya
903
Oracle Corp.

Aunque hemos creado nuevas tablas para que cada una tenga sólo información acerca de una entidad, también hemos perdido la información acerca de qué autor ha escrito qué libro y las editoriales correspondientes, por lo que debemos crear otras tablas que relacionen cada libro con sus autores y editoriales.

CodLibro
codAutor
1001
801
1004
802
1005
801
1006
803
1006
804
1007
806

CodLibro
codEditorial
1001
901
1004
902
1005
901
1006
903
1007
901

Y el resto de las tablas no necesitan modificación.


CodLector
Paterno
Materno
Nombres
501
Pérez
Gómez
Juan
502
Ríos
Terán
Ana
503
Roca

René
504
García
Roque
Luis

CodLibro
CodLector
FechaDev
1001
501
15/04/2005
1004
502
17/04/2005
1005
503
16/04/2005
1006
504
20/04/2005
1007
501
18/04/2005


La Cuarta Forma Normal (4FN)


La cuarta forma normal (4NF) es una forma normal usada en la normalización de bases de datos. La 4NF se asegura de que las dependencias multivaluadas independientes estén correcta y eficientemente representadas en un diseño de base de datos. La 4NF es el siguiente nivel de normalización después de la forma normal de Boyce-Codd (BCNF).
Una tabla está en 4NF si y solo si esta en Tercera forma normal o en BCNF (Cualquiera de ambas) y no posee dependencias multivaluadas no triviales. La definición de la 4NF confía en la noción de una dependencia multivaluada. Una tabla con una dependencia multivaluada es una donde la existencia de dos o más relaciones independientes muchos a muchos causa redundancia; y es esta redundancia la que es suprimida por la cuarta forma normal.

Ejemplo:

Permutaciones de envíos de pizzas
Restaurante
Variedad de Pizza
Área de envío
Vincenzo's Pizza
Corteza gruesa
Springfield
Vincenzo's Pizza
Corteza gruesa
Shelbyville
Vincenzo's Pizza
Corteza fina
Springfield
Vincenzo's Pizza
Corteza fina
Shelbyville
Elite Pizza
Corteza fina
Capital City
Elite Pizza
Corteza rellena
Capital City
A1 Pizza
Corteza gruesa
Springfield
A1 Pizza
Corteza gruesa
Shelbyville
A1 Pizza
Corteza gruesa
Capital City
A1 Pizza
Corteza rellena
Springfield
A1 Pizza
Corteza rellena
Shelbyville
A1 Pizza
Corteza rellena
Capital City

Cada fila indica que un restaurante dado puede entregar una variedad dada de pizza a un área dada.
Note que debido a que la tabla tiene una clave única y ningún atributo no-clave, no viola ninguna forma normal hasta el BCNF. Pero debido a que las variedades de pizza que un restaurante ofrece son independientes de las áreas a las cuales el restaurante envía, hay redundancia en la tabla: por ejemplo, nos dicen tres veces que A1 Pizza ofrece la Corteza rellena, y si A1 Pizza comienza a producir pizzas deCorteza de queso entonces necesitaremos agregar múltiples registros, uno para cada una de las Áreas de envío de A1 Pizza. En términos formales, esto se describe como que Variedad de pizza está teniendo una dependencia multivalor en Restaurante.
Para satisfacer la 4NF, debemos poner los hechos sobre las variedades de pizza ofrecidas en una tabla diferente de los hechos sobre áreas de envío:


Variedades por restaurante
Restaurante
Variedad de pizza
Vincenzo's Pizza
Corteza gruesa
Vincenzo's Pizza
Corteza fina
Elite Pizza
Corteza fina
Elite Pizza
Corteza rellena
A1 Pizza
Corteza gruesa
A1 Pizza
Corteza rellena
Áreas de envío por restaurante
Restaurante
Área de envío
Vincenzo's Pizza
Springfield
Vincenzo's Pizza
Shelbyville
Elite Pizza
Capital City
A1 Pizza
Springfield
A1 Pizza
Shelbyville
A1 Pizza
Capital City
Ejemplo:

Considere usted la afinidad ESTUDIANTE que muestra la relación entre estudiantes, especialidades y actividades.  Suponga que los estudiantes pueden inscribirse en varias especialidades y participar en diversas actividades.  La única clave es la combinación de los atributos (SID, Especialidad, Actividad).  La estudiante 100 tiene su especialidad en Música y Contabilidad y también participa en Natación y Tenis.  El  estudiante 150 sólo tiene especialidad en Matemáticas y participa en Carrera.




¿Cuál es la relación entre SID y especialidad?  No es una dependencia funcional porque los estudiantes pueden tener distintas especialidades.  Un valor único de SID puede poseer muchos valores de Especialidad.  Esto también se aplica a la relación entre SID y Actividad.

Tal dependencia por atributos de denomina dependencia de valores múltiples.  Las dependencias de valores múltiples conducen a anomalías de modificación.  Observe la redundancia en datos de la figura.  La estudiante 100 tiene cuatros registros, cada uno de los cuales muestra una de sus especialidades junto con una de sus actividades.  Si los datos se almacenaran con menos hileras:  si hubiera sólo dos tuplas, uno para música y natación y uno para contaduría y tenis, las implicaciones serían engañosas. Parecería que la Estudiante 100 sólo nadó cuando tenía música como especialidad y jugó tenis sólo cuando tenía contaduría como especialidad.  Esa interpretación no es lógica.  Sus especialidades y sus actividades son independientes entre sí.  Para prevenir tales engañosas conclusiones se almacenan todas las combinaciones de especialidades y actividades.

Suponga que, debido a que la Estudiante 100 decide apuntarse en Esquí, se debe agregar la tupla (100, MÚSICA, ESQUÍ), como en la figura. La afinidad en este punto indica que la Estudiante 100 esquía cuando estudia música, pero no cuando tiene contaduría como especialidad.  A fin de mantener la consistencia en los datos, se debe agregar una hilera para cada uno de una de sus actividades ligadas con Esquí.  También se debe agregar la hilera) (100, CONTABILIDAD, ESQUÍ),  como en la figura.  Ésta es una anomalía de actualización:  hay que hacer demasiadas actualizaciones para realizar  un cambio en los datos.



Existe una dependencia de valores múltiples cuando una afinidad tiene al menos tres atributos, dos de los cuales poseen valores múltiples y sus valores dependen sólo del tercer atributo.  En otras palabras en la afinidad R (A, B, C) existe una dependencia de valores múltiples si A determina  valores múltiples de B, A  determina valores múltiples de especialidad, y SID determina valores múltiples de Actividad, pero  Especialidad y Actividad son independientes entre sí.

Observe otra vez la figura.  Vea cómo están escritas las dependencias de valores múltiples:  SID è èEspecialidad y SID èè Actividad.  Esto se lee "SID multidetermina Especialidad, y SID multidermina Actividad".  Esta afinidad está en BCNF (2NF porque todo es clave; 3NF porque no tiene dependencias transitivas; y BCNF porque no tiene determinantes que no son claves).  Hemos visto que posee anomalías: si un estudiante toma otra especialidad, se debe ingresar un tuple para la nueva especialidad, y juntarlo con cada una de las actividades del estudiante.  Sucede  lo mismo si un estudiante se inscribe  en una nueva actividad.  Si un estudiante deja  una especialidad se deben eliminar cada uno de los registros que contienen  tal materia.  Si participa en cuatro actividades, habrá cutro tuples que contengan la especilidad que ha dejado  y deberá borrarse cada uno.

Para evitar tales anomalías, se deben  las dependencias de valores múltiples.  Esto se hace construyendo dos afinidades, donde cada una almacena datos para solamente uno de los atributos de valores múltiples.  La afinidades resultantes no tienen  anomalías.  Ellas son ESTU-ESPECIALIDAD (SID, Especialidad) y ESTU-ACT (SID, Actividad).

A partir de estas observaciones, se define la cuarta forma normal: Una afinidad está en cuarta forma normal si está en BCNF y no tiene dependencias de valores múltiples.

Quedaria de la siguiente manera: