La normalización es el proceso de transformar una base de datos compleja en una estructura más simple y estable mediante la división de tablas y eliminación de repeticiones. Esto minimiza errores y hace la base de datos más fácil de mantener.
1. Qué es la normalización
La normalización es el proceso mediante el cual se transforman datos
complejos a un conjunto de estructuras de datos más pequeñas, que
además de ser más simples y más estables, son más fáciles de mantener.
También se puede entender la normalización como una serie de reglas que
sirven para ayudar a los diseñadores de bases de datos a desarrollar un
esquema que minimice los problemas de lógica. Cada regla está basada en
la que le antecede. 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 conducga a errores de lógica cuando se
trataban de manipular los datos. La normalización también hace las cosas
fáciles de entender. Los seres humanos tenemos la tendencia de simplificar
las cosas al máximo. Lo hacemos con casi todo, desde los animales hasta
con los automóviles. Vemos una imagen de gran tamaño y la hacemos más
simple agrupando cosas similares juntas. Las guías que la normalización
provee crean el marco de referencia para simplificar una estructura de
datos compleja.
Otra ventaja de la normalización de base de datos es el consumo de
espacio. Una base de datos normalizada ocupa menos espacio en disco que
una no normalizada. Hay menos repetición de datos, lo que tiene como
consecuencia un mucho menor uso de espacio en disco.
El proceso de normalización tiene un nombre y una serie de reglas para
cada fase. Esto puede parecer un poco confuso al principio, pero poco a
poco se va entendiendo el proceso, así como las razones para hacerlo de
esta manera.
Grados de normalización
Existen básicamente tres niveles de normalización: Primera Forma Normal
(1NF), Segunda Forma Normal (2NF) y Tercera Forma Normal (3NF). Cada
una de estas formas tiene sus propias reglas. Cuando una base de datos se
conforma a un nivel, se considera normalizada a esa forma de
normalización. No siempre es una buena idea tener una base de datos
conformada en el nivel más alto de normalización, puede llevar a un nivel
de complejidad que pudiera ser evitado si estuviera en un nivel más bajo de
normalización.
En la tabla siguiente se describe brevemente en que consiste cada una de
las reglas, y posteriormente se explican con más detalle.
Regla Descripción
Primera Forma Normal
(1FN)
Incluye la eliminación de todos los
grupos repetidos.
Segunda Forma Normal
(2FN)
Asegura que todas las columnas que no
son llave sean completamente
dependientes de la llave primaria (PK).
2. Tercera Forma Normal
(3FN)
Elimina cualquier dependencia
transitiva. Una dependencia transitiva
es aquella en la cual las columnas que
no son llave son dependientes de otras
columnas que tampoco son llave.
Primera Forma Normal
La regla de la Primera Forma Normal establece que las columnas repetidas
deben eliminarse y colocarse en tablas separadas.
Poner la base de datos en la Primera Forma Normal resuelve el problema de
los encabezados de columna múltiples. Muy a menudo, los diseñadores de
bases de datos inexpertos harán algo similar a la tabla no normalizada. Una
y otra vez, crearán columnas que representen los mismos datos. La
normalización ayuda a clarificar la base de datos y a organizarla en partes
más pequeñas y más fáciles de entender. En lugar de tener que entender
una tabla gigantesca y monolgtica que tiene muchos diferentes aspectos,
sólo tenemos que entender los objetos pequeños y más tangibles, así como
las relaciones que guardan con otros objetos también pequeños.
Segunda Forma Normal
La regla de la Segunda Forma Normal establece que todas las dependencias
parciales se deben eliminar y separar dentro de sus propias tablas. Una
dependencia parcial es un término que describe a aquellos datos que no
dependen de la llave primaria de la tabla para identificarlos.
Una vez alcanzado el nivel de la Segunda Forma Normal, se controlan la
mayoría de los problemas de lógica. Podemos insertar un registro sin un
exceso de datos en la mayoría de las tablas.
Tercera Forma Normal
Una tabla está normalizada en esta forma si todas las columnas que no son
llave son funcionalmente dependientes por completo de la llave primaria y
no hay dependencias transitivas. Comentamos anteriormente que una
dependencia transitiva es aquella en la cual existen columnas que no son
llave que dependen de otras columnas que tampoco son llave.
Cuando las tablas están en la Tercera Forma Normal se previenen errores
de lógica cuando se insertan o borran registros. Cada columna en una tabla
está identificada de manera única por la llave primaria, y no deben haber
datos repetidos. Esto provee un esquema limpio y elegante, que es fácil de
trabajar y expandir.
3. Un dato sin normalizar no cumple con ninguna regla de normalización. Para
explicar con un ejemplo en que consiste cada una de las reglas, vamos a
considerar los datos de la siguiente tabla.
ID_ORDEN FECHA ID_CLIENTE NOM_CLIENTE ESTADO NUM_ITEM DESC_ITEM CANT PRECIO
2301 2/23/03 101 MARTI CA 3786 RED 3 35
2301 2/23/03 101 MARTI CA 4011 RAQUETA 6 65
2301 2/23/03 101 MARTI CA 9132 PAQ-3 8 4.75
2302 2/25/03 107 HERMAN WI 5794 PAQ-6 4 5.0
2303 2/27/03 110 WE-SPORTS MI 4011 RAQUETA 2 65
2303 2/27/03 110 WE-SPORTS MI 3141 FUNDA 2 10
Al examinar estos registros, podemos darnos cuenta que contienen un
grupo repetido para NUM_ITEM, DESC_ITEM, CANT y PRECIO. La 1FN
prohibe los grupos repetidos, por lo tanto tenemos que convertir a la
primera forma normal. Los pasos a seguir son:
• Tenemos que eliminar los grupos repetidos.
• Tenemos que crear una nueva tabla con la PK de la tabla base y el
grupo repetido.
Los registros quedan ahora conformados en dos tablas que llamaemos
ORDENES y ARTICULOS_ORDENES
- ORDENES
ID_ORDEN FECHA ID_CLIENTE NOM_CLIENTE ESTADO
2301 2/23/03 101 MARTI CA
2302 2/25/03 107 HERMAN WI
2303 2/27/03 110 WE-SPORTS MI
- ARTICULOS_ORDENES
ID_ORDEN NUM_ITEM DESC_ITEM CANT PRECIO
2301 3786 RED 3 35
2301 4011 RAQUETA 6 65
2301 9132 PAQ-3 8 4.75
2302 5794 PAQ-6 4 5.0
2303 4011 RAQUETA 2 65
2303 3141 FUNDA 2 10
Ahora procederemos a aplicar la segunda formal normal, es decir, tenemos
que eliminar cualquier columna no llave que no dependa de la llave primaria
de la tabla. Los pasos a seguir son:
4. • Determinar cuáles columnas que no son llave no dependen de la llave
primaria de la tabla.
• Eliminar 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.
La tabla ORDENES está en 2FN. Cualquier valor único de ID_ORDEN
determina un sólo valor para cada columna. Por lo tanto, todas las
columnas son dependientes de la llave primaria ID_ORDEN.
Por su parte, la tabla ARTICULOS_ORDENES no se encuentra en 2FN ya que
las columnas PRECIO y DESC_ITEM son dependientes de NUM_ITEM, pero
no son dependientes de ID_ORDEN. Lo que haremos a continuación es
eliminar estas columnas de la tabla ARTICULOS_ORDENES y crear una tabla
ARTICULOS con dichas columnas y la llave primaria de la que dependen.
Las tablas quedan ahora de la siguiente manera.
- ARTICULOS_ORDENES
ID_ORDEN NUM_ITEM CANT
2301 3786 3
2301 4011 6
2301 9132 8
2302 5794 4
2303 4011 2
2303 3141 2
- ARTICULOS
NUM_ITEM DESC_ITEM PRECIO
3786 RED 35
4011 RAQUETA 65
9132 PAQ-3 4.75
5794 PAQ-6 5.0
4011 RAQUETA 65
3141 FUNDA 10
La tercera forma normal nos dice que tenemos que eliminar cualquier
columna no llave que sea dependiente de otra columna no llave. Los pasos
a seguir son:
5. • Determinar las columnas que son dependientes de otra columna no
llave.
• Eliminar esas columnas de la tabla base.
• Crear una segunda tabla con esas columnas y con la columna no llave
de la cual son dependientes.
Al observar las tablas que hemos creado, nos damos cuenta que tanto la
tabla ARTICULOS, como la tabla ARTICULOS_ORDENES se encuentran en
3FN. Sin embargo la tabla ORDENES no lo está, ya que NOM_CLIENTE y
ESTADO son dependientes de ID_CLIENTE, y esta columna no es la llave
primaria.
Para normalizar esta tabla, moveremos las columnas no llave y la columna
llave de la cual dependen dentro de una nueva tabla CLIENTES. Las nuevas
tablas CLIENTES y ORDENES se muestran a continuación.
- ORDENES
ID_ORDEN FECHA ID_CLIENTE
2301 2/23/03 101
2302 2/25/03 107
2303 2/27/03 110
- CLIENTES
ID_CLIENTE NOM_CLIENTE ESTADO
101 MARTI CA
107 HERMAN WI
110 WE-SPORTS MI
6. ACTIVIDAD
En una empresa nos presenta algunos ejemplos del formato de liquidación
de nomina que utiliza para cada uno de los empleados de la compañía:
FORMATO EJEMPLO 1
Empleado: E00001 JORGE PEREZ
Cargo: C002 JEFE DE CONTABILIDAD
Fecha Inicial 01/01/2009 Fecha Final: 01/15/2009
Concepto Descripción Tipo Valor
0001
0003
0007
0008
0009
SALARIOS
HORA EXTRA DIURNAS
HORA EXTRA NOCTURNA
APORTES SALUD
APORTES PENSION
01- DEVENGADO
01- DEVENGADO
01- DEVENGADO
02- DEDUCIDO
02- DEDUCIDO
1.500.000
40.000
60.000
-80.000
-60.000
TOTAL A PAGAR 1.460.000
FORMATO EJEMPLO 2
Empleado: E00004 MARIA LOPEZ
Cargo: C008 RECEPCION
Fecha Inicial 01/01/2009 Fecha Final: 01/15/2009
Concepto Descripción Tipo Valor
0001
0008
0009
SALARIOS
APORTES SALUD
APORTES PENSION
01- DEVENGADO
02- DEDUCIDO
02- DEDUCIDO
600.000
-30.000
-20.000
TOTAL A PAGAR 550.000
FORMATO EJEMPLO 3
Empleado: E00001 JORGE PEREZ
Cargo: C002 JEFE DE CONTABILIDAD
Fecha Inicial 01/16/2009 Fecha Final: 01/31/2009
Concepto Descripción Tipo Valor
0001
0012
0008
0009
SALARIOS
BONIFICACIONES
APORTES SALUD
APORTES PENSION
01- DEVENGADO
01- DEVENGADO
02- DEDUCIDO
02- DEDUCIDO
1.500.000
500.000
-100.000
-80.000
TOTAL A PAGAR 1.920.000
7. Realice a partir de estos formatos una base de datos general y después
realice el proceso de Normalización de la misma.