martes, 23 de junio de 2009

Ejemplo de Aplicación

Ejemplo:

Considerar la siguiente estructura de datos. Tres filas de registros de longitud variable son mostrados a continuación, (uno para cada I
D_ORDEN). ¿Cuál es el dato no normalizado?


Esta tabla contiene un grupo de repetición para NUM_ITEM, DESCRIP_ITEM, CANTIDAD y PRECIO. La primera forma normal prohibe los grupos de repetición.
Remover cualquier grupo de repetición.

A contuniación aplicaremos las 3 formas normales estudiadas:




Conversión a Primera Forma Normal (1FN)

La Primera Forma Normal, o 1FN, es la más elemental de todas. Para su conversión se da mediante los siguientes pasos:
  • Verificar si la tabla se encuentra en 1FN, y una tabla está en 1FN si el valor que contiene un atributo de un registro, un campo, es único y elemental.
  • Remover los grupos de repetición o vectores de la base de datos.
  • Crear una tabla con la PK de la tabla y el grupo de repetición.
Del ejercicio anterior lo pasaremos a Primera Forma Normal:
  • Primero verificaremos si está en 1FN, pues no lo está ya que los valores de los atributos NUM_ITEM, DESCRIP_ITEM, CANTIDAD Y PRECIO no son únicos ni elementales.
  • Remover el grupo de repetición compuesto por: NUM_ITEM, DESCRIP_ITEM.
  • El PK de la tabla que queda es ID_ORDEN. Crear una nueva tabla llamada: ITEM_ORDEN con ID_ORDEN y el grupo de repetición.





Conversión a la Segunda Forma Normal

Remover cualquier columna no llave que no dependa de la llave primaria completa (llave

primaria compuesta) de la tabla.

Pasos
  • Determinar cuales columnas, que no son llave, no dependen de la llave primaria completa de la tabla.
  • Remover esas columnas de la tabla base.
  • Crear una segunda tabla con esas columnas y la(s) columna(s) de la PK de la cual dependen.
Del ejemplo aplicar SEGUNDA FORMA NORMAL

Notas
  • Si cada columna no depende de la llave primaria completa, la tabla no está en 2FN.
  • Cualquier tabla con una llave primaria de una sola columna está automáticamente en la 2FN.
Como vemos la tabla ORDEN cumple las condiciones entonces está ya en 2FN.
La tabla ITEM_ORDEN no está en la 2FN ya que PRECIO y DESCRIP_ITEM son dependientes de NUM_ITEM, pero no son dependientes de ID_ORDEN.
Para convertir la tabla a la 2FN, remover parcialmente cualquier columna dependiente. Crear una tabla ITEM con estas columnas y la columna de la PK de la que dependen.

Quedando la tabla en 2FN

Conversión a la Tercera Forma Normal

Remover cualquier columna que sea dependiente de otra columna no llave y con ella formar otra tabla.

Pasos
  • Determinar que columnas son dependientes de otra columna no llave.
  • Remover esas columnas de la tabla base.
  • Crear una segunda tabla con esas columnas, incluyendo la columna no llave de la cual son dependientes.
Ejemplo:
Veamos si la tabla ORDEN se encuentra en 3FN.

NOMBRE_CLIENTE y ESTADO son dependientes de ID_CLIENTE. Pero ID_CLIENTE no es la PK. Por tanto, la tabla ORDEN no está en 3FN.

Poniendo la tabla ORDEN a 3FN:
Movamos las 02 columnas no-llave dependientes con la columna no-llave ID_CLIENTE de la cual son dependientes, a una nueva tabla llamándola: CLIENTE.


NO OLVIDAR:
Una tabla está en 3FN si cualquier columna no-llave no es funcionalmente dependiente de otra columna no-llave.

Veamos la siguiente tabla:
Analicemos la tabla ITEM_ORDEN. ¿Está en 3FN? ¿Por qué sí o por qué no?

Observamos, que todos los atributos no-llave, son dependientes solamente de la llave. Por lo tanto, la tabla ITEM_ORDEN está en 3FN.

Veamos la otra Tabla que falta:
La tabla ITEM. ¿Está en 3FN? ¿Por qué sí o por qué no?


Notamos que todos los atributos no-llave, son dependientes de la llave solamente. Por tanto, la tabla ITEM está en 3FN.

A continuación se presentarán las tablas que surgieron después de aplicar cada una de las 3 formas nornales

1FN:
  • Orden (ID_Orden, Fecha, ID_Cliente, Nombre_Cliente, Estado)
  • Item_Orden (ID_Orden, Num_Item, Descrip_Item, Cantidad, Precio)
2 FN:
  • Orden (ID_Orden, Fecha, ID_Cliente, Nombre_Cliente, Estado)
  • Item_Orden (ID_Orden, Num_Item, Cantidad)
  • Item (Num_Item, Descrip_Item, Precio)
3 FN:
  • Orden (ID_Orden, Fecha, ID_Cliente)
  • Cliente (ID_Cliente, Nombre_Cliente, Estado)
  • Item_Orden (ID_Orden, Num_Item, Cantidad)
  • Item (Num_Item#, Descrip_Item, Precio)


0 comentarios: