Normalización de bases de datos para GSI: 1FN, 2FN y 3FN con un ejemplo

Respuesta directa: para normalizar una base de datos en un ejercicio de GSI, identifica primero qué datos describen a cada entidad y qué atributos dependen de cada clave. La primera forma normal (1FN) exige valores individuales en cada celda; la segunda (2FN) elimina dependencias de solo una parte de una clave compuesta; la tercera (3FN) separa los datos que dependen de otro atributo no clave. Después comprueba que las relaciones siguen permitiendo reconstruir la información necesaria.

El anexo IX de la convocatoria publicada en el BOE el 22 de diciembre de 2025 incluye «modelado de datos», «el modelo lógico relacional» y «normalización» en Desarrollo de sistemas del Cuerpo de Gestión de Sistemas e Informática de la Administración del Estado, ingreso libre. Esta guía explica una técnica con un caso inventado; no reproduce un ejercicio oficial ni sustituye el programa de la convocatoria que corresponda a cada aspirante.

Qué problema resuelve la normalización

Normalizar consiste en organizar las tablas según las dependencias entre sus atributos. Su utilidad se aprecia cuando una tabla mezcla hechos distintos: datos de una persona, datos de un curso y el resultado de una matrícula. Si el nombre de un curso aparece en cada matrícula, corregirlo obliga a modificar varias filas. Si solo se guarda un docente cuando hay matrículas, quizá no puedas registrar un curso todavía sin alumnado. Y si se borra la última matrícula, podrías perder también los datos del curso.

Estos son ejemplos de anomalías de actualización, inserción y borrado. La normalización ayuda a evitarlas, aunque el diseño final también debe atender a las consultas, las restricciones y las necesidades reales de la aplicación. Para estudiar GSI, la pregunta más útil no es «¿cuántas tablas tengo?», sino «¿de qué identificador depende exactamente cada dato?».

Un caso único para entender 1FN, 2FN y 3FN

Imagina una academia ficticia en la que cada curso tiene un único docente asignado, aunque un docente puede impartir varios cursos. Cada alumno puede matricularse una sola vez en cada curso. La nota pertenece a la pareja alumno–curso. Estas reglas son supuestos del ejemplo: si cambian, también puede cambiar el diseño.

Partimos de una tabla Matriculas con columnas id_alumno, nombre_alumno, id_curso, nombre_curso, id_docente, nombre_docente y nota. La clave que distingue una matrícula es la combinación (id_alumno, id_curso). Antes de dividir nada, escribe estas dependencias:

  • id_alumno → nombre_alumno: el nombre del alumno depende de su identificador.
  • id_curso → nombre_curso, id_docente: el curso determina su nombre y su docente, según el supuesto.
  • id_docente → nombre_docente: el identificador del docente determina su nombre.
  • (id_alumno, id_curso) → nota: la nota corresponde a esa matrícula concreta.

La flecha significa «determina»: para un valor dado a la izquierda, debe existir un único valor a la derecha en los datos válidos. No basta con observar dos filas de muestra; la dependencia debe venir de las reglas del dominio.

Primera forma normal: una celda, un valor del atributo

Para trabajar en 1FN, cada posición de la tabla debe contener un valor individual del atributo correspondiente, sin listas de cursos o notas empaquetadas en una celda ni columnas repetidas como curso_1, curso_2 y curso_3. Si una fila de alumno guarda «Redes, SQL» en cursos, separa esos cursos en filas de matrícula. En el ejemplo, la tabla descrita ya puede representar cada matrícula en una fila con campos individuales.

Trampa frecuente: dividir una lista en filas no elimina por sí solo la repetición de nombre_alumno y nombre_curso. Una tabla puede cumplir 1FN y seguir teniendo problemas que examinan las siguientes formas normales.

Segunda forma normal: ningún dato depende de media clave

La 2FN parte de 1FN y exige que cada atributo no clave dependa de la clave completa, no solo de una parte de una clave candidata compuesta. Aquí la clave de Matriculas tiene dos componentes. nombre_alumno depende únicamente de id_alumno, mientras que nombre_curso, id_docente y nombre_docente dependen de id_curso. Son dependencias parciales; nota sí necesita la pareja completa.

La separación natural es:

  • Alumnos(id_alumno, nombre_alumno).
  • Cursos(id_curso, nombre_curso, id_docente, nombre_docente).
  • Matriculas(id_alumno, id_curso, nota), con clave compuesta y referencias a las otras tablas.

Ahora el nombre de un alumno se guarda una vez en Alumnos y el de un curso una vez en Cursos. En una pregunta tipo test, mira primero si la clave es compuesta: si lo es, busca atributos que dependan de uno solo de sus componentes. Una clave de una sola columna no presenta este tipo de dependencia parcial, aunque aún puede incumplir 3FN.

Tercera forma normal: evita la dependencia transitiva

La tabla Cursos anterior todavía mezcla dos hechos. Según las reglas del caso, id_curso → id_docente y id_docente → nombre_docente. Por tanto, el nombre del docente queda determinado de forma transitiva por el curso. Si un docente imparte varios cursos, su nombre se repetiría.

Para este ejemplo, el diseño en 3FN queda así:

Tabla Clave Datos propios
Alumnos id_alumno nombre_alumno
Docentes id_docente nombre_docente
Cursos id_curso nombre_curso, id_docente como referencia
Matriculas (id_alumno, id_curso) nota y referencias a alumno y curso

Esta explicación práctica de 3FN se centra en que un atributo no clave no dependa de otro atributo no clave. Su formulación formal utiliza claves candidatas y dependencias funcionales; en ejercicios más complejos conviene comprobarlas todas. No deduzcas la forma normal solo por el número de tablas o por la presencia de claves foráneas.

Cómo resolver un ejercicio de normalización en GSI

  1. Escribe las reglas del caso. ¿Puede un curso tener varios docentes? ¿Puede un alumno repetir matrícula? Una respuesta distinta cambia las claves y las dependencias.
  2. Marca la clave candidata de cada relación. En el ejemplo, la matrícula se identifica por alumno y curso. Si dudas sobre clave primaria y referencia, consulta esta guía de clave primaria y clave foránea.
  3. Enumera dependencias funcionales. Comprueba cada flecha con las reglas del dominio, no con coincidencias accidentales de los datos.
  4. Revisa 1FN, 2FN y 3FN en orden. Busca listas en una celda, dependencias de parte de una clave compuesta y dependencias transitivas entre atributos no clave.
  5. Dibuja las relaciones resultantes. Indica claves y referencias. Comprueba que puedes recuperar alumno, curso, docente y nota sin perder matrículas ni crear combinaciones falsas.
  6. Prueba una actualización. Cambia el nombre de un docente: debería bastar con modificar una fila en Docentes.

Separar tablas implica volver a relacionarlas al consultar. Si quieres practicar ese paso, el ejemplo de JOIN en SQL para GSI muestra cómo elegir condiciones de unión y cómo se comportan INNER JOIN y LEFT JOIN.

Mini ejercicio para comprobar si lo entendiste

Supón una tabla Pedidos(id_pedido, id_producto, nombre_producto, cantidad) cuya clave es (id_pedido, id_producto). Cada producto tiene un nombre estable. ¿Qué atributo depende solo de parte de la clave? Respuesta: nombre_producto, porque id_producto → nombre_producto. La cantidad depende de la pareja pedido–producto. Una descomposición razonable crea Productos(id_producto, nombre_producto) y mantiene LineasPedido(id_pedido, id_producto, cantidad). Para saber si hacen falta más tablas o reglas, habría que conocer el resto del dominio.

Convierte esta observación en tres preguntas de repaso: «¿cuál es la clave?», «¿qué atributo depende de una parte?» y «¿cómo recupero los datos tras separar?». Las respuestas justificadas valen más que memorizar el nombre de la forma normal sin mirar las dependencias.

Cómo practicarlo con tests, flashcards y audio-podcasts

Alterna formatos para comprobar si realmente puedes aplicar la idea. En un test, presenta una tabla y elige la dependencia que obliga a separarla; explica por qué las otras opciones fallan. En una flashcard, coloca una dependencia concreta delante y detrás la forma normal afectada y la corrección. En un audio-podcast, repasa verbalmente los tres pasos y pausa antes de escuchar la explicación de un caso.

PreparaGSI ofrece tests, flashcards y audio-podcasts para estudiar de forma lúdica. Puedes usar esos formatos para alternar práctica, recuerdo y repaso de normalización; después vuelve al programa oficial del BOE para situar el tema dentro de Desarrollo de sistemas. Si te encaja este modo de estudiar, visita la página de la app de PreparaGSI.

Preguntas frecuentes

¿La convocatoria exige dominar exactamente 1FN, 2FN y 3FN?

El programa del anexo IX menciona «normalización», pero no enumera formas normales concretas en ese epígrafe. Estudiar estas tres es una manera práctica de trabajar el concepto; no atribuyas al BOE un desglose que no aparece allí.

¿Una tabla con clave simple está automáticamente en 3FN?

No. Puede no tener dependencias parciales y, aun así, presentar una dependencia transitiva: por ejemplo, curso → docente → nombre del docente.

¿Normalizar significa prohibir toda repetición?

No. Los identificadores pueden repetirse como referencias en las relaciones correspondientes. El objetivo del ejercicio es ubicar cada hecho según sus dependencias y mantener la información coherente.