Lituus

Normalización de Bases de Datos

Imagen de normalización de base de datos creada por Generative AI

En este artículo exploraremos qué es la normalización de bases de datos, una práctica fundamental tanto para el diseño de bases de datos operacionales como para la preparación y modelado de datos en Data Warehouse. Discutiremos por qué es importante normalizar los datos, cuáles son las formas normales y presentaremos un ejemplo de la tercera forma normal aplicada en el sector de Educación.

¿Qué es la Normalización de Base de Datos?

La normalización es un proceso clave para diseñar bases de datos relacionales tengan estas fines de OLTP u OLAP. Usualmente consiste en aplicar una serie de reglas (formas normales) para convertir un modelo entidad-relación a un modelo relacional.

Analogía

Imagina que estás creando una lista de invitados para una ceremonia. Cada persona tiene información como nombre, teléfono y acompañante. Algunas personas se conocen entre sí y otras tienen opciones alimenticias diferentes (veganos, carnívoros, etc.). Como buen anfitrión, esperas organizar a tus invitados de la mejor forma posible.

La normalización en bases de datos equivaldría a organizar la lista de invitados de manera que evites la duplicación innecesaria de información y garantices que los datos (tus comensales) estén bien estructurados.

¿Por qué es importante Normalizar las Bases de datos?

La normalización tiene como objetivo optimizar los datos y brindar integridad, sus principales beneficios son:

  1. Reducción de la redundancia de los datos. Se logra al dividir tablas grandes en tablas más pequeñas y relacionadas.
  2. Mejora rendimiento de las consultas SQL para el acceso de los datos.
  3. Velar por la integridad de los datos (referencia de integridad).
  4. Esquemas flexibles y mantenimiento más sencillo. Podemos agregar, eliminar o modificar datos sin afectar otras partes de la base de datos de manera significativa.
  5. Facilitar operaciones concurrentes.
  6. Optimización de almacenamiento e indexación. Al contar con tablas no redundantes se ahorra espacio y además facilita la indexación al reducir la cardinalidad de los datos que deben ser indexados, mejorando aún más el rendimiento de las consultas.

¿Cómo Normalizar Bases de Datos?

El proceso consta de etapas secuenciales llamadas formas normales (FN), se parte en la primera forma normal (1FN) pudiendo llegar hasta la sexta (6FN), aunque tradicionalmente se llega hasta la tercera forma normal.

El concepto de formas normales fue propuesto por Edgar F. Codd, quien presentó sus ideas en un artículo titulado :"A Relational Model of Data for Large Shared Data Banks" publicado en 1970. Las formas normales han evolucionado a lo largo del tiempo, en esta artículo explicaremos las primeras 3 formas normales a través de un ejemplo sencillo.

Ejemplo de Normalización de Base de Datos

Primera Forma Normal 1FN

Una tabla se encuentra en primera forma normal si y sólo si:

  1. No existen filas repetidas.
  2. Todos los atributos son atómicos.
  3. Un atributo es atómico si los elementos del dominio son simples e indivisibles.

Consideremos el siguiente ejemplo de estudiantes de un colegio, ¿la tabla cumple las reglas de primera forma normal (1FN)?

ID_ESTUDIANTE RUT NOMBRE CURSO NACIONALIDAD
1 20286841-K Jorge Matemáticas, Lenguaje Chile
2 18075847-K Brenda Matemáticas Colombia
3 17016778-3 Luis Historia Argentina
4 21616330-3 Flor Historia, Ciencias Cuba
Tabla plana con datos de estudiantes sin normalizar

A continuación se destaca qué oportunidades de mejoras existen para llegar a la 1FN:

ID_ESTUDIANTE RUT NOMBRE CURSO NACIONALIDAD
1 20286841-K Jorge Matemáticas, Lenguaje Chile
2 18075847-K Brenda Matemáticas Colombia
3 17016778-3 Luis Historia Argentina
4 21616330-3 Flor Historia, Ciencias Cuba
Tabla cuyos campos se pueden normalizar

Las celdas en amarillo cuentan con datos divisibles (no atómicos), una alternativa de solución es crear nuevas filas donde los cursos sean simples e indivisibles. Como resultado de aplicar la 1FN tenemos:

ID_ESTUDIANTE RUT NOMBRE CURSO NACIONALIDAD
1 20286841-K Jorge Matemáticas Chile
1 20286841-K Jorge Lenguaje Chile
2 18075847-K Brenda Matemáticas Colombia
3 17016778-3 Luis Historia Argentina
4 21616330-3 Flor Historia Cuba
4 21616330-3 Flor Ciencias Cuba
Tabla después de haber aplicado la primera forma normal

Segunda Forma Normal 2FN

Se centra en la eliminación de dependencias parciales en una tabla. Una tabla está en 2FN si cumple con dos condiciones:

  1. Cumple con las reglas de 1FN.
  2. Todos los atributos que no forman parte de la Clave Principal tienen dependencia funcional completa de ella. Dicho de otra forma: No debe haber dependencias parciales de ninguna clave candidata en ninguna columna no clave.

Las reglas mencionadas nos invitan a definir:

¿Qué es una clave primaria o principal? ¿Qué es una dependencia funcional?

Continuando con el ejemplo, es muy conveniente separar la informacion de los cursos y estudiantes en nuevas tablas en la base de datos. Los cursos pueden tener su propia información clave en el futuro lo que nos brinda flexibilidad para extenderla (agregar campos), logrando así eliminar la dependencia parcial de los cursos con los estudiantes.

Al realizar la segunda forma normal obtendremos tres tablas: Estudiantes, Cursos y una tabla de Referencia para la dependencia que tienen estos atributos

ID_ESTUDIANTE RUT NOMBRE NACIONALIDAD
1 20286841-K Jorge Chile
2 18075847-K Brenda Colombia
3 17016778-3 Luis Argentina
4 21616330-3 Flor Cuba
Tabla de estudiantes después de haber aplicado la segunda forma normal
ID_CURSO NOMBRE_CURSO
1 Matemáticas
2 Lenguaje
3 Historia
4 Ciencias
Tabla de cursos después de haber aplicado la segunda forma normal
ID_ESTUDIANTE ID_CURSO
1 1
1 2
2 1
3 3
4 3
4 4
Tabla de asociación de cursos con estudiantes después de haber aplicado la segunda forma normal

Tercera Forma Normal 3FN

La tercera forma normal va un paso más alla asegurando que una o más tablas:

  1. Cumplan con las reglas de 2FN.
  2. No existan dependencias transitivas.

La dependencia transitiva ocurre cuando una columna depende de otra que a su vez no es una clave principal. Consideremos los siguientes campos para una librería (BD): ID_PEDIDO, TITULO_LIBRO, AUTOR_LIBRO, y EDITORIAL_LIBRO. El campo, ID_PEDIDO depende directamente de TITULO_LIBRO, dado que cada pedido está asociado a un título de libro específico. Sin embargo, tanto AUTOR_LIBRO como EDITORIAL_LIBRO dependen indirectamente de ID_Pedido a través de su dependencia con TITULO_LIBRO, puesto que cada libro (identificado por su título) está vinculado a un único autor y a una única editorial. Esta cadena de dependencias muestra que AUTOR_LIBRO y EDITORIAL_LIBRO tienen una dependencia transitiva respecto a ID_PEDIDO a través de TITULO_LIBRO.

Ejemplo de 3FN para las entidades Estudiante, Curso y Profesor

Retomando nuestro ejemplo, consideremos las entidades Curso y Profesor antes de aplicar 3FN. Originalmente, si tuviéramos una estructura donde el detalle del curso incluyera tanto el nombre del curso como el del profesor, estaríamos ante una dependencia transitiva. En este escenario, el ID_CURSO sería nuestra clave primaria en la tabla Cursos con campos adicionales como NOMBRE_CURSO y NOMBRE_PROFESOR.

Por lo tanto, NOMBRE_PROFESOR tiene una dependencia transitiva con ID_CURSO a través de NOMBRE_CURSO. Cada curso, identificado por ID_CURSO, está asignado a un único profesor y el profesor depende del curso que enseña. La 3FN propone separar a los profesores en una tabla adicional vinculada a cursos, a través de un ID_PROFESOR, eliminando así la dependencia transitiva.

ID_CURSO NOMBRE_CURSO RUT_PROFESOR NOMBRE_PROFESOR
1 Matemáticas 12314658-1 Sam
2 Lenguaje 12175487-8 Claudia
3 Historia 11871128-9 Nicanor
4 Ciencias 9126316-5 Tamara
Tabla cursos con datos de profesores sin normalizar

A continuación se realiza el proceso de normalización quedando:

ID_PROFESOR RUT NOMBRE
1 12314658-1 Sam
2 12175487-8 Claudia
3 9126316-5 Tamara
4 11871128-9 Nicanor
Tabla profesores después de haber aplicado la tercera forma normal
ID_CURSO NOMBRE ID_PROFESOR
1 Matemáticas 1
2 Lenguaje 2
3 Historia 4
4 Ciencias 3
Tabla cursos después de haber aplicado la tercera forma normal

A modo resumen, el siguiente diagrama sintetiza el proceso de normalización para el ejemplo del colegio:

Ejemplo de Normalización de Base de Datos aplicada a la Educación
Resultado de aplicar 3 formas normales

Conclusiones de Normalizar Bases de Datos

Las formas normales en bases de datos surgieron como un conjunto de reglas y principios para organizar la información de manera eficiente y evitar redundancias. Habitualmente se suguiere aplicar hasta la 3FN porque balancea bien las cosas entre no ser demasiado complicado y mantener la información de forma clara, aunque otras formas normales como la Sexta (6FN) y la DKFN pueden ser útiles para situaciones más específicas.

La normalización no solo se aplica a la hora de crear software, también es utilizada para crear Data Warehouses bajo el paradigma de Hub and Spoke propuesto por Bill Inmon. El nombre de esta arquitectura se conoce como Corporate Information Factory. También existen escenarios donde la opción más óptima es una Desnormalización, como se explica en este artículo sobre Data Warehouses Dimensionales

Difusión

Nota: Si crees que este contenido puede ser útil para otras personas no dudes en compartirlo. Además te invitamos a seguirnos en Linkedin, Twitter, Facebook, Instagram y Youtube. Mientras en el Blog liberamos contenido más extenso, en las RRSS publicamos semanalmente tips relacionados con Data Warehouse, BI, Data Science y Visualización de Datos que es justamente lo que más nos apasiona hacer en Lituus.

Articulos Recomendados

Facebook Instagram LinkedIn Twitter Whatsapp