59

Qué es y cómo normalizar una base de datos sin morir en el intento

9726Puntos

hace 4 años

Curso Práctico de SQL
Curso Práctico de SQL

Curso Práctico de SQL

SQL es el lenguaje por excelencia para el manejo de datos estructurados. Incrementa tus habilidades en él con ejercicios de álgebra relacional, subconsultas y window functions. Aprende a hacer consultas más eficientes y complejas con este lenguaje.

Actualizado: Julio 2021

Nuestros estudiantes muchas veces se preguntan ¿Qué es la normalización de una base datos? ¿Cómo puedo entender este concepto? ¿Cuales son las formas normales o reglas de normalización?

Pues bien, en este sencillo y muy explicativo artículo resolvemos tus dudas sobre la normalización y te explicamos para qué sirve, pues la verdad es más sencillo de lo que parece.

Qué es la normalización de una base de datos

La normalización de una base de datos es la aplicación de una serie de reglas para evitar a futuro realizar queries o consultas innecesariamente complejas. En otras palabras están enfocadas en eliminar redundancias e inconsistencias de dependencia en el diseño de las tablas que creamos para organizar las bases de datos.

Banners blospot_base de datos.png

Por qué es importante la normalización de una base de datos

Dicho esto, ¿por qué es importante que hagas el acceso a los datos mediante la normalización? Pues bien, las bases de datos se normalizan para que tu puedas:

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

Para poder decir que nuestra base de datos está normalizada deben respetarse 3 niveles de normalización. Te los contamos a continuación.

Tipos de normalización: conoce las 3 Formas Normales y para qué sirven

La primera Forma Normal (1FN)

Hay que seguir una serie de pasos para normalizar, en otras palabras, para decir que nuestra tabla está en primera forma normal. Estos son:

  1. Eliminar los grupos repetitivos de la tablas individuales
  2. Crear una tabla separada por cada grupo de datos relacionados
  3. Identificar cada grupo de datos relacionados con una clave primaria

Para identificar si lo hemos hecho de manera correcta debemos considerar los siguientes aspectos:

  • Todos los atributos son atómicos. Un atributo es atómico si los elementos del dominio son indivisibles, mínimos.
  • La tabla contiene una clave primaria única.
  • La clave primaria no contiene atributos nulos
  • No debe existir variación en el número de columnas
  • Los campos no clave deben identificarse por la clave (Dependencia Funcional)
  • Debe existir una independencia del orden tanto de las filas como de las columnas, es decir, si los datos cambian de orden no deben cambiar sus significados.
  • Una tabla no puede tener múltiples valores en cada columna
  • Los datos son atómicos (a cada valor de X le pertenece un valor de Y y viceversa)

La segunda Forma Normal (2FN)

Debemos seguir los siguientes pasos:

  1. Crear tablas separadas para aquellos grupos de datos que se aplican a varios registros
  2. Relacionar estas tablas mediante una clave externa

Sabremos si nuestra base de datos tiene en la segunda forma normal si esta previamente cumple con las normas de la Primera forma Normal y si sus atributos no principales dependen de forma completa de la clave principal.

En otras palabras, que no existen dependencias parciales.

La tercera Forma Normal (3FN)

Debemos considerar los siguientes puntos:

  1. Eliminar aquellos campos que no dependan de la clave
  2. Ninguna columna puede depender de una columna que no tenga una clave
  3. No puede haber datos derivados

Podemos decir que nuestra tabla se encuentra en tercera normal si previamente estaba en segunda forma normal y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave.

En otras palabras, todo atributo no primo es implicado por la clave primaria en una secuencia no transitiva.

La normalización de la base de datos explicada con ejemplos

Para entender mucho mejor todo esto revisemos la siguiente tabla:

https://static.platzi.com/media/user_upload/Screen%20Shot%202017-10-25%20at%2016.38.16-b39c941b-3173-4434-8f5e-434974acfc90.jpg

Si nos damos cuenta esta tabla no cumple con el requisito que dice que todos los atributos deben ser atómicos, es decir que debemos descomponerlo en su mínima expresión.

Siguiendo los aspectos a considerar podríamos decir que nuestra tabla inicial se transformaría a:

https://static.platzi.com/media/user_upload/Screen%20Shot%202017-10-26%20at%2009.48.11-d4bc3e5e-aefc-499b-8c64-7cf1d77c0b4a.jpg

Con esto podríamos decir que nuestra tabla cumple con la primera Forma Normal (1FN). Ahora, si nos fijamos esta aun no cumple con los requisitos que pide la segunda Forma Normal (2FN).

Podríamos crear tablas separadas para cursos y para profesores y cada una de estas tendría su clave primaria y estarían relacionadas por una clave externa (Foreign Key).

Tabla de Cursos:

https://static.platzi.com/media/user_upload/Screen%20Shot%202017-10-25%20at%2017.05.50-a0d06cf0-b980-405e-9651-92a3135ffff0.jpg

Tabla Autores:

https://static.platzi.com/media/user_upload/Screen%20Shot%202017-10-25%20at%2017.16.33-a736dba8-3a4e-44f6-8961-1756d8514c07.jpg

Ahora nuestra tabla está en segunda Forma Normal (2FN).

Si detallamos nuestra tabla de cursos aún podríamos simplificarla, para esto podríamos extraer la columna de materiales y crear una nueva tabla para esto.

https://static.platzi.com/media/user_upload/Screen%20Shot%202017-10-26%20at%2010.12.59-e1de6e23-e0be-48ea-aa61-e5b0938d9a55.jpg

Con esto, nuestra tabla cumpliría con los requisitos de la tercera Forma Normal (3FN) y estaría lista 😃

Conclusión

Como ves, el conjunto de datos relacionados anteriormente permite que tengas una base de datos normalizada.

Si deseas aprender más sobre bases de datos y su normalización te recomiendo ampliamente tomar estos cursos. ¡Las primeras 5 clases están abiertas!

Nos vemos allí 😎

Curso Práctico de SQL
Curso Práctico de SQL

Curso Práctico de SQL

SQL es el lenguaje por excelencia para el manejo de datos estructurados. Incrementa tus habilidades en él con ejercicios de álgebra relacional, subconsultas y window functions. Aprende a hacer consultas más eficientes y complejas con este lenguaje.
Carlos
Carlos
sampol.90

9726Puntos

hace 4 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
10
4090Puntos

Santa cachucha batman. es el mejor articulo que he leído en toda mi vida!!!

4
9Puntos

¿Por qué DAVID se cambió el nombre a MARIO???

1
9Puntos
2 años

miren la tabla de autores :v

1
un mes

Si, vi ese detalle, quiza copypasteerror… Me encantaron estas notas!!! … Hola a todos. Gracias por las excelentes notas al profesor.
No se si estoy equivocada, tengo curiosidad si tiene sentido, pero creo que en la descomposición de la tabla original, al ser creada la tabla: Autores, ésta no necesita llevar el campo fecha de creación. Esto haría una pendencia innecesaria con la tabla cursos, además ambas ya se pueden relacionar por la llave foránea idAutor.

3
1058Puntos

Es un buen articulo.
Concuerdo con milmend
La tabla Materiales debería utilizarse para n cursos.
Saludos.

1

Un post como la gente, conciso y al pie. Se comprendío perfectamente la tarea necesaria para las normas en menos de 2 minutos de lectura.
Consulta, puede ser que en el último ejemplo quedó mal la tabla de cursos?

1
1668Puntos
4 años

La última tabla muestra lo que contendrías en la tabla materias.

1
9726Puntos
4 años

Hola! No, esa ultima tabla es la tabla de materiales 😃
Saludos!!

0
4 años

Ah si puse mal cursos era materiales, ahí dice nombre material? es nombre_material?

0
9726Puntos
4 años

Si, asi es nombre_material. Fue un Typo

0
156Puntos
4 años

La tabla Materiales aún podría ser susceptible de una mejora, esto es, puede extraerse la columna del curso y crear una nueva tabla con dos llaves: material - curso, de forma que un material pueda ser utilizado en diferentes cursos. Saludos.

0
9726Puntos
4 años

Eso lo he implementado en las ejemplos. Si te fijas en la última imagen puedes verlo 😃

1
1668Puntos

Buen Post!. ¿Y el resto de formas normales?

1
9726Puntos
4 años

Me enfoqué en las primeras 3.

Quieres que haga otro post explicando el resto ?

1
7657Puntos

Es buena practica poner el nombre de los atributos de la tabla en Ingles o Español?

2
9726Puntos
4 años

Es mejor ponerlos en ingles, garantiza que cualquiera pueda entenderlos.
Los puse en español por fines prácticos.

1

no es ta nada mal, es muy bueno y atendible, pero si pudieras poner mas ejemplos quedaría perfecto

1
3Puntos

realmente en necesario crear una tabla para los materiales del curso, es decir, crear una tabla que puede tener valores desde 1 hasta n, cada uno ocupando una fila, en lugar de dejarlo como un atributo univaluado?
Perdon soy nuevo en esto y quiero aprender

1
19Puntos

Muchas gracias Carlos. Muy interesante tu articulo.

1

Lei como seis horas otras publicaciones y no entendí nada, luego encontré esto y entendí en 2 minutos, muchas gracias y muy bien explicado.

1
5390Puntos

como es que no lo vi mas antes
muy bueno el articulo 😃

1
231Puntos

Excelente

0
1151Puntos
un año

Long live ParrotOS!

1
12452Puntos

Excelente artículo ❤️

1
2226Puntos

Pensar que la respuesta era tan sencilla. Gracias.

1

Hola. Gracias por las excelentes notas.
No se si estoy equivocada, tengo curiosidad si tiene sentido, pero creo que en la descomposición de la tabla original, al ser creada la tabla: Autores, ésta no necesita llevar el campo fecha de creación. Esto haría una pendencia innecesaria con la tabla cursos, además ambas ya se pueden relacionar por la llave foránea idAutor.

0
1977Puntos

Demasiado abstracto para mi gusto. Mi abuela no lo podría entender. Crei que era to que fingiendo no saber nada estaba mi comprensión mal. Pero al leer en voz alta a mis compañeros de oficina. quedaron sin entener. Paso hacer el grafico…

0
9726Puntos
4 años

Gracias por tu comentario, pronto estaré subiendo unos ejemplos y simplificando el texto para que sea entendible para todos.
Saludos!

0
9726Puntos
4 años

He subido unos ejemplos, comentame si ahora es mas comprensible 😃

0

Estaría

1
4 años

bueno si anexas un ejemplo de una bd básica normalizada 😛

1
9726Puntos
4 años

Entre hoy y mañana lo subo :p

0
9726Puntos
4 años

Ya puedes ver los ejemplos 😃

0
4955Puntos

Genial aporte, muy claro y directo al grano sin tantos terminos que más confunden en vez de enseñar, felicitaciones!!