Saltar la navegación

4.2. El supergrupo une su fuerza lógica

1. El plan para la transformación

Es la hora de realizar el siguiente paso de diseño: del diseño conceptual pasamos al diseño lógico.

El objetivo del diseño lógico es convertir los esquemas conceptuales en un esquema lógico global que se ajuste al modelo de SGBD elegido sobre el que se va a implementar el sistema, en nuestro caso: un sistema SGBD relacional.
Para realizar el diseño lógico lo que debemos hacer es transformar el diagrama E-R del diseño conceptual en una representación de las tablas, claves principales y claves ajenas (que conocimos para el modelo relacional en el apartado 3.1) que forman nuestro modelo relacional de trabajo. Para conseguir esta transformación hay que seguir unas reglas establecidas.


Vuestra misión, como equipo de trabajo, será ver el siguiente vídeo y, a partir de él, extraer estas reglas realizando un listado en el que cada punto contemple cómo se transforma cada elemento del modelo E-R. Podéis ayudaros de las siguientes preguntas:

  • ¿En qué se transforma cada entidad?
  • ¿Cómo se transforma una relación 1:1?
  • ¿Cómo se transforma una relación 1:N?
  • ¿Y una N:M?

*Recuerda que si lo necesitas puedes activar los subtítulos del video.

Lumen dice Finalmente...

Finalmente, y a modo de resumen, podéis comprobar si vuestras conclusiones siguen los siguientes principios:

  1. Cada entidad se transforma en una tabla y los atributos de dicha entidad en atributos de la tabla. Esto es, cada entidad genera una tabla, con sus mismos atributos, incluyendo las claves.
  2. Las relaciones de muchos a muchos se transforman en tablas cuya clave estará formada por la clave primaria de las entidades relacionadas, convirtiéndose esta en una relación de muchos a muchos o de muchos a uno.
  3. Las relaciones de uno a muchos propagan la clave principal de la entidad cuya cardinalidad es uno a la entidad de cardinalidad.

2. Normalizando la situación

Imagen de las 5 formas normales que existen para las bases ded atosA veces la generación de las tablas en una base de datos se realiza de una manera no óptima que genera posteriormente una ralentización en las consultas. Además, podemos encontrarnos que si las tablas no están bien organizadas los datos pueden aparecer duplicados, generando que la actualización no se realice en todos los registros donde aparece una determinada información y se produzcan incompatibilidades e inconsistencias de datos.
Para prevenir este problema, lo ideal es que en el diseño de los datos se utilicen una serie de reglas que sirven para ayudar a los diseñadores de bases de datos a desarrollar un esquema que minimice los problemas de lógica: esto es la normalización.

Existen 5 formas normales sucesivas, de las que aquí vamos a ver hasta la tercera de ellas. La mejor forma de conocerlas es aplicarlas a una tabla concreta. La que vamos a utilizar en este caso de uso es la tabla inicial de gestión de una biblioteca informática:

Codigo Titulo Autor Editorial ISBN Nombre_lector Cod_lector F_dev
1002 Estadística Murray Spiegel McGraw Hill 1585-4544-5655 Campos Lara, Juan JCL27 25/07/22
1002 Estadística Murray Spiegel McGraw Hill 1585-4544-5655 Moreno Caro, Mercedes MMC04 15/06/22
1004 Bases de Datos Ramalho Alfaguara 5967-4978-5311 Moreno Caro, Mercedes MMC04 19/03/22
1004 Bases de Datos Ramalho Alfaguara 5967-4978-5311 Campos Lara, Juan JCL27 10/01/22
1005 Algoritmos Kenneth Brown RA-MA 4894-0560-5542 López Ayala, Pedro PLA14 04/02/22
1007 Oracle Sarah Connor McGraw Hill 1700-8462-9869 López Ayala, Pedro PLA14 30/08/22
1008 SQL Meredith Goldberg RA-MA 4477-4754-4455 Campos Lara, Juan JCL27 14/09/22

Primera forma normal - 1FN

Para que una tabla esté en primera forma normal (1FN) debe cumplir:

  1. Que sus campos tengan valores atómicos: que en lo posible estén formados por valores no compuestos. Por ejemplo: si en un campo tenemos nombre y apellidos, conviene dividir en nombre, primer apellido y segundo apellido.
  2. Que para un valor de clave dado no haya conjuntos de valores repetidos.

Para transformar una tabla en primera forma normal, vamos a ver los pasos aplicados a nuestra tabla de trabajo.

PASO 1

Separamos los campos no atómicos. Así, la columna anterior llamada Nombre_lector se convertirá en 3 columnas. Podéis ver aquí el extracto de la tabla principal:

Nom_lector Ape1_lector
Ape2_lector
Juan Campos
Lara
Mercedes Moreno Caro
Mercedes Moreno Caro
Juan Campos Lara
Pedro López Ayala
Pedro López Ayala
Juan Campos Lara

PASO 2

Separamos en tablas aparte los campos con valores repetidos para un mismo valor de clave:

Tabla BIBLIOTECA

Codigo Título Autor Editorial ISBN
1002 Estadística Murray Spiegel McGraw Hill 1585-4544-5655
1004 Bases de Datos Ramalho Alfaguara 5967-4978-5311
1005 Algoritmos Kenneth Brown RA-MA 4894-0560-5542
1007 Oracle Sarah Connor McGraw Hill 1700-8462-9869
1008 SQL Meredith Goldberg RA-MA 4477-4754-4455

Tabla PRESTAMOS

Codigo
Nom_lector Ape1_lector
Ape2_lector
Cod_lector
Devolucion
1002
Juan Campos
Lara
JCL27 25/07/22
1002
Mercedes Moreno Caro MMC04 15/06/22
1004
Mercedes Moreno Caro MMC04 19/03/22
1004
Juan Campos Lara JCL27 10/01/22
1005
Pedro López Ayala PLA14 04/02/22
1007
Pedro López Ayala PLA14 30/08/22
1008
Juan Campos Lara JCL27 14/09/22

Segunda forma normal - 2FN

Para que una tabla esté en segunda forma normal (2FN) debe cumplir:

  1. Estar en primera forma normal.
  2. Que todos los atributos que no forman parte de la clave dependan de forma completa de ella.

Seguimos transformando nuestro ejemplo, ahora a segunda forma normal. En nuestras tablas del ejemplo en 1FN podemos comprobar que si el segundo apellido de Mercedes era incorrecto, y el cambio no es aplicado en las dos filas, sino en una sola entramos en un conflicto de datos. Para ello se utiliza la 2FN.

PASO 1

Determinamos qué columnas no clave no dependen de la clave primaria al completo: Entonces vemos que debemos trabajar sobre la tabla PRESTAMOS, cuya clave principal está formada por los campos Codigo y Cod_lector. Podemos comprobar las columnas de nombre y apellidos del lector dependen solamente de Cod_lector, y no dependen de Codigo. Luego estos campos no dependen de la clave completa:

Codigo
Nom_lector Ape1_lector
Ape2_lector
Cod_lector
Devolucion
1002
Juan Campos
Lara
JCL27 25/07/22
1002
Mercedes Moreno Caro MMC04 15/06/22
1004
Mercedes Moreno Caro MMC04 19/03/22
1004
Juan Campos Lara JCL27 10/01/22
1005
Pedro López Ayala PLA14 04/02/22
1007
Pedro López Ayala PLA14 30/08/22
1008
Juan Campos Lara JCL27 14/09/22

PASO 2

Lo que haremos a continuación es eliminar estas columnas de la tabla PRESTAMOS y crear una tabla LECTORES con dichas columnas y la llave primaria de la que dependen. Quedan entonces las tablas siguientes:

Tabla LECTORES

Cod_lector
Nom_lector Ape1_lector
Ape2_lector
JCL27 Juan Campos
Lara
MMC04 Mercedes Moreno Caro
PLA14 Pedro López Ayala
Tabla PRESTAMOS
Codigo Cod_lector F_dev
1002 JCL27 25/07/22
1002 MMC04 15/06/22
1004 MMC04 19/03/22
1004 JCL27 10/01/22
1005 PLA14 04/02/22
1007 PLA14 30/08/22
1008 JCL27 14/09/22

Tercera forma normal - 3FN

Para que una tabla esté en tercera forma normal (3FN) debe cumplir:

  1. Estar en segunda forma normal.
  2. No debe haber atributos no clave que dependan de otros atributos no primos (que no pertenecen a la clave).

Seguimos transformando nuestro ejemplo, ahora a tercera forma normal:

PASO 1

Determinamos las columnas que son dependientes de otra columna no clave: Al observar las tablas que hemos creado en el ejemplo, nos damos cuenta que tanto la tabla LECTORES, como la tabla PRESTAMOS se encuentran en 3FN. Sin embargo, la tabla BIBLIOTECA no lo está, ya que TITULO, EDITORIAL Y AUTOR son dependientes de ISBN, y esta columna no es la llave primaria:

Codigo Título Autor Editorial ISBN
1002 Estadística Murray Spiegel McGraw Hill 1585-4544-5655
1004 Bases de Datos Ramalho Alfaguara 5967-4978-5311
1005 Algoritmos Kenneth Brown RA-MA 4894-0560-5542
1007 Oracle Sarah Connor McGraw Hill 1700-8462-9869
1008 SQL Meredith Goldberg RA-MA 4477-4754-4455

PASO 2

Para normalizar esta tabla, moveremos las columnas no clave y la columna clave de la cual dependen dentro de una nueva tabla EJEMPLARES. Las nuevas tablas BIBLIOTECA y EJEMPLARES se muestran a continuación:

Tabla BIBLIOTECA

Codigo ISBN
1002 1585-4544-5655
1004 5967-4978-5311
1005 4894-0560-5542
1007 1700-8462-9869
1008 4477-4754-4455

Tabla EJEMPLARES

ISBN Título Autor Editorial
1585-4544-5655 Estadística Murray Spiegel McGraw Hill
5967-4978-5311 Bases de Datos Ramalho Alfaguara
4894-0560-5542 Algoritmos Kenneth Brown RA-MA
1700-8462-9869 Oracle Sarah Connor McGraw Hill
4477-4754-4455 SQL Meredith Goldberg RA-MA

3. El poder de la normalización para la mejor versión

Ejemplos de tables de un diseño lógico.En el apartado anterior creamos el modelo E-R de la base de datos que contendrá los datos de la aplicación a desarrollar, conjuntamente con ella, en nuestro reto. Pero para tener el mejor diseño posible para las tablas que formarán nuestra base de datos, lo mejor es asegurarnos de que cumple las tres formas normales que acabas de ver y practicar con el ejemplo. ¡El equipo se lanza infatigable al nuevo cometido!

Como desarrollador del equipo que trabaja en el software, debes tomar el modelo E-R que realizaste del reto y crear la estructura de tablas, el diseño lógico.

Una vez que tengas conformadas las tablas que forman la base de datos, deberás normalizarlo (o comprobar que está en 1FN, 2FN y 3FN). La misión ahora es que elabores un documento en el que se muestren las tablas iniciales planteadas para el diseño lógico y las tablas finales a implementar tras la normalización aplicada. Confía en tu propio superpoder resolutivo.

Clavis dice Reflexiona

Antes de seguir, para un momento y reflexiona sobre lo que has hecho y aprendido. ¿Qué te parece el método de normalización existente? ¿Crees que es útil para una base de datos?

Para hacer una buena reflexión es recomendable que intentes identificar qué procedimientos has tenido que poner en marcha para realizar esta actividad; cuáles eran estrategias necesarias y con qué recursos contabas para resolverla.

Piensa también en cuáles han sido las dificultades que te has encontrado a la hora de dar respuesta y qué otras dificultades puedes encontrarte cuando intentes llevarlo a la práctica.

¡Todo esto te será muy útil cuando tengas que enfrentarte a alguna actividad parecida!

Entonces, estarás preparada o preparado para poder resolverla sin problemas con tu experiencia previa.

Para no olvidar todo lo aprendido, plasma tus reflexiones en tu blog de la asignatura.