BBDD.Normalización.

Ismael Royano Gómez
Enredando con Bases de Datos
7 min readJul 5, 2019

Normalización de Bases de Datos.

El proceso de Normalización de bases de datos tiene como
objetivo optimizar técnicamente el diseño de las mismas.
Así, es posible minimizar redundancias y evitar anomalías
relacionadas con la manipulación de los datos.

La aplicación de estas medida no debe ser considerada como opcional, sino como un paso necesario para garantizar un diseño de base de datos de éxito.

El no normalizar pueden tener consecuencias como la anormal lentitud ejecución de los procesos, ineficiencia en las operaciones…etc.

Existen 6 formas normales:

Primera Forma Normal.

Una tabla se encuentra en primera forma normal si, y sólo si, todos los atributos contienen valores atómicos y que no existan grupos repetidos.

¿Valores Atómicos? Cada campo sólo debe tener un sólo valor, no puede existir un campo que tenga varios valores a la vez.

Nota. Como medium no me da forma de subrayar ni puntear, voy a cambiar la leyenda y marco en negrita el nombre de la columna cuando es clave principal y cursiva las claves externas para orientarnos.

Valores Atómicos.
Grupos repetidos dentro de una columna.
ID Nombre Apellido Teléfono
123 Rachel Ingram 555-861-2026
545 James Wright 555-403-1659,555-776-4100
789 Cesar Dure 555-808-9633
Grupos repetidos en columnas.ID Nombre Apellido Teléfono1 Teléfono2 Teléfono3.
123 Rachel Ingram 555-861-2026
545 James Wright 555-403-1659 555-776-4100
789 Cesar Dure 555-808-9633 557-888-4120

Como vemos en el ejemplo, el diseñador se da cuenta que cada cliente puede tener varios teléfonos y decide o meterlos en el mismo campo, creando valores múltiples o crea varios campos que van a contener teléfonos distintos. Esta última opción lo que implica que es la tabla pueda tener muchos valores nulos, ya que no todos los clientes tiene más de un teléfono.

La solución será aplicar la primera forma normal, es decir, creamos otra tabla con los grupos repetidos y llevándonos la clave principal de los clientes como clave externa para relacionarla. La clave primaria sería el teléfono y el id del propio cliente.

ID  Nombre Apellido 
123 Rachel Ingram
545 James Wright
789 Cesar Dure
ID teléfono
123 555-861-2026
545 555-403-1659
545 555-776-4100
789 555-808-9633
789 557-888-4120

Segunda Forma Normal.

Una tabla está en segunda forma normal, si y sólo si está en la primera forma normal y además cada atributo que no sea clave, depende de forma funcional completa respecto a la clave principal.

¿Dependencia Funcional Completa?. Tenemos una tabla que contiene clave primaria dni, nombre, apellidos y fecha de nacimiento. Se dice que tiene dependencia funcional completa cuando necesitamos la clave principal para poder averiguar la información de los demás atributos. En este ejemplo, para saber el nombre, apellidos y fecha de nacimiento de un cliente necesitamos su clave principal para saber de quien se trata, por si sólo esos campos que no son clave no se puede averiguar nada. Veamos un ejemplo:

Empleado  Habilidad    Lugar de Trabajo
Jones Mecanografía Badajoz
Jones Taquigrafía Badajoz
Jones Tallado Badajoz
Bravo Limpieza Cáceres
Ellis Alquimia Cáceres
Ellis Malabarismo Cáceres
Harrison Limpieza Cáceres

En este caso la clave principal sería Empleado y Habilidad. Si nos fijamos bien, el único campo que no es clave es el Lugar de Trabajo y depende del empleado, es decir, que tiene dependencia funcional parcial, ya que no depende de las dos claves, sólo de Empleado.

Según la Segunda Forma Normal, debemos sacar en otra tabla esa parte de la clave y los atributos que dependan de él, en este caso quedaría de la siguiente forma:

Empleado  Habilidad    
Jones Mecanografía
Jones Taquigrafía
Jones Tallado
Bravo Limpieza
Ellis Alquimia
Ellis Malabarismo
Harrison Limpieza
Empleado Lugar de Trabajo
Jones Badajoz
Bravo Cáceres
Ellis Cáceres
Harrison Cáceres

Tercera Forma Normal.

Una tabla se encuentra en la Tercera Forma Normal cuando si, y sólo si, se encuentra en la Segunda Forma Normal y además ningún atributo que no sea clave depende transitivamente de las clave de tabla.

¿Que es eso de transitivamente?. Esto ocurre cuando tenemos un atributo no clave que dependen funcionalmente de otro campo que también no es clave. Veamos un ejemplo:

Torneo               Año  Ganador        Nacimiento
Indiana Invitational 1998 Al Fredrickson 21/07/1975
Cleveland Open 1999 Bob Albertson 28/09/1968
Des Moines Masters 1999 Al Fredrickson 21/07/1975
Indiana Invitational 1999 Chip Masterson 14/03/1977

En esta tabla la clave principal es Torneo y Año. Se dice que no está en Tercera Forma Normal cuando un campo no clave depende transitivamente de otro que tampoco es clave. En este caso si nos fijamos atentamente, la fecha de nacimiento no depende de la clave principal, si no el ganador y ambos campos no son clave. Eso es a lo que se le llama dependencia transitiva.

La Tercera Forma Normal dice que tenemos que sacar ese campo que tiene dependencia transitiva y crear una nueva tabla, incluyendo el campo por el que depende como clave primaria y externa. Quedaría de la siguiente forma:

Torneo               Año  Ganador        
Indiana Invitational 1998 Al Fredrickson
Cleveland Open 1999 Bob Albertson
Des Moines Masters 1999 Al Fredrickson
Indiana Invitational 1999 Chip Masterson
Ganador Nacimiento
Al Fredrickson 21/07/1975
Bob Albertson 28/09/1968
Chip Masterson 14/03/1977

Forma Normal Boyce-Codd.

Una tabla está en Forma Normal Boyce Codd si, y sólo si, está en la Segunda Forma Normal y además cada determinante es una clave candidata, es decir, no existen dependencias funcionales no triviales de los atributos que no sean un conjunto de la clave candidata.

No entiendo nada,¿Determinante? ¿Dependencias funcionales no triviales?. Esto se ve siempre mejor con un ejemplo;

Id_empleado id_departamento Id_asesor
1 2 1
1 3 2
2 4 3
3 2 1
  • Un empleado puede trabajar en varios departamentos.
  • Un asesor asesora a varios trabajadores.
  • Sólo puede haber un asesor por departamento.
  • La llave primaria es compuesta: id_empleado, id_departamento.

Si nos fijamos bien, existe una dependencia funcional de id_asesor respecto al departamento y resulta que id_asesor no es clave candidata. Esto produce una redundancia de id_asesor e id_departamento que se puede evitar. Veamos como se solucionaría:

Id_empleado Id_asesor
1 1
1 2
2 3
3 1
Id_asesor Id_departamento
1 2
2 3
3 4

Cuarta Forma Normal.

Una tabla está en Cuarta Forma Normal cuando está en Forma Normal de Boyce Codd y toda dependencia multivaluada es una dependencia funcional.

Tenemos un tabla de Estudiantes en la que guardamos el número, el curso donde está matriculado y el deporte que practica.

Num Curso          Deporte 
10 Bases de Datos Baloncesto
10 Bases de Datos Natación
10 Bases de Datos Tenis
20 Física Baloncesto
20 Física Esgrima

Los atributos Curso y Deporte son dependientes multivalores de Num, es decir, cualquier valor de Num determina una serie de valores distintos de Curso y Deporte. Esto es lo que se le llama dependencia multivaluada.

Para solucionar toda esta redundancia lo que hay que hacer es separar esa dependencia multivaluada en otra tabla llevándonos la clave de la que depende como clave externa:

Num Curso          
10 Bases de Datos
20 Física
Num Deporte
10 Baloncesto
10 Natación
10 Tenis
20 Baloncesto
20 Esgrima

Quinta Forma Normal.

Este tipo de Forma Normal se emplea cuando una misma tabla tiene mucha información y pocos atributos o cuando tenemos muchos atributos y se hace muy complejo su manejo.

Proyección. Es cuando de un conjunto de atributos dados de una tabla sólo tomamos las columnas que nos interesa, formando un subconjunto de la tabla original.

Unión. Es lo que llamamos Join, es decir, registros relacionados con varias tablas.

Una tabla está en Quinta Forma Normal cuando si, y sólo si, esté en la Cuarta Forma Normal y además que cada dependencia de unión (join) es implicada por las claves candidatas.

Tenemos una tabla en la que guardamos los doctores, la aseguradora y la enfermedad que entra en el seguro.

Psiquiatra    Asegurador Condición
Dr. Gómez Caser Ansiedad
Dr. Gómez Caser Depresión
Dr. Pereira Mapfre OCD
Dr. Pereira Mapfre Ansiedad
Dr. Pereira Mapfre Depresión
Dr. Matos Mapfre Esquizofrenia
Dr. Matos Caser Ansiedad
Dr. Matos Caser Demencia
Dr. Matos Axa Trastorno de conversión

Si nos fijamos en este ejemplo, tenemos una lista de doctores que atienden a pacientes con un tipo de enfermedad que es reembolsable por el seguro que tiene contratado.

Si ahora necesitáramos que el Dr Matos atendiera la condición OSD, tendríamos que añadir 3 registros más porque dicho doctor trabaja con 3 aseguradoras distintas. Pero tendríamos la incertidumbre de que no sabemos con seguridad si esa enfermedad entra en el seguro.

Psiquiatra    Asegurador Condición
Dr. Gómez Caser Ansiedad
Dr. Gómez Caser Depresión
Dr. Pereira Mapfre OCD
Dr. Pereira Mapfre Ansiedad
Dr. Pereira Mapfre Depresión
Dr. Matos Mapfre Esquizofrenia
Dr. Matos Caser Ansiedad
Dr. Matos Caser Demencia
Dr. Matos Axa Trastorno de conversión

Añadir los 3 registros:

Dr. Matos     Mapfre     OSD
Dr. Matos Caser OSD
Dr. Matos Axa OSD

Esto provocaría mucha redundancia. Según la Quinta Forma Normal lo que tenemos que hacer es descomponer esa tabla de forma que muestra la misma información que la entidad original pero conservando la clave original principal:

Psiquiatra    Condición
Dr. Gómez Ansiedad
Dr. Gómez Depresión
Dr. Pereira OSD
Dr. Pereira Ansiedad
Dr. Pereira Depresión
Dr. Matos Esquizofrenia
Dr. Matos Ansiedad
Dr. Matos Demencia
Dr. Matos Trastorno de conversión
Psiquiatra Asegurador
Dr. Gómez Caser
Dr. Pereira Mapfre
Dr. Matos Mapfre
Dr. Matos Caser
Dr. Matos Axa
Asegurador Condición
Caser Ansiedad
Caser Depresión
Caser Demencia
Mapfre OSD
Mapfre Ansiedad
Mapfre Depresión
Mapfre Esquizofrenia
Axa Trastorno de conversión

Ahora si quisiéramos añadir el Dr Matos atiende el OSD, bastaría con sólo almacenar un registro en Psiquiatra Condición. De esta forma sabríamos que el Dr. Matos trabaja con Mapfre, Caser y Axa, pero el OSD sólo lo cubre Mapfre.

Psiquiatra    Condición
Dr. Gómez Ansiedad
Dr. Gómez Depresión
Dr. Pereira OSD
Dr. Pereira Ansiedad
Dr. Pereira Depresión
Dr. Matos Esquizofrenia
Dr. Matos Ansiedad
Dr. Matos Demencia
Dr. Matos Trastorno de conversión
Dr. Matos OSD

--

--

Ismael Royano Gómez
Enredando con Bases de Datos

Técnico Informático curioso, lector activo de las nuevas tecnologías, amante de las series de televisión y usuario del respetable mundo del enredo.