Informática
Bases de datos

Tu Instituto Online
   


 
Nivel Básico Base: Relaciones. Integridad referencial. Acciones en cascada
Duración aproximada: 2 sesiones.
   
Objetivos Objetivos
  • Repasar el concepto de relación y de clave ajena.
  • Crear y utilizar relaciones entre tablas.
  • Repasar el concepto de integridad referencial.
  • Comprobación de la integridad referencial.
  • Entender el concepto de acciones en cascada.
  • Utilizar operaciones en cascada.
   
Fuentes de información Fuentes de información
   
Contenidos
Contenidos
 

1. Relaciones entre tablas

Las tablas no son elementos aislados, sino que suelen estar relacionadas entre sí. Para ello se utilizan campos como enlaces y se definen un tipo de claves llamadas ajenas. En esta unidad repasaremos los conceptos de relación y de clave ajena, así como la creación y utilización de relaciones entre diferentes tipos de tablas.

Tras crear tablas diferentes en la base de datos, necesitamos una forma de indicarle a Base cómo debe volver a combinar esa información.

El primer paso de este proceso es definir relaciones entre las tablas. Una vez realizada esta operación, podemos crear consultas, formularios e informes para mostrar información de varias tablas a la vez.

Una relación hace coincidir los datos de los campos clave (normalmente un campo con el mismo nombre en ambas tablas). En la mayoría de los casos, estos campos coincidentes son la clave principal de una tabla, que proporciona un identificador único para cada registro, y una clave externa de la otra tabla.

   
Fuentes de información Sugerencias

Para repasar y recordar las relaciones entre tablas, puede consultarse la práctica correspondiente en el bloque básico.

   
 

Las relaciones pueden ser, principalmente, de tres tipos:

1.1. Uno a muchos (1:N)

Este tipo se da cuando una fila de la primera tabla puede estar relacionada con muchas filas de la segunda tabla, pero una fila de la segunda sólo está relacionada con una de la primera. Por ejemplo, una persona puede tener muchos teléfonos (fijo, móvil) pero, dado un teléfono en particular, sólo pertenece a una persona.

1.2. Uno a uno (1:1)

Este tipo de relación aparece con menos frecuencia y sucede cuando una fila de la primera tabla sólo puede estar relacionada con una fila de la segunda y una fila de la segunda tabla sólo puede estar relacionada con una de la primera. Por ejemplo, dada una persona casada, sólo está casada con otra persona.

1.3. Muchos a muchos (N:N)

Esta clase de relación ocurre cuando una fila de la primera tabla puede estar relacionada con muchas filas de la segunda tabla y una fila de la segunda tabla puede estarlo con muchas filas de la primera. Por ejemplo, un comercial puede vender muchos productos y, dado un producto, puede ser vendido por muchos comerciales.

1.4. Normas a tener en cuenta en las relaciones

A la hora de implementar las relaciones en Base hay que tener en cuenta una serie de normas importantes:

  • En primer lugar, cerrar todas las tablas que estén abiertas. No es posible crear ni modificar relaciones entre tablas abiertas.
  • Dadas 2 tablas, siempre se relacionarán por un campo en común. Lógicamente, dicho campo deberá ser del mismo tipo y tamaño en ambas tablas.
  • Las 2 tablas a relacionar deberán contener siempre una clave principal o índice único. En caso contrario, Base nos avisará y no nos dejará crear la relación.
  • Si al arrastrar los campos, no se nos permite crear la relación, obligatoriamente deberemos corregir la información de la base de datos, ya que existirá algún tipo de inconsistencia.
  • Para que una relación esté correctamente creada, Base debe indicar la cardinalidad de la relación: 1 → 1, 1 → n, n → n.
  • Al final del proceso de diseño, todas las tablas de una base de datos deben estar relacionadas al menos con otra tabla. En caso de tener una tabla sin relacionar con ninguna otra, no tendrá ninguna utilidad. Por tanto, o sobra la tabla o está mal diseñada la base de datos.
   
Ejercicios
Ejercicio
 

Tabla GENERO. Vista de datos

  • Abre la base de datos "videoclub".
  • Haz clic en el botón Tablas de la Barra de Objetos.
  • Ve a la tabla GENERO y haz doble clic sobre ella.
  • Ve al registro que contiene “Comedia”. Sobre el triángulo azul de la parte izquierda haz clic con el botón derecho del ratón y elige la opción Eliminar filas. Responde afirmativamente a la pregunta.
  • Guarda los cambios.
  • Cierra la tabla GENERO.

Inconsistencia de datos

  • Ve a la tabla PELICULA. Haz doble clic o clic en el icono Abrir.

¿Qué ocurre con los datos contenidos en la tabla PELICULA? ¿Es correcto este comportamiento? Como puede comprobarse, los cambios hechos en la tabla GENERO no se han propagado a la tabla PELICULA, lo que produce una inconsistencia en los datos. Es decir, si borramos el género “Comedia” en la tabla GENERO, en la tabla PELICULA tenemos registros cuyo género no existe.

¿Cómo lo arreglamos para que vuelvan a tener género?

  • Cierra la tabla PELICULA.
  • Ve a la tabla GENERO.
  • Vuelve a crear el registro para dejar los datos como estaban originalmente antes de hacer el punto anterior. Es decir, vuelve a introducir la fila “Comedia”.
  • Guarda los cambios.
   
Contenidos
Contenidos
 

2. Establecer una relación uno a muchos (1:N)

Según hemos explicado en el apartado anterior, existe claramente una relación del tipo uno a muchos (1:N) entre las tablas PELICULA y GENERO. Si consideramos que una película sólo puede pertenecer a un género, éste sería el tipo de relación que existe entre la tabla GENERO y la tabla PELICULA ya que, por ejemplo, el género “Histórico” tendrá varias películas relacionados que son de dicho género, pero dada una película sólo está relacionada con un género.

2.1. Interpretación de la relación

Las relaciones entre tablas es un concepto un tanto abstracto. Sin embargo, si representamos gráficamente nuestro diseño, el significado queda mucho más claro.

Donde tenemos que:

  • Cada rectángulo se corresponde con una tabla.
  • Las flechas indican que las 2 tablas están relacionadas.
  • Los números indican la cardinalidad. Es decir:
    (N) → Dado un género (por ej. Bélico), puede haber muchas películas pertenecientes a ese género.
    (1) → Dada una película, sólo pertenece a un género.

Para poder ver mejor la interpretación de la relación vamos a realizar un ejercicio en el que veremos las consecuencias de ésta en los valores de los campos.

   
Ejercicios
Ejercicio
 

Crear relaciones. PELICULA y GENERO

  • Cierra todas las tablas abiertas. No es posible establecer relaciones entre tablas abiertas, ya que estamos introduciendo datos.
  • Ve al menú Herramientas → Relaciones. Haz clic en el icono Añadir tablas.
  • Selecciona las tablas PELICULA y GENERO con el botón Añadir.
  • Pulsa el botón Cerrar.

En nuestro caso, en la tabla PELICULA tenemos un campo “Genero” que hace referencia al género de cine al que pertenece la película. Por tanto, la columna debe ser del mismo tipo de datos que la columna que sea clave primaria en la otra tabla y los valores que podrá contener será cualquiera de los valores que tome la clave primaria en dicha tabla. En definitiva, en la tabla PELICULA el campo “Genero” debe ser del mismo tipo de datos que el campo de la tabla GENERO.

Ahora falta indicarle a Base explícitamente que las dos tablas están relacionadas y que vamos a utilizar para mantener dicha relación la columna “Genero” de la tabla PELICULA.

  • Arrastra del campo “Genero” de PELICULA al campo “Genero” de GENERO. Base ha creado una relación uno a muchos entre las 2 tablas.
  • El resultado será el siguiente:

  • Guarda los cambios en la base de datos.
   
Ojo

Los campos relacionados no tienen que tener los mismos nombres, pero deben tener el mismo tipo de datos y el mismo tamaño. Es decir, deben contener el mismo tipo de información. En la tabla PELICULA el campo “Genero” debe ser del mismo tipo de datos que el campo de la tabla GENERO.

Ejemplo (el campo GeneroPeli es del mismo tipo y del mismo tamaño que el campo Genero, aunque no se llamen igual):

   
 

Crear relaciones. PELICULA y SOPORTE

  • Cierra todas las tablas abiertas. No es posible establecer relaciones entre tablas abiertas.
  • Establece una relación entre el campo “Soporte” de PELICULA y el campo “Soporte” de SOPORTE.

   
Contenidos
Contenidos
 

2.2. Clave ajena o externa

También podemos decir con respecto a los campos relacionados que el campo relacionado de la tabla "muchos" se denomina clave ajena o externa, mientras que el campo relacionado de la tabla "uno" será una clave principal o primaria.

Relación película-género

La clave ajena es el campo "Genero" de la tabla PELICULA. La clave primaria es el campo "Genero" de la tabla GENERO.

Relación película-soporte

La clave ajena es el campo "Soporte" de la tabla PELICULA. La clave primaria es el campo "Soporte" de la tabla SOPORTE.

3. Integridad referencial

En la relación que hemos definido en el apartado anterior, se impide que cualquier registro relacionado sea modificado o eliminado. Esta propiedad es lo que se conoce como integridad referencial.

   
Ojo

Cuando existe una relación entre 2 tablas, cualquier operación con los datos ha de respetar la relación. En caso contrario, no se realizará.

   
 

La integridad referencial es una restricción que se define sobre una relación y que, en Base, toda relación lleva implícita debido al concepto de clave ajena.

3.1. Ejemplo práctico: relación película-género

Observando las dos tablas, podemos ver que la clave ajena "Genero" de la tabla PELICULA hace referencia al campo "Genero" de la tabla GENERO. De este modo, los valores que podrá tomar el campo "Genero" de la tabla PELICULA serán valores nulos o valores de entre los disponibles en la clave primaria de la tabla GENERO.

Esto es debido a que el objetivo de las claves ajenas es establecer una conexión con la clave primaria que referencian, de modo que si un valor de una clave ajena no estuviese presente en la clave primaria correspondiente, representaría una referencia o conexión incorrecta.

Como podemos comprobar, todos los valores de la columna "Genero" están contenidos de entre los posibles de la tabla GENERO:

Aspectos a tener en cuenta

Hay que tener en cuenta que tanto en inserciones como actualizaciones, cada vez que queramos introducir un valor en la columna "Genero" de la tabla PELICULA, deberá estar incluido en la tabla GENERO. En caso de no hacerlo, tendremos que insertar el registro antes en la tabla GENERO y, posteriormente, realizar la inserción en la tabla PELICULA.

   
Ojo

La integridad referencial, por tanto, es un mecanismo que nos permite asegurar que los valores que estamos introduciendo son íntegros y coherentes con los valores que ya existen.

   
Ejercicios
Ejercicio
 

Una vez establecida una relación, comprobaremos que es correcta. Para ello sólo tenemos que intentar realizar alguna operación no permitida y ver que se cumple la integridad referencial.

  • Haz clic en el botón Tablas de la Barra de Objetos.
Caso 1. Introducir una película de un género no existe en la tabla GENERO
  • Ve a la tabla PELICULA y haz doble clic sobre ella.
  • Introduce un nueva película que sea de un género que no exista en la tabla GENERO. Por ejemplo:

  • Guarda los cambios.

Como podemos comprobar, Base nos muestra un mensaje de error porque estamos insertando un registro con un género que no existe en nuestra base de datos.

  • Pulsa Aceptar.
  • Haz clic a la izquierda sobre el lápiz con el botón derecho del ratón y elige la opción Deshacer: entrada de datos.
  • Con esto desharemos la inserción y no nos dará error.
  • Cierra la tabla PELICULA.
Caso 2. Modificar un género que tiene películas relacionadas
  • Ve a la tabla GENERO y haz doble clic sobre ella.
  • Modifica datos en el registro “Terror” para que ahora sea “Terror1” (si no tienes películas de este género, haz la prueba con otro). Por ejemplo:

  • Guarda los cambios.

Como podemos comprobar, Base nos muestra un mensaje de error porque estamos modificando un registro de género que contiene películas relacionadas en la tabla PELICULA.

  • Pulsa Aceptar.
  • Haz clic a la izquierda sobre el lápiz con el botón derecho del ratón y elige la opción Deshacer: entrada de datos.

Caso 3. Eliminar un género que tiene películas relacionadas

  • Ve a la tabla GENERO y haz doble clic sobre ella.
  • Elimina el registro con el tipo “Histórico”. Haz clic a la izquierda sobre el triángulo con el botón derecho del ratón y elige la opción Eliminar filas.
  • Por ejemplo:

  • Guarda los cambios.

Como podemos comprobar, Base nos muestra un mensaje de error porque estamos borrando un registro de género que contiene películas relacionadas en la tabla PELICULA.

  • Pulsa Aceptar.
  • Cierra la tabla GENERO.
   
Contenidos
Contenidos
 

4. Orden de operaciones para cumplir la integridad referencial

Cuando establecemos relaciones y definimos claves ajenas, hemos de cumplir una serie de restricciones para garantizar la integridad referencial de la base de datos. En este caso, debemos realizar las operaciones básicas de manipulación de datos, siguiendo un determinado orden.

4.1. Inserciones

A la hora de insertar un registro en la tabla que tiene la clave ajena tendremos que asegurarnos que el valor existe como clave primaria de la tabla secundaria.

   
Ejercicios
Ejercicio
 

Vamos a insertar un registro en la tabla PELICULA cuyo género es "Tragedia".

  • Lo primero será insertar, en la tabla GENERO, una fila con dicho género:

  • A continuación, insertamos la fila en la tabla PELICULA con los datos correspondientes:

  • No habrá problemas con la clave ajena, puesto que ya hemos insertado la fila previamente en la tabla GENERO.
   
Contenidos
Contenidos
 

4.2. Modificaciones

Ahora vamos a modificar un registro en la tabla que tiene la clave primaria, aunque antes tendremos que asegurarnos que no existen valores asociados en la tabla que contiene la clave ajena, es decir, que hagan referencia a éste.

   
Ejercicios
Ejercicio
 

Vamos a modificar un registro de la tabla GENERO de "Comedia" a "Risa".

  • Si comprobamos en la tabla PELICULA los valores, veremos que éstos contienen el valor "Comedia".
  • Para solucionar el problema, creamos un nuevo valor "Risa" en la tabla GENERO.

  • Abrimos la tabla PELICULA y cambiamos los valores de "Comedia" por "Risa":

  • Por último, volvemos a la tabla GENERO y borramos el valor "Comedia".
  • Ahora tendremos el cambio realizado y sin errores.
   
Contenidos
Contenidos
 

4.3. Borrados

Ahora vamos a borrar un registro en la tabla que tiene la clave primaria, aunque antes tendremos que asegurarnos que no existen valores asociados en la tabla que contiene la clave ajena, es decir, que hagan referencia a éste.

   
Ejercicios
Ejercicio
 

Vamos a eliminar un registro de la tabla GENERO, concretamente el valor "Risa".

  • Si comprobamos los valores en la tabla PELICULA, vemos que éstos contienen el valor "Risa".
  • Para solucionar el problema eliminamos el valor "Risa" de la tabla PELICULA:

  • Por último, abrimos la tabla GENERO y eliminamos el valor "Risa".
  • Ahora tendremos el cambio realizado y sin errores.

Restablecer situación inicial

Vamos a dejar la base de datos como estaba originalmente, para poder continuar con las siguientes prácticas.

  • Ve a la tabla GENERO.
  • Vuelve a insertar el género "Comedia".
  • Ve al formulario y establece el género "Comedia" en las películas correspondientes.
  • Guarda los cambios en la base de datos.
   
Contenidos
Contenidos
 

5. Acciones en cascada

En la integridad referencial de la unidad anterior vimos que el intento de realizar determinadas operaciones sobre una de las tablas conllevaba la imposibilidad de éstas, a no ser que hiciéramos determinadas modificaciones. Esto se produce debido a un elemento como son las acciones en cascada, para evitar los problemas derivados de los cambios producidos en tablas relacionadas.

5.1. Ejemplo: videoclub

En la relación que definimos en la unidad anterior se impedía que cualquier registro relacionado fuera modificado o eliminado. Esta propiedad es lo que se conoce como integridad referencial. Es decir, si intentamos borrar un género que tenga películas relacionadas, Base nos lo impedirá. De idéntica forma, si modificamos un género que tenga películas, también relacionadas, Base nos lo impedirá.

No obstante, es posible modificar el comportamiento de las relaciones para que se permitan determinadas opciones tanto para los borrados como para las actualizaciones. Es decir, la relación establecida entre dos tablas implica que cualquier modificación realizada sobre la información que contiene la tabla primaria afectará a los datos de la tabla secundaria.

6. Actualización en cascada

Tenemos 4 opciones:

  • Sin acción. Es la opción por defecto. Indica que los cambios realizados a una clave primaria no afectarán otros campos de clave ajena.
  • Actualiza en cascada. Actualiza todos los campos de clave ajena si se modifica el valor de la clave primaria correspondiente. Es la opción más segura y conservadora de las posibles y la que se debe utilizar en la mayoría de los casos.
  • Poner a nulo. Si se modifica la clave primaria correspondiente, esta opción establece el valor "IS NULL" (valor vacío) para todos los campos de clave ajena.
  • Por defecto. Si se modifica la clave primaria correspondiente, esta opción establece un valor por defecto para todos los campos de clave ajena.
   
Ejercicios
Ejercicio
 

Vamos a modificar la relación existente entre las tablas PELICULA y GENERO para permitir la modificación en cascada.

Modificar relación

  • Ve al menú Herramientas → Relaciones.
  • Haz doble clic en la primera línea de la relación entre las tablas PELICULA y GENERO. En Opciones de actualización, marca la opción Actualización en cascada.

  • Pulsa el botón Aceptar.
  • Cierra la pantalla de relaciones.

Modificar datos en cascada

  • Ve a la tabla GENERO. Entra en modo hoja de datos.
  • Modifica el valor "Comedia" por "Comedia1".

  • Guarda los cambios
  • Ve a la tabla PELICULA. Entra en modo hoja de datos.
  • Comprueba que todos los registros relacionados han sido actualizados en cascada:

  • Guarda los cambios en la base de datos.
   
Contenidos
Contenidos
 

7. Borrado en cascada

Tenemos 4 opciones:

  • Sin acción. Es la opción por defecto. Indica que la supresión de una clave primaria no tendrá efecto en otros campos de clave ajena.
  • Suprimir en cascada. Indica que si se suprime un campo de clave primaria se suprimirán todos los campos de clave ajena correspondientes.
  • Poner a nulo. Si se suprime la clave primaria correspondiente, se asignará el valor "IS NULL" a todos los campos de clave ajena.
  • Por defecto. Si se suprime la clave primaria correspondiente, se definirá un valor por defecto para todos los campos de clave ajena.
   
Ejercicios
Ejercicio
 

Vamos a modificar la relación existente entre las tablas PELICULA y GENERO para permitir la eliminación en cascada.

Modificar relación

  • Ve al menú Herramientas → Relaciones.
  • Haz doble clic en la primera línea de la relación entre las tablas PELICULA y GENERO. En Opciones de actualización, marca Ninguna acción. En Opciones de eliminación, marca la opción Eliminar en cascada.

  • Pulsa el botón Aceptar.
  • Cierra la pantalla de relaciones.

Introducir datos

  • Ve a la tabla GENERO. Entre en modo hoja de datos.
  • Añade un nuevo género "Bodrio".

  • Guarda los cambios.
  • Cierra la tabla GENERO.
  • Haz clic en el botón Formularios de la Barra de Objetos.
  • Abre el formulario FPELICULA. Introduce una nueva película del género “Bodrio”. Por ejemplo:

Eliminar datos en cascada

  • Ve a la tabla GENERO y haz doble clic sobre ella.
  • Borra el género "Bodrio". Botón derecho del ratón sobre el triángulo y opción Eliminar filas. Responder Sí a la pregunta.
  • Ve a la tabla PELICULA y haz doble clic sobre ella. Comprueba que todos los registros relacionados de género “Bodrio” han sido borrados en cascada:

  • Guarda los cambios en la base de datos.
   
Ojo

El borrado en cascada hay que utilizarlo con precaución ya que podemos suprimir gran parte de la base de datos.

   
 

Para evitar efectos colaterales, vamos a dejar la relación como estaba inicialmente.

  • Cierra todas las tablas abiertas.
  • Ve al menú Herramientas → Relaciones.
  • Haz doble clic en la línea de relación entre las tablas PELICULA y GENERO. En Opciones de eliminación, marca la opción Sin acción.

  • Pulsa el botón Aceptar.
  • Cierra la pantalla de relaciones.

Cerrar la base de datos

  • Guarda los cambios en la base de datos.
  • Cierra la base de datos "videoclub".
 


   
Creditos Créditos
Licencia de Creative Commons

Este documento es de dominio público bajo licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
TuInstitutoOnline.com M.Donoso, G.García, P.Gargallo, A.Martínez. v. 2.0.2.1.0

No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

Los reconocimientos se realizan en el apartado Fuentes de información.

Los iconos empleados están protegidos por la licencia LGPL y se han obtenido de:
https://commons.wikimedia.org/wiki/Crystal_Clear
https://www.openclipart.org


Licencia de Creative Commons

Todas las capturas de pantalla tienen copyright y pertenecen a TuInsitutoOnline.com.

TuInstitutoOnline.com permite su uso siempre y cuando se muestren desde el dominio www.tuinstituoonline.com y NO PERMITE enlazar a ellas desde otros lugares.

Además, la estructura diseñada para mostrar el contenido de las unidades es propiedad de TuInstitutoOnline.com.

TuInstitutoOnline.com M.Donoso, G.García, P.Gargallo, A.Martínez. Versión 2021.