Formas normales

Las formas normales permiten determinar el grado de vulnerabilidad en una tabla y detectar inconsistencias y anomalías lógicas. Cuanto más alta sea la forma normal aplicable a una tabla, menos vulnerable será a inconsistencias y anomalías.


Primera Forma Normal (1 FN)

Una tabla estará en Primera Forma Normal, si para cada atributo incluido en dicha tabla, no existe más de un valor almacenado en dicho atributo en una misma ocurrencia. Dicho de otra forma, una ocurrencia (o fila de la tabla) no podrá contener un atributo que tenga 2 o más valores para ese mismo atributo. 

Ejemplo: Una tabla que almacena la entidad de un Cliente, con los atributos ID cliente, Nombre y Teléfono. Un mismo cliente puede tener 2 números de teléfono diferentes (fijo y móvil).  


El atributo Teléfono contiene 2 valores diferentes en una misma ocurrencia. No cumple la 1 FN. Existen varias soluciones, como añadir un segundo atributo para almacenar el segundo valor, crear una tabla que relacione la tabla Cliente, con los posibles valores de dicho atributo, ... 


Segunda Forma Normal (2 FN)

Una tabla está en Segunda Forma Normal, si previamente esta en 1 FN y cada atributo de la tabla que no está en la clave, depende funcionalmente de forma completa de la clave primaria de la relación. Si una tabla está en 1 FN y su clave primaria solo tiene un atributo, entonces también esta en 2 FN.

Ejemplo: Se tiene en cuenta una tabla que almacena la entidad Trabajador, con los atributos Empleado, Habilidad y Lugar de trabajo.



La clave primaria es el conjunto {Empleado, Habilidad}. El atributo Lugar de Trabajo depende de parte de la clave primaria (depende únicamente de Empleado). Por ello, no está en 2 FN. Una solución es separar la tabla Empleado {Empleado, Habilidad}, puesto que un mismo empleado puede tener varias habilidades y otra tabla Lugar de Trabajo {Empleado, Lugar de Trabajo}.


Tercera Forma Normal (3 FN)

Una tabla esta en tercera forma normal si y solo si, esta en 2FN y ademas cada atributo que no esta en la clave primaria no depende transitivamente de la clave primaria, es decir los atributos de la relación no dependen unos de otros, dependen únicamente de la clave, para ello se eliminan los atributos que dependen transitivamente y se ponen en una nueva relación con una copia de su determinante (el atributo o atributos no clave de los que dependen).

Ejemplo: Considérese la tabla Ganador torneo, con los atributos Torneo, AñoGanador y Fecha Nacimiento del Ganador


Se observa que la clave primaria es el conjunto {Torneo, Año}. La Fecha de Nacimiento del ganador depende del ganador, puesto que con solo los atributos Torneo y Año, se necesita saber el Ganador. No está en 3 FN. La solución sería separar en 2 tablas, una sería la tabla Ganadores del Torneo {Torneo, Año, Ganador} y otra sería Fecha Nacimiento Jugador {Ganador, Fecha de Nacimiento}.


Existen más formas normales que pueden aplicarse a la normalización (3 Forma Normal de Boyce Codd, 4 Forma Normal y 5 Forma Normal) no comentadas en esta entrada, puesto que para aplicar dichas Formas Normales es necesario sacrificar consistencia en la Base de Datos