La normalización de bases de datos es un pilar fundamental en el diseño y mantenimiento de sistemas de información eficientes y robustos. Este proceso sistemático, que implica aplicar una serie de reglas conocidas como formas normales, nos ayuda a organizar los datos de manera que se minimice la redundancia y se asegure la integridad de la información. Si bien existen varias formas normales (1FN, 2FN, 3FN, BCNF, etc.), entender las primeras es crucial para construir una base sólida. En artículos anteriores, hemos explorado qué es la normalización y la Primera Forma Normal (1FN). Ahora, profundizaremos en la Segunda Forma Normal (2FN) y, lo más importante, cómo puedes determinar si una tabla cumple con ella.

Para comprender la 2FN, primero debemos asegurarnos de que la tabla ya cumple con la 1FN. Recordemos que una tabla está en Primera Forma Normal si no contiene grupos repetidos y todos sus atributos son atómicos (indivisibles). Una vez que este requisito básico se cumple, podemos avanzar a la 2FN.
¿Qué es la Segunda Forma Normal (2FN)?
Una tabla se considera que está en Segunda Forma Normal (2FN) si cumple con dos condiciones principales:
Debe estar en Primera Forma Normal (1FN).
Todos los atributos que no forman parte de la clave principal deben tener una dependencia funcional completa de toda la clave principal. En otras palabras, no debe existir ninguna dependencia parcial de ningún atributo no clave con respecto a ninguna parte de una clave candidata.
Esta segunda condición es el corazón de la 2FN y la distingue de la 1FN. Se centra en eliminar las dependencias parciales, las cuales ocurren cuando un atributo no clave depende solo de una *parte* de una clave candidata compuesta (una clave candidata formada por dos o más atributos).
Conceptos Clave para Entender la 2FN
Para evaluar si una tabla está en 2FN, es imprescindible dominar dos conceptos:
Clave Principal (o Primaria)
Es una o más columnas que identifican de manera única cada fila en una tabla. Si la clave principal consta de un solo atributo, entonces la tabla automáticamente no puede tener dependencias parciales sobre la clave principal (porque no hay "partes" de la clave). La 2FN es relevante principalmente cuando la clave principal es compuesta (formada por múltiples atributos).
Dependencia Funcional
Una dependencia funcional existe entre dos conjuntos de atributos, X e Y (escrito X → Y), si para cada tupla (fila) en la tabla, el valor de Y está determinado únicamente por el valor de X. Si conoces X, puedes determinar Y. Por ejemplo, en una tabla de empleados, si tenemos los atributos ID_Empleado y Nombre_Empleado, generalmente ID_Empleado → Nombre_Empleado, porque cada ID de empleado corresponde a un único nombre.
Identificando Dependencias Parciales: La Clave de la 2FN
Una dependencia parcial ocurre cuando un atributo no clave depende funcionalmente de *una parte* de una clave candidata compuesta, en lugar de depender de la clave completa. Este es el principal problema que la 2FN busca resolver. Las dependencias parciales conducen a anomalías:
Anomalías de Inserción: No puedes registrar información sobre una parte de la clave compuesta si no tienes datos para la otra parte. Por ejemplo, si la clave es (ID_Estudiante, ID_Curso) y quieres registrar un nuevo curso, no puedes hacerlo en esta tabla si aún no tienes ningún estudiante inscrito en él.
Anomalías de Actualización: Si un dato que depende parcialmente de la clave aparece varias veces (porque se repite la parte de la clave), actualizarlo requiere modificar múltiples filas. Si el nombre del profesor depende del ID_Curso en una tabla (ID_Estudiante, ID_Curso, Nombre_Profesor), y varios estudiantes toman el mismo curso, cambiar el nombre del profesor implica actualizar varias filas.
Anomalías de Eliminación: Si eliminas una fila, puedes perder información sobre la parte de la clave de la que dependía parcialmente un atributo no clave. Si eliminas al último estudiante de un curso en la tabla (ID_Estudiante, ID_Curso, Nombre_Profesor), podrías perder el nombre del profesor asociado a ese curso.
Para saber si tu tabla está en 2FN, sigue estos pasos:
Verifica que la tabla cumple con la 1FN (no hay filas duplicadas, atributos atómicos).
Identifica todas las claves candidatas de la tabla. La clave principal es una de ellas.
Si todas las claves candidatas son simples (formadas por un solo atributo), entonces la tabla automáticamente está en 2FN.
Si existen claves candidatas compuestas:
Identifica todos los atributos no clave (los que no forman parte de ninguna clave candidata).
Para cada atributo no clave, determina si depende funcionalmente de *toda* la clave principal, o solo de *una parte* de ella.
Si encuentras un atributo no clave que depende funcionalmente de *solo una parte* de la clave principal (una dependencia parcial), la tabla NO está en 2FN.
Si todos los atributos no clave dependen funcionalmente de *toda* la clave principal (o si no hay atributos no clave), y la tabla está en 1FN, entonces la tabla SÍ está en 2FN.
Ejemplo Práctico: Del 1FN al 2FN
Tomemos el ejemplo de estudiantes y cursos después de aplicar la 1FN, como se mostró en el texto proporcionado. La tabla resultante podría verse así (simplificada):
| ID_ESTUDIANTE | CURSO | RUT | NOMBRE | NACIONALIDAD |
|---|---|---|---|---|
| 1 | Matemáticas | 20286841-K | Jorge | Chile |
| 1 | Lenguaje | 20286841-K | Jorge | Chile |
| 2 | Matemáticas | 18075847-K | Brenda | Colombia |
| 3 | Historia | 17016778-3 | Luis | Argentina |
| 4 | Historia | 21616330-3 | Flor | Cuba |
| 4 | Ciencias | 21616330-3 | Flor | Cuba |
En esta tabla, después de aplicar 1FN para separar los cursos, una clave candidata obvia (y probablemente la clave principal) es la combinación de (ID_ESTUDIANTE, CURSO). Esta es una clave compuesta.
Ahora analicemos los atributos no clave: RUT, NOMBRE, y NACIONALIDAD.
¿RUT depende de (ID_ESTUDIANTE, CURSO) completo? No. El RUT de un estudiante depende únicamente de su ID_ESTUDIANTE. (ID_ESTUDIANTE → RUT). Esto es una dependencia parcial porque RUT depende solo de una parte de la clave compuesta (ID_ESTUDIANTE).
¿NOMBRE depende de (ID_ESTUDIANTE, CURSO) completo? No. El nombre de un estudiante depende únicamente de su ID_ESTUDIANTE. (ID_ESTUDIANTE → NOMBRE). Esto es otra dependencia parcial.
¿NACIONALIDAD depende de (ID_ESTUDIANTE, CURSO) completo? No. La nacionalidad de un estudiante depende únicamente de su ID_ESTUDIANTE. (ID_ESTUDIANTE → NACIONALIDAD). Otra dependencia parcial.
Dado que los atributos RUT, NOMBRE y NACIONALIDAD tienen dependencias parciales con respecto a la clave principal compuesta (ID_ESTUDIANTE, CURSO), esta tabla NO está en 2FN.
Resolviendo las Dependencias Parciales para Alcanzar la 2FN
Para llevar esta tabla a la 2FN, debemos eliminar las dependencias parciales. Esto se logra dividiendo la tabla original en tablas más pequeñas, de modo que los atributos que dependen parcialmente de la clave se muevan a una nueva tabla donde esa parte de la clave se convierta en la clave principal.
En nuestro ejemplo, los atributos RUT, NOMBRE y NACIONALIDAD dependen solo de ID_ESTUDIANTE. Por lo tanto, creamos una nueva tabla para la información del estudiante, donde ID_ESTUDIANTE es la clave principal:
Tabla: ESTUDIANTES (En 2FN)
| ID_ESTUDIANTE (PK) | RUT | NOMBRE | NACIONALIDAD |
|---|---|---|---|
| 1 | 20286841-K | Jorge | Chile |
| 2 | 18075847-K | Brenda | Colombia |
| 3 | 17016778-3 | Luis | Argentina |
| 4 | 21616330-3 | Flor | Cuba |
Ahora, ¿qué pasa con la información sobre qué estudiante toma qué curso? Esto representa una relación "muchos a muchos" entre estudiantes y cursos. Necesitamos una tabla de enlace o asociación. Los atributos que quedan de la tabla original y representan la relación son ID_ESTUDIANTE y CURSO. La clave principal de esta tabla debe ser la combinación de ambos, ya que identifica de manera única cada inscripción de un estudiante en un curso.
Tabla: ESTUDIANTES_CURSOS (En 2FN)
| ID_ESTUDIANTE (PK) | CURSO (PK) |
|---|---|
| 1 | Matemáticas |
| 1 | Lenguaje |
| 2 | Matemáticas |
| 3 | Historia |
| 4 | Historia |
| 4 | Ciencias |
En esta nueva tabla, la clave principal es (ID_ESTUDIANTE, CURSO). ¿Hay atributos no clave? No. Por lo tanto, no puede haber dependencias parciales de atributos no clave sobre la clave principal. Esta tabla está en 2FN.
El texto proporcionado también sugiere crear una tabla separada para los cursos, quizás con un ID_CURSO como clave principal, y la tabla de asociación usaría ID_ESTUDIANTE y ID_CURSO. Esto es una mejora adicional que facilita la gestión de los cursos (añadir más atributos a un curso sin afectar la tabla de asociación) y es un paso hacia la 3FN, ya que el NOMBRE_CURSO dependería solo de ID_CURSO. Sin embargo, incluso sin asignar un ID_CURSO numérico, la estructura con ESTUDIANTES y ESTUDIANTES_CURSOS (usando NOMBRE_CURSO como parte de la clave) ya cumple con la 2FN.
La transformación para alcanzar la 2FN implica descomponer la tabla original con dependencias parciales en tablas más pequeñas, donde cada atributo no clave dependa funcionalmente de la clave principal *completa* de su nueva tabla.
Comparativa Rápida: 1FN vs 2FN
| Característica | Primera Forma Normal (1FN) | Segunda Forma Normal (2FN) |
|---|---|---|
| Base | Tabla simple, sin grupos repetidos, atributos atómicos. | Debe cumplir con 1FN. |
| Enfoque Principal | Eliminar datos repetidos en columnas y asegurar atomicidad de atributos. | Eliminar dependencias parciales de atributos no clave sobre partes de claves candidatas compuestas. |
| Problemas Resueltos | Grupos repetidos, atributos multi-valor. | Anomalías de inserción, actualización y eliminación causadas por dependencias parciales. |
| Relevancia de Clave Compuesta | No es el enfoque principal, aunque la identificación de una clave es necesaria. | Crucial; la 2FN aborda problemas que surgen específicamente con claves compuestas. |
Más Allá de la 2FN: Hacia la 3FN
Una vez que una tabla está en 2FN, el siguiente paso es evaluar si cumple con la Tercera Forma Normal (3FN). La 3FN se basa en la 2FN y añade el requisito de eliminar las dependencias transitivas. Una dependencia transitiva ocurre cuando un atributo no clave depende de otro atributo no clave. Por ejemplo, si en una tabla (ID_Pedido, Titulo_Libro, Autor_Libro), Titulo_Libro → Autor_Libro, entonces Autor_Libro tiene una dependencia transitiva con ID_Pedido a través de Titulo_Libro (ID_Pedido → Titulo_Libro → Autor_Libro). La 3FN exige que todos los atributos no clave dependan directamente de la clave principal, y no indirectamente a través de otros atributos no clave.
El ejemplo proporcionado en el texto sobre separar la información del profesor de la tabla de cursos (si el Nombre_Profesor dependía del Nombre_Curso, y Nombre_Curso del ID_Curso) ilustra la eliminación de una dependencia transitiva para alcanzar la 3FN.
Preguntas Frecuentes sobre la 2FN
Aquí respondemos algunas dudas comunes sobre la Segunda Forma Normal:
¿Toda tabla con una clave principal simple (de un solo atributo) está automáticamente en 2FN? Sí. Si la clave principal consta de un solo atributo, no hay "partes" de la clave. Por lo tanto, es imposible que exista una dependencia parcial de un atributo no clave sobre una *parte* de la clave. Siempre que cumpla la 1FN, estará en 2FN.
¿Por qué es importante alcanzar la 2FN? Principalmente para reducir la redundancia de datos y evitar las anomalías de inserción, actualización y eliminación que surgen de las dependencias parciales. Esto mejora la integridad de los datos y simplifica el mantenimiento de la base de datos.
¿La 2FN es suficiente para un buen diseño de base de datos? No siempre. Si bien la 2FN elimina las dependencias parciales, aún pueden existir otros tipos de dependencias (como las transitivas) que causen problemas. Por ello, a menudo se recomienda llegar al menos hasta la 3FN.
¿Cómo identifico las dependencias funcionales y parciales en mi tabla? Esto requiere analizar la semántica de los datos y cómo se relacionan. Pregúntate: "Dado el valor de este atributo (o conjunto de atributos), ¿puedo determinar el valor de este otro atributo?". Si la respuesta es sí, existe una dependencia funcional. Si la dependencia es de un atributo no clave sobre solo una *parte* de una clave candidata compuesta, es una dependencia parcial.
¿La desnormalización rompe la 2FN? Sí, la desnormalización intencionadamente introduce redundancia (y, por lo tanto, puede violar formas normales como la 2FN o 3FN) para mejorar el rendimiento de ciertas consultas, especialmente en entornos OLAP o Data Warehouses. Sin embargo, esto se hace de forma controlada y con pleno conocimiento de las implicaciones.
Conclusión
Determinar si una tabla está en Segunda Forma Normal es un paso esencial en el proceso de normalización. Implica verificar que la tabla cumple con la 1FN y, crucialmente, analizar si existen dependencias parciales de atributos no clave sobre partes de la clave principal (en el caso de claves compuestas). Eliminar estas dependencias parciales mediante la descomposición de tablas no solo reduce la redundancia y ahorra espacio de almacenamiento, sino que también protege la base de datos contra anomalías que pueden comprometer la integridad y la consistencia de los datos.
Aunque a menudo se apunta a la 3FN, comprender y aplicar la 2FN es un hito importante que sienta las bases para un diseño de base de datos relacional más robusto y fácil de mantener. Al dominar estos conceptos, estarás mejor equipado para diseñar esquemas de bases de datos que sirvan eficazmente a tus necesidades, ya sea para aplicaciones transaccionales (OLTP) o para análisis de datos (OLAP).
Si quieres conocer otros artículos parecidos a ¿Tu Tabla Está en Segunda Forma Normal (2FN)? puedes visitar la categoría Bases de datos.

Aprende mas sobre MySQL