Saltar a contenido

icono Relación de tablas

Una de las grandes ventajas de las bases de datos es que podemos tener en varias tablas, relacionadas entre ellas, con toda la información que necesitamos almacenar, en lugar de una única tabla enorme con toda la información.

¿Qué conseguimos con esto? Para responder a esta pregunta mejor pongamos un ejemplo: imaginemos que se quiere guardar el género cinematográfico de las películas que se van almacenando. Se podría pensar en añadir una nueva columna a la tabla Peliculas que se llamara Género, de manera que por cada película almacenada también tuviera su género.

Tabla Peliculas con el género de cada película

Si nos fijamos en esta solución, podemos ver que se está repitiendo el mismo valor muchas veces. Por ejemplo, el género Ciencia-Ficción aparece en varias filas.

Esto provoca tres problemas principales:

  • Se obliga a escribir muchas veces el mismo dato. Por ejemplo, Ciencia-Ficción aparece en cuatro filas y Drama en otras tantas.
  • Aumenta la posibilidad de cometer errores al teclear.
  • Dificultad para modificar la información. Por ejemplo, si los críticos de cine deciden que el género Ciencia-Ficción debe renombrase a Ficción-Científica entonces nos tocará actualizar muchos registros manualmente .

La solución a los problemas anteriores está en separar la información que aparece repetida continuamente en una nueva tabla e indicar de alguna forma en nuestra base de datos que hay filas de la tabla Peliculas y de la tabla Generos que están relacionadas .

Diseño de la tabla Generos
Posible contenido de la tabla Generos
Filas relacionadas entre tabla Peliculas y tabla Generos

Otro ejemplo que nos ayude a comprender aún mejor la necesidad de poder establecer relaciones entre tablas sería la relación de Peliculascon la tabla Interpretes. Si quisieramos almacenar información acerca de los principales intérpretes con cada una de nuestra películasa, no nos quedaría otra opción que añadir nuevas columnas a nuestra tabla Peliculas donde guardar la información acerca de sus protagonistas.

Diseño de la tabla Peliculas junto con información de interpretes

Pero esta solución nos deja muchas incógnitas sin resolver. Por ejemplo:

  • Si no se conoce el nombre de ninguno de los intérpretes de una película se va a tener que dejar en blanco esos tres campos para cada una de las películas para las que no se conocen sus intérpretes.
  • Si de una película se conoce más de un interprete se tendrá que optar entre solo almacenar uno de ellos o bien, repetir en nuevas filas toda la información de las películas para las que se conoce más de un protagonista, junto con cada uno de los intérpretes de dicha película.

    • En el ejemplo siguiente vemos como hemos tenido que repetir información de dos películas (Gattaca) porque conocíamos dos intérpretes de las mismas
    • Por otro lado, hay intérpretes (Harrison Ford y Javier Bardem) que nos aparecen varias veces por ser protagonistas en varias de nuestras películas.
Tabla Peliculas con posibles datos

Por tanto, parece más recomendable dejar la tabla Peliculas como estaba al inicio de esta unidad y relacionarla con la tabla Interpretes.

Filas relacionadas entre tabla Peliculas y tabla Interpretes

Tipos de relaciones entre tablas

Las tablas se pueden relacionar de tres formas distintas:

  • ↔️ Uno a muchos (1 a N)


    Un registro se relaciona con muchos.

    1 a N

    • Un género puede tener muchas películas.
  • ↔️ Muchos a muchos (N a N)


    Muchos registros se relacionan entre sí

    N a N

    • Una película puede tener varios intérpretes y viceversa.
  • ↔️ Muchos a muchos (1 a 1)


    Un registro se relaciona con uno solo

    1 a 1

    • Una película tiene sólo una ficha técnica detallada.

Establecer relaciones entre tablas

Para poder relacionar tablas se utilizan las claves ajenas (foreign key). Una clave ajena es un campo de una tabla que hace referencia a la clave primaria de otra tabla.

En función del tipo de relación existente entre las tablas, los pasos para establecerlas en LibreOffice Base pueden variar. En este apartado se explican las reglas básicas para crear relaciones uno a muchos y, posteriormente, muchos a muchos.

Establecer relaciones uno a muchos (1 a N)

Para este tipo de relaciones, debemos crear una nueva columna en la tabla del lado "muchos", de modo que cada fila pueda indicar claramente a qué fila de la otra tabla está relacionada.

¿Cómo sabemos qué tabla está en el lado de muchos?"

Em el ejemplo de la relación entre Generos y Peliculas

  • Un género puede estar asociado a muchas películas.
  • Cada película pertenece a un solo género.

Por tanto, la tabla Peliculas es el lado del muchos, y es en ella donde debemos crear el nuevo campo.

  • Creamos en Peliculas un nuevo campo Genero del mismo tipo que la clave principal de Generos (Id_genero de tipo Integer).
  • Los valores de esta columna corresponden a las filas existentes en la tabla Generos (por ejemplo, Drama, Comedia).
Tabla Peliculas con nuevo campo Genero
¿Por qué el campo Genero solo puede tomar ciertos valores?

El campo Genero se utiliza para referenciar una fila existente de la tabla Generos. No tendría sentido que una película tuviera como género el valor Drama si dicho identificador no existe en la tabla Generos. Esto garantiza la integridad de los datos y evita errores en la base de datos.

Una vez creada la nueva columna, es necesario indicar explícitamente a LibreOffice Base que ambas tablas están relacionadas.

Para ello, seguimos los siguientes pasos:

  1. Accedemos al menú Herramientas > Relaciones…

    Apertura de la ventana Relaciones…

  2. En la ventana que aparece, añadimos las tablas que queremos relacionar:

    • Seleccionamos la tabla Generos y pulsamos Añadir.
    • Repetimos el proceso con la tabla Peliculas.
    • Cerramos la ventana de selección.

    Selección de las tablas a relacionar

  3. A continuación, indicamos la relación entre los campos:

    • Hacemos clic en el icono Añadir nueva relación de la ventana Relaciones.

    Icono para añadir nueva relación

    • Hacemos clic sobre el campo Id_genero de la tabla Generos.
    • Sin soltar el ratón, arrastramos hasta el campo Genero de la tabla Peliculas.
    • Soltamos el ratón para crear la relación.
  4. Automáticamente aparecerá una línea que conecta ambos campos:

    • En el lado de Generos aparecerá un 1.
    • En el lado de Peliculas aparecerá una n.

    Establecimiento de la relación 1 a n entre las tablas Generos y Peliculas

Para ver o modificar las opciones de la relación creada:

  1. Hacemos doble clic sobre la línea que une ambas tablas.
  2. Aparecerá el diálogo Relaciones, donde se configuran aspectos como:
    • Qué ocurre si se elimina un género.
    • Qué sucede si se modifica el valor de Id_genero.

Estas opciones permiten controlar el comportamiento de la base de datos y mantener la coherencia de la información.

Configuración de la relación 1 a n entre las tablas Generos y Peliculas

Establecer relaciones muchos a muchos (N a N)

En las relaciones muchos a muchos, cada fila de la primera tabla puede estar relacionada con muchas filas de la segunda tabla, y viceversa.

Para resolverlo, creamos una tabla intermedia que contenga, al menos, dos columnas:

  • Una columna que apunte a la clave primaria de la primera tabla.
  • Otra columna que apunte a la clave primaria de la segunda tabla.
  • Para fijar la clave primaria, seleccionamos ambas columnas que apuntan a las tablas relacionadas y las definimos como clave primaria compuesta.
¿Cómo seleccionar dos columnas?

Nos situamos en Películas , presionamos el botón SHIFT del teclado y a continuación la tecla ↓ Flecha abajo del teclado.

Esta tabla intermedia representa cada relación individual entre las dos tablas.

Ejemplo: Tabla Protagonistas para relacionar Peliculas e Interpretes.

Diseño de la tabla Protagonistas

Para establecer las relaciones N a N debemos seguir los siguientes pasos:

  1. Abrimos Herramientas > Relaciones…
  2. Añadimos las tablas que queremos relacionar: - Peliculas - Interpretes - Protagonistas (tabla intermedia)
  3. Creamos las relaciones uno a muchos entre: - PeliculasProtagonistas - InterpretesProtagonistas
Relación entre Peliculas y Protagonistas
Relación entre Protagonistas e Interpretes
  1. Obtenemos el siguiente resultado:

La relación original muchos a muchos entre Peliculas e Interpretes se transforma en dos relaciones uno a muchos a través de la tabla Protagonistas.

Diagrama final de relaciones entre tablas

Referencias

Actividad

📝 AA5.5 Relaciones en la base de datos BBDD_Peliculas

(C.ESP1 / CE1.1, CE1.2 / IC1-3p)

  1. Abre la base de datos BBDD_Pelicula
  2. Crea la tabla Genero siguiendo los pasos descritos en la unidad.
  3. Rellena la tabla con los siguientes géneros:

    id_genero Género
    1 Ciencia-Ficción
    2 Aventuras
    4 Drama
    4 Fantasía
    5 Histórico
  4. Edita la tabla película y añade el nuevo campo

  5. Crea la tabla Protagonistas siguiendo los pasos descritos en la unidad.

  6. Crea las relaciones 1 a N siguiendo los pasos descritos en la unidad.
  7. Actualiza la tabla con sus correspondientes géneros:

    Recuerda

    Recuerda que la vinculación entre las tablas la has hecho a través del id que es de tipo integer por tanto no has de escribir el nombre del género sino el número al que corresponde.

    Película Género
    Blade Runner Ciencia-Ficción
    La guerra de las galaxias Ciencia-Ficción
    Indiana Jones en busca del arca perdida Aventuras
    Million Dollar Baby Drama
    La comunidad del anillo Fantasía
    Belleza robada Drama
    Gladiator Histórico
    Rocky Drama
    Los lunes al sol Drama
    Mar adentro Drama
    Big Fish Fantasía
    Gattaca Ciencia-Ficción
  8. Crea las relaciones N a N siguiendo los pasos descritos en la unidad.

  9. Rellena la nueva tabla:

    Recuerda

    Recuerda que la vinculación entre las tablas la has hecho a través del id que es de tipo integer por tanto no has de escribir el nombre del interprete sino el número al que corresponde.

    Película Protagonista
    Blade Runner Harrison Ford
    La guerra de las galaxias Harrison Ford
    Indiana Jones en busca del arca perdida Harrison Ford
    Million Dollar Baby Clint Eastwood
    Million Dollar Baby Hilary Swank
    La comunidad del anillo Elijah Wood
    Belleza robada Liv Tyler
    Gladiator Russell Crowe
    Rocky Sylvester Stallone
    Los lunes al sol Javier Bardem
    Mar adentro Javier Bardem
    Big Fish Ewan McGregor
    Gattaca Thurman Uma
    Gattaca Ethan Hawke
  10. Entrega en un Writer con una capturas de pantalla donde se demuestre los pasos para la realización de cada punto del ejercicio y el diagrama final de relaciones entre tablas.

Actividad Refuerzo

🔨 AAR5.6 Relaciones en la base de datos BBDD_Hospital

(C.ESP1 / CE1.1, CE1.2 / IC1-3p)

  1. Abre la base de datos BBDD_Hospital
  2. Crea las relaciones necesarias.

Relaciones

  1. Entrega en un Writer con una capturas de pantalla donde se demuestre los pasos para la realización de cada punto del ejercicio y el diagrama final de relaciones entre tablas.