- 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.
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
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 Curso “Conceptos 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:
- ID del Curso
- 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:
- Una nueva tabla de Cursos, que solo incluye el ID del Curso y Nombre del Curso.
- 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 |
- 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!