Pasar al contenido principal
Alexys Lozada
José Luján
Manuel Rodriguez
José Luján
Luis Avilés
Álvaro Felipe
José Luján
Beto Quiroga
Jonathan MirCha
Jonathan MirCha
Álvaro Felipe
Alexys Lozada, Álvaro Felipe, Jonathan MirCha
Beto Quiroga
Alexys Lozada
Alexys Lozada
José Luján
Álvaro Felipe
Álvaro Felipe
Jonathan MirCha
Jonathan MirCha
Alexys Lozada, José Luján
Alexys Lozada, José Luján
Alexys Lozada, José Luján
Camilo Adobe
Álvaro Felipe
José Luján
Jonathan MirCha
Álvaro Felipe
Álvaro Felipe
Beto Quiroga, Alexys Lozada
Álvaro Felipe
Juan Villalvazo
Luis Avilés
Jonathan MirCha
Jonathan MirCha
Jonathan MirCha

Normalización de Bases de Datos

Normalización de Bases de Datos

Hola gente de EDteam soy su amigo y docente digital Jonathan MirCha, en mi artículo anterior les escribí sobre el modelo entidad-relación, en esta ocasión para seguir y terminar con la serie de artículos sobre BDs quiero hablarles de la normalización de bases de datos.

El proceso de normalización de bases de datos consiste en designar y aplicar una serie de reglas a las relaciones obtenidas tras el modelo entidad-relación.

Las bases de datos relacionales se normalizan para:

  • Evitar la redundancia de los datos.
  • Disminuir problemas de actualización de los datos en las tablas.
  • Proteger la integridad de los datos.

Para que las tablas de nuestra BD estén normalizadas deben cumplir las siguientes reglas:

  • Cada tabla debe tener su nombre único.
  • No puede haber dos filas iguales.
  • No se permiten los duplicados.
  • Todos los datos en una columna deben ser del mismo tipo.

Existen 3 niveles de normalización que deben respetarse para poder decir que nuestra BDs, se encuentra NORMALIZADA, es decir, que cumple con los requisitos naturales para funcionar optimamente y no perjudicar el rendimiento por mala arquitectura.

Estas 3 reglas de Normalización se les conoce como las 3 FORMAS NORMALES.

Teoría sobre normalización te puedes encontrar en cualquier libro de bases de datos, lo que es difícil encontrar son ejemplos prácticos donde puedas entender los conceptos de las reglas de normalización. A continuación te explico las formas normales con un ejemplo real.

Para los que me conocen, saben que en Ciudad de México que es donde me encuentro, doy clases presenciales en un par de escuelas, una de ellas es el Instituto ICONOS, donde se tienen materias en común para diferentes planes de estudios, por ejemplo en el área de web se tiene una materia para enseñar bases de datos con MySQL y otra para enseñar programación backend con PHP, ambas materias se imparten tanto en la Licenciatura en Diseño Digital, como en la Maestría en Medios Virtuales, la diferencia entre los niveles de estudios, es el número de horas y la carga de contenidos.

Pensemos que tenemos dos alumnos que cursarán ambas materias: Juanito en maestría y Pepito en licenciatura, nuestro modelo de datos podría quedar de la siguiente manera:

Sin Normalizar:

ALUMNOS

alumno estudio_nivel estudio_nombre materia_1 materia_2
Juanito Maestría Medios Virtuales MySQL PHP
Pepito Licenciatura Diseño Digital MySQL PHP

 

Como podemos ver en la tabla anterior, tenemos los registros de ambos estudiantes con ambas materias asignadas, pero esto es poco funcional, imaginemos que cada estudiante tuviera más materias en su horario, eso significaría, agregarle más columnas a cada alumno, lo que no es muy óptimo.

Primera Forma Normal:

NO repetir campos en las tablas (atributos atómicos).

ALUMNOS

alumno_id alumno_nombre estudio_nivel estudio_nombre materia
1 Juanito Maestría Medios Virtuales MySQL
1 Juanito Maestría Medios Virtuales PHP
2 Pepito Licenciatura Diseño Digital MySQL
2 Pepito Licenciatura Diseño Digital PHP

 

Al aplicar la primer forma normal hemos generado un identificado para cada alumno y un registro por materia asignada, hemos duplicado información, sin embargo hemos conservado la integridad de las columnas de la información lo que es más óptimo que el modelo anterior, sin embargo podemos mejorarlo con la segunda forma normal.

Segunda Forma Normal:

Se debe aplicar la 1FN. Cada campo de la tabla debe depender de una clave única, si tuviéramos alguna columna que se repite a lo largo de todos los registros, dichos datos deberían atomizarse en una nueva tabla.

ALUMNOS

alumno_id alumno_nombre estudio_nivel estudio_nombre
1 Juanito Maestría Medios Virtuales
2 Pepito Licenciatura Diseño Digital

 

MATERIAS

materia_id alumno_id materia_nombre
1 1 MySQL
2 1 PHP
3 2 MySQL
4 2 PHP

 

Al aplicar la segunda forma normal, hemos evitado la duplicación de registros y hemos separado la información de los alumnos de la relación que guardan con las materias generando una segunda tabla, sin embargo dicha tabla puede mejorarse con la tercer forma normal o su versión mejorada la forma de Boyce-Codd.

Tercera Forma Normal:

Se debe aplicar la 1FN y 2FN. Los campos que NO son clave NO deben tener dependencias.

Forma Normal Boyce-Codd (FNBC):

Se debe aplicar la 1FN, 2FN y 3FN. Es una versión mejorada de la 3FN. Los campos que NO son clave NO deben tener dependencias. Los campos que NO dependan de la clave se deben eliminar.

ALUMNOS

alumno_id alumno_nombre estudio_id
1 Juanito 1
2 Pepito 2

 

ESTUDIOS

estudio_id estudio_nivel estudio_nombre
1 Maestría Medios Virtuales
2 Licenciatura Diseño Digital

 

MATERIAS

materia_id alumno_id materia_nombre
1 1 MySQL
2 1 PHP
3 2 MySQL
4 2 PHP

 

Con la ayuda de la tercer forma y la Boyce-Codd hemos sacado la información de los planes de estudio de la información principal de los alumnos, lo que asegura una mejor integridad de los datos, permitiendo que el número de estudios crezcan y que los estudiante puedan matricularse a más de un estudio sin tener que desordenar el modelo de datos.

Cuarta Forma Normal:

Se debe aplicar la FNBC. La 4FN aplica únicamente para relaciones M a M, y nos ayuda a eliminar la redundancia de información generada por dicho tipo de relación.

ALUMNOS

alumno_id alumno_nombre estudio_id
1 Juanito 1
2 Pepito 2

 

ESTUDIOS

estudio_id estudio_nivel estudio_nombre
1 Maestría Medios Virtuales
2 Licenciatura Diseño Digital

 

MATERIAS

materia_id materia_nombre
1 MySQL
2 PHP

 

MATERIAS X ALUMNO

mxa_id alumno_id materia_id
1 1 1
2 1 2
3 2 1
4 2 2

 

Con la cuarta forma hemos logrado separar la relación que guardan los alumnos con sus respectivas materias asignadas, separándolas en un catálogo independiente de materias, y guardando la relación entre alumnos y materias en otra tabla pivote que sólo guarde la relación entre ambas entidades con un registro único.

Quinta Forma Normal:

Se debe aplicar la 1FN, 2FN, 3FN y 4FN. Existe otro nivel de normalización que se aplica con poca frecuencia y en la mayoría de los casos no es necesario, para obtener la mejor funcionalidad de nuestra estructura de datos. Su principio sugiere:

  • La tabla original debe ser reconstruida desde las tablas resultantes en las cuales ha sido partida.
  • Los beneficios de aplicar la 5FN asegura que no se haya creado ninguna columna extraña en las tablas y que su estructura sea del tamaño justo que tiene que ser.
  • Es una buena práctica aplicar la 5FN, cuando tenemos una extensa y compleja estructura de datos, en modelos pequeños no se recomienda usar.

En síntesis la quinta forma, nos dice que en modelos muy grandes donde tenemos muchas relaciones y entidades, nos sugiere que una vez que hayamos terminado la normalización de nuestro modelo, lo revisemos una vez más en busca de posibles errores de lógica en la normalización, para efectos de nuestro ejemplo que es un modelo sencillo no aplicaremos la quinta forma normal.

Y con esto termino la serie de artículos sobre BDs:

  1. Conceptos básicos.
  2. Modelo Entidad-Relación.
  3. Normalización.

Recuerda que si quieres saber más de Bases de Datos, en EDteam tenemos los siguientes cursos para ti:

Se despide su amigo y docente digital Jonathan MirCha, sean felices, hasta siempre, nos leemos la próxima semana... 

...bye ;)

Suscríbete al blog de EDteam

Ingresa tu correo electrónico para recibir nuestro boletín semanal