Segunda Forma Normal en Base de Datos

 ¿Qué es la Segunda Forma Normal?

  • Cree tablas independientes para conjuntos de valores que se apliquen a varios registros.
  • Relacione estas tablas con una clave externa.

Los registros no deben depender de nada que no sea una clave principal de una tabla, una clave compuesta si es necesario. Por ejemplo, considere la dirección de un cliente en un sistema de contabilidad. La dirección se necesita en la tabla Clientes, pero también en las tablas Pedidos, Envíos, Facturas, Cuentas por cobrar y Colecciones. En lugar de almacenar la dirección de un cliente como una entrada independiente en cada una de estas tablas, almacénela en un lugar, ya sea en la tabla Clientes o en una tabla Direcciones independiente.


Para que una tabla pueda cumplir con la segunda forma normal es requisito indispensable que cumpla con la primera forma normal, y además que:

  • Cualquier campo no-llave (aquellos campos que no forman parte de las llaves) dependa de toda la clave primara (y de las candidatas) en vez de solo de una parte de ella.

Esto significa que es necesario revisar cualquier campo -que no forme parte de una llave candidata (llámese llave primaria o llaves secundarias). De esta manera se podrá asegurar que no hay campos que estén «fuera de lugar» ya que cualquier campo hablará sobre todo el concepto que se quiere guardar en la tabla y no es un campo que debe estar en otra tabla.

Ejemplo de materias cursadas en una escuela

Considerando la siguiente tabla de materias cursadas por cada alumno en una escuela se podría tener el siguiente modelo de tabla

  • Matricula
  • ClaveDeMateria
  • NombreDeLaMateria
  • Calificación
  • NombreDelAlumno

Si asumimos que ya cumple con la 1FN y que la llave primaria es Matrícula + Clave de materia (y que no hay otras llaves candidatas) se debe hacer un análisis de los demás campos llave para ver si dependen de toda la llave o solo de parte de ella

  • ¿El NombreDeLaMateria depende de toda la llave primaria? Es decir, ¿es un campo que habla de la Matrícula (del alumno) o de ClaveDeMateria (solo de la materia)?. En este caso NombreDeLaMateria depende solo de parte de la llave primaria (solo es un campo relacionado con la materia, no con la combincación de Materia+Alumno), por tanto este campo no cumple con la segunda forma normal.
  • Calificación es un valor que está asociado al alumno (Matrícula), pero es la calificación también de dicho alumno en una materia en particular (ClaveDeMateria), por lo que podemos concluir que este campo si cumple con la segunda forma normal.
  • NombreDelAlumno, por otro lado, solo es un campo que «habla» del alumno, no de las materias que cursa cada alumno, ya que es un campo que depende de la Matrícula (el nombre de la persona no cambia nunca, independientemente de la materia que curse dicho alumno), por lo que es un campo que no cumple con la segunda forma normal. En este caso, el campo de Nombre del alumno tendrá que estar en aquella tabla donde Matrícula sea llave primaria (es decir, en una eventual tabla de Alumnos), lo cual tiene mucho sentido.

Encontramos por tanto  que NombreDeLaMateria y NombreDelAlumno no dependen de toda la llave primaria (y candidatas) por lo que toda la tabla no cumple con la segunda forma normal y es necesario cambiar el modelo. En este caso el nombre de la materia tendrá que ir en la tabla del catálogo de las materias, y el nombre del alumno iría en la tabla de los alumnos inscritos.

Tabla Alumnos:

  • Matrícula
  • Nombre de alumno

Materias cursadas con

  • Clave de Materia
  • Aula

Tabla intermedia (transitiva) con

  • Matrícula
  • Clave de Materia
  • Calificación final









Comentarios