¿Qué es la Tercera Forma Normal (3NF)?

Imagina trabajar con una base de datos masiva y no estructurada llena de información repetida y redundante. Cada actualización o eliminación se convierte en un desastre potencial, arriesgando errores e inconsistencias. La tercera forma normal (3NF) es un método probado de normalización de bases de datos para evitar este caos. La implementación de 3NF limpia la estructura de tus datos, asegurando que sea eficiente, organizada y libre de redundancias innecesarias.

En este artículo, exploraremos cómo funciona 3NF, por qué es valioso y cómo puedes ponerlo en práctica. También compararemos 3NF con otras formas y aprenderemos cuándo usar cada una. Todos pueden beneficiarse de aprender más sobre estas estructuras, pero este conocimiento es particularmente valioso si eres un diseñador de bases de datos o científico de datos, ya que puede simplificar significativamente tu trabajo y mantener tus bases de datos fiables. Si estás interesado en el diseño de bases de datos en general, echa un vistazo a nuestro curso completo de Diseño de Bases de Datos.

Definición de la Tercera Forma Normal (3NF)

La tercera forma normal es un concepto clave de la normalización de bases de datos que elimina dependencias no deseadas. La 3NF se basa en la primera forma normal (1NF) y la segunda forma normal (2NF), lo que significa que hereda sus reglas: 1NF requiere valores atómicos (indivisibles) en cada celda, y 2NF elimina dependencias parciales en una clave primaria compuesta. La 3NF va más allá al eliminar dependencias transitivas, una situación donde los atributos que no son clave dependen indirectamente de la clave primaria.

Al centrarse en esto, la 3NF asegura que cada columna que no es clave en una tabla está directamente vinculada a la clave primaria y a nada más. En términos más prácticos, la 3NF ayuda a minimizar la redundancia y evitar anomalías al insertar, actualizar o eliminar datos.

En la década de 1970, Edgar F. Codd introdujo la 3NF para formalizar las condiciones para lograr una estructura de base de datos completamente normalizada. Una reformulación realizada por Carlo Zaniolo unos años después proporcionó una explicación más clara de la diferencia entre la 3NF “clásica” y la forma normal de Boyce-Codd más restrictiva (BCNF). Por ahora, no te preocupes demasiado por el BCNF, volveremos a él más adelante.

Entendiendo las Condiciones para la Tercera Forma Normal

Entonces, ¿qué se necesita exactamente para lograr la FNC de tercera forma? Para que una tabla califique, necesita cumplir con algunas condiciones:

  • Estar en 2FN: Esto significa que ya es atómica, sin grupos repetitivos y sin dependencias parciales en ninguna clave compuesta.

La FNC de tercera forma incluye la 2FN y la 1FN. Imagen por Autor

  • No haber dependencias transitivas: Esta regla es clave. En una tabla en FNC de tercera forma, cualquier columna que no sea clave primaria debe depender únicamente de la clave primaria, no indirectamente a través de otra columna que no sea clave.

Veamos qué significa eso en la práctica.

Descomponiendo tablas para alcanzar la 3NF

Recorramos juntos el proceso de descomposición de tablas para llegar a la 3NF. Utilizaremos algunos datos de ejemplo de los cursos de DataCamp para ilustrar cada paso.

Paso 1: Identificar dependencias transitivas

Para empezar, buscaremos cualquier atributo en una tabla que dependa indirectamente de la clave primaria. Como regla general, si algún atributo depende de algo que no sea la clave primaria, esto indica una dependencia transitoria. Eso es una señal de que tal vez sea hora de dividir tu tabla.

Echa un vistazo a las tres tablas a continuación. ¿Cuál de ellas tiene una dependencia transitiva?

Tabla 1: Curso

Course ID Course Name Difficulty
201 Fundamentos de SQL Principiante
202 Introducción a Python Principiante
203 Entendiendo la Ciencia de Datos Intermedio

Tabla 2: Instructor

Instructor ID Instructor Name Expertise
1 Sarah Johnson Ciencia de Datos
2 Tom Williams Aprendizaje Automático
3 Emily Brown Python

Tabla 3: Inscripciones

Enrollment ID Student Name Course ID Course Name
1001 Alice Smith 201 Fundamentos de SQL
1002 Bob Green 202 Introducción a Python
1003 Charlie Blue 201 Fundamentos de SQL

La respuesta es…Tabla 3!

En esta tabla, Nombre del Curso depende de ID del Curso, pero no directamente de ID de Inscripción (la clave primaria). Esta dependencia indirecta hace que Nombre del Curso sea una dependencia transitiva.

Paso 2: Separar datos en nuevas tablas

Para abordar la dependencia transitiva, dividiremos la Tabla 1 en dos tablas. Cada tabla se centrará en datos directamente dependientes.

Tabla de inscripciones revisada

Enrollment ID Student Name Course ID
1001 Alice Smith 201
1002 Bob Green 202
1003 Charlie Blue 201

Tabla de cursos

Course ID Course Name
201 SQL Fundamentals
202 Introducción a Python

Ahora, cada tabla contiene solo información que depende directamente de su clave primaria: ID de Curso es ahora la clave primaria para Nombre del Curso en la tabla Cursos, y ID de Inscripción es la clave primaria en la tabla Inscripciones.

Con esta descomposición, las tablas ahora cumplen con los requisitos de la 3NF, eliminando la redundancia y asegurando que cada tabla almacene solo información directamente relevante.

Si deseas poner en práctica y crear tus propias bases de datos, echa un vistazo a nuestro curso Creación de Bases de Datos PostgreSQL. Si tienes un nivel más avanzado, podrías probar Introducción a la Modelización de Datos en Snowflake, que abarca ideas como la modelización entidad-relación y dimensional.

Beneficios y Limitaciones de Usar la Tercera Forma Normal

Entonces, ¿por qué pasar por todo este esfuerzo para alcanzar la 3NF? Aquí están las principales ventajas:

  • Mejora de la integridad de datos: Al eliminar dependencias transitivas, la 3NF ayuda a garantizar que las actualizaciones y eliminaciones no conduzcan a datos conflictivos u obsoletos en las tablas.
  • Reducción de la redundancia: Menos redundancia significa que su base de datos es más fácil de mantener y se reduce el uso de almacenamiento.
  • Mantenimiento de datos más sencillo: Mantener información similar en tablas dedicadas facilita la actualización de registros sin tener que rastrear entradas redundantes.

Dicho esto, si bien las estructuras en 3NF admiten la precisión de los datos, también pueden llevar a datos más segmentados, a veces haciendo que las consultas complejas sean más lentas debido a las uniones de tablas adicionales. En casos donde la necesidad de velocidad prevalece sobre la necesidad de normalización, BCNF o 4NF pueden ser opciones más prácticas.

Comparación: Primer, Segundo, Tercer y Cuarto Forma Normal

Echemos un vistazo a las diferencias entre formas.

Tabla de comparación: primera, segunda y tercera forma normal

Aquí tienes una tabla de comparación para ayudarte a entender los requisitos de 1NF, 2NF y 3NF.

Feature 1NF 2NF 3NF
Datos atómicos
No dependencias parciales
No dependencias transitivas

Tercera forma normal vs. Forma Normal de Boyce-Codd (BCNF)

BCNF es una forma “más estricta” de 3NF que elimina aún más anomalías que surgen con claves candidatas superpuestas. Puede ser especialmente útil en casos complejos donde 3NF por sí sola no elimina completamente las dependencias. BCNF se aplica cuando un atributo no primo depende de un atributo que forma parte de una clave candidata compuesta. Sé que suena complejo, así que vamos a explicarlo con un ejemplo.

Estructura actual (en 3NF)

Después de la descomposición para lograr 3NF, teníamos estas dos tablas:

Tabla de inscripciones

Enrollment ID Student Name Course ID
1001 Alice Smith 201
1002 Bob Green 202
1003 Charlie Blue 201

Tabla de cursos

Course ID Course Name
201 Fundamentos de SQL
202 Introducción a Python

En esta estructura, cada tabla está en 3NF sin dependencias transitivas, y los datos están normalizados adecuadamente.

Introducción de un nuevo requisito

Ahora, agreguemos un nuevo atributo a Cursos: el Aula en la que se imparte cada curso. Este nuevo atributo podría resultar en un escenario que requiera BCNF.

Tabla de cursos actualizada (3NF)

Course ID Course Name Classroom
201 Fundamentos de SQL Sala 101
202 Introducción a Python Sala 102
203 Comprensión de la ciencia de datos Sala 101

Aquí, ID del Curso sigue siendo la clave primaria, y todos los demás atributos dependen directamente de él. Pero supongamos que hay una nueva regla que establece que cada aula solo puede contener una materia a la vez. También supongamos que el Nombre del CursoConceptos Básicos de SQL” podría ofrecerse bajo diferentes IDs de Curso (como 201, 204, etc.), si se programaran en diferentes horarios. En ese caso, cada oferta de “Conceptos Básicos de SQL” seguiría teniendo lugar en “Aula 101”, independientemente del ID del Curso específico. Como resultado, el Nombre del Curso también determina de forma única la Aula.

Esto significa que ahora tenemos dos claves candidatas:

  1. ID del Curso
  2. Nombre del Curso

Con ambas claves candidatas, ahora tenemos un problema que la 3NF no aborda: Aula depende de Nombre del Curso en lugar de solo ID del Curso.

Aplicando BCNF

Para eliminar este problema de dependencia, necesitaremos descomponer aún más la tabla de Cursos en dos tablas separadas que se alineen mejor con la BCNF:

  1. Una nueva tabla de Cursos, que solo incluye el ID del Curso y Nombre del Curso.
  2. Una tabla CourseDetails, que almacena la Nombre del Curso y la asociación del Aula.

Así es cómo se ve esto:

Tabla de cursos revisada (BCNF)

Tabla de detalles del curso (BCNF)

Course Name Classroom
Fundamentos de SQL Salón 101
Introducción a Python Salón 102
Comprensión de la ciencia de datos Salón 101

Con esta nueva estructura, cada tabla satisface las condiciones de BCNF:

  • En la tabla de Cursos, el ID del Curso es la clave primaria, y todos los atributos dependen únicamente de él.
  • En la tabla CourseDetails, Course Name es la clave principal, y Classroom depende solo de Course Name.

Esta configuración elimina cualquier problema de dependencia causado por claves candidatas superpuestas, asegurando una estructura estrictamente normalizada.

Conclusión

La tercera forma normal es una herramienta valiosa para los diseñadores de bases de datos que buscan mantener los datos limpios, consistentes y libres de dependencias problemáticas. Con la 3NF, la integridad de los datos se ve mejorada, lo que facilita la gestión y reduce la redundancia. Recuerda que, si bien la 3NF funciona bien en la mayoría de las situaciones, bases de datos más complejas podrían beneficiarse de formas adicionales como BCNF o 4NF.

Si encontraste útil este artículo, considera dar el siguiente paso obteniendo nuestra Certificación de Asociado en SQL. ¡Es una excelente manera de validar tus habilidades en SQL y gestión de bases de datos, y demostrar tu experiencia a posibles empleadores!

Source:
https://www.datacamp.com/tutorial/third-normal-form