|
|
|
Base: Relaciones entre tablas. Integridad referencial |
|
|
Objetivos |
- Conocer el concepto de relación.
- Conocer el concepto de clave ajena.
- Crear y utilizar relaciones entre tablas.
- Concepto de integridad referencial.
- Comprobación de la integridad referencial.
|
|
Fuentes de información |
|
|
|
|
1. Introducción
Base, tal y como se comentó con
anterioridad, es un gestor de base de datos relacional, entre otras
cosas, porque permite establecer vínculos o relaciones entre las tablas
que lo componen. El objetivo de estas relaciones será principalmente
evitar la duplicidad de información y en consecuencia, optimizar el
rendimiento de la base de datos. En esta unidad estudiaremos este
concepto y otros relacionados con dicha relación.
2. Relaciones entre 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.
2.1. Ejemplo práctico
Para explicarlo, vamos a mostrar un ejemplo de base de datos de un centro educativo con dos tablas como son Alumnos y Grupos. Inicialmente estarán definidas de la siguiente manera:
En la tabla Alumnos tenemos toda la información que necesitamos sobre nuestros alumnos como:
- Su número de expediente.
- Su nombre y apellidos.
- Su fecha de nacimiento.
- El grupo al que pertenece el alumno.
- La ubicación del grupo, es decir, el aula donde están los alumnos de ese grupo (Primera planta, edificio anexo, etcétera).
- Cualquier tipo de comentario de interés: grupo de compensatoria, apoyo, etcétera.
Para la tabla Grupos
nos podíamos conformar con la denominación del grupo (1A, 1B, 3A, etc.)
pero le hemos añadido algunos datos que nos pueden resultar de interés:
- Número total de alumnos que tiene el grupo.
- El lugar donde se encuentra ubicado: Aula de música, Aula 205, Edificio principal, etc.
- Cualquier otro dato de interés: Compensatoria, grupo de apoyo, etc.
Si nos fijamos en los datos
podremos darnos cuenta que, al comprobar los datos incluidos en las
tablas de Alumnos y Grupos, existe información que se repite en ambas:
Esta situación no es
demasiado favorable cuando trabajamos con bases de datos donde
habitualmente la cantidad de información que se maneja es importante. La
solución pasa por relacionar las tablas con
información coincidente de modo que no exista duplicidad de información.
Todo esto, traducido a un lenguaje más natural sería: "Para qué
escribir dos veces lo mismo, si puedo hacerlo una sola y trabajar del
mismo modo".
Volviendo a nuestro ejemplo, si
relacionamos las tablas Alumnos y Grupos mediante el nombre del grupo
sería suficiente con indicar en la tabla Alumnos este valor para obtener
el número de alumnos del grupo, su ubicación y las posibles
observaciones:
2.2. Base de datos: Discoteca
Si nos fijamos en la base
de datos “Discoteca” podemos ver que se está repitiendo el mismo valor
muchas veces: por ejemplo, “CD” aparece en varias filas. Es decir, al
introducir el mismo valor de forma redundante se está posibilitando que
en algún momento lo escribamos mal, por ejemplo, “CS”, y tengamos un
nuevo soporte que no corresponde a ningún álbum, ya que ni siquiera
existe.
Puede ocurrir también que
todos los técnicos de música se pongan de acuerdo y decidan que el
soporte “CD” no tiene un nombre adecuado y que es mejor llamarlo
“CD-antiguo”. Entonces, en la tabla MUSICA, se debe ir uno a uno
cambiando el nombre y con cuidado de no equivocarse al teclear. Quizás
si tenemos cuatro álbumes de este soporte no nos parezca un gran
problema hacer este cambio cuatro veces pero si resulta que es una
colección de trescientos álbumes de este soporte puede que el problema
parezca más importante.
La solución a los problemas
anteriores está en separar la información que aparece repetida
continuamente en una nueva tabla SOPORTE e indicar de alguna forma en
nuestra base de datos que hay filas de la tabla MUSICA y de la tabla
SOPORTE que están relacionadas. |
|
|
|
Vamos a crear una nueva tabla para almacenar los distintos tipos de soporte para los álbumes de música.
Crear tabla SOPORTE
- Abre la base de datos "discoteca".
- Crea una nueva tabla en modo diseño.
- Introduce los campos que se indican a continuación:
Campo |
Tipo |
Longitud |
Descripción |
Soporte |
Texto [VARCHAR] |
20 |
Tipo de soporte en el que se encuentra almacenado (MP3, DVD, CD, etc.) |
- El diseño de la tabla quedará como se muestra:
- Una vez creado el campo, márcalo como
clave primaria. Para ello selecciona la fila y haz clic con el botón
derecho del ratón seleccionando la opción Llave primaria.
- Guarda la tabla con el nombre SOPORTE.
Añadir datos en la tabla SOPORTE
- Una vez guardada haz doble clic con el ratón para abrir la tabla en vista de datos.
- Inserta las siguientes filas:
|
|
|
|
3. Tipos de relaciones
Las condiciones para establecer vínculos
entre dos tablas no son siempre iguales, puesto que la manera en que se
relacionan las tablas entre sí da lugar a comportamientos diferentes.
En la estructura de cualquier base de datos encontramos principalmente
tres tipos de relaciones que se describen del siguiente modo:
- Uno a muchos.
- Muchos a muchos.
- Uno a uno.
3.1. Relación 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.
3.1.1. Ejemplo. Base de datos Discoteca
Si consideramos que un álbum sólo puede
estar grabado en un soporte, éste sería el tipo de relación que existe
entre la tabla SOPORTE y la tabla MUSICA ya que, por ejemplo, el
soporte MP3 tendrá varios álbumes relacionados que son de dicho
soporte, pero dado un álbum sólo está relacionado con un tipo de
soporte.
3.1.2. Ejemplo. Base de datos de un centro educativo
Otro ejemplo lo encontramos entre las
tablas ALUMNOS Y GRUPOS, ya que cualquier alumno puede pertenecer a un
solo grupo y cada grupo puede tener varios alumnos:
3.1.3. Clave ajena o externa
El campo relacionado de la tabla “muchos” se denomina Clave ajena o externa.
3.1.4. Ejemplos prácticos
Ejemplos de relaciones uno a muchos (1:n) los tenemos en:
Como podemos observar, existen varias relaciones:
- Entre el campo Actividad de la tabla Calendario y el campo IdActividad de la tabla Actividades. El campo Actividad es una clave ajena.
- Entre el campo EquipoA de la tabla Calendario y el campo IdEquipo de la tabla Equipos. El campo EquipoA es una clave ajena.
- Entre el campo Grupo de la tabla Alumnos y el campo IdCurso de la tabla Cursos. El campo Grupo es una clave ajena.
- Entre el campo Departamento de la tabla Profesores y el campo IdDepartamento de la tabla Departamentos. El campo Departamento es una clave ajena.
3.2. Relación 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.
3.2.1. Ejemplos prácticos
Un ejemplo de este tipo de relaciones
podría ser entre una tabla con países y otra con jefes de gobierno,
dado que, normalmente, un país sólo tiene un jefe de gobierno y un jefe
de gobierno lo es sólo de un país.
Otro ejemplo sería el de un tutor con un
grupo, ya que cada grupo solo puede tener un tutor y cada tutor solo
puede tener un grupo:
3.3. Relación 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.
3.3.1. Ejemplo. Base de datos Videoclub
Un ejemplo de este tipo lo tenemos en
la relación entre la tabla PELICULA y la tabla INTERPRETE (actores)
porque, dada una película en particular, puede tener muchos intérpretes,
y, viceversa, dado un intérprete, este puede haber intervenido en
muchas películas.
3.3.2. Ejemplo. Base de datos de un centro educativo
Otro ejemplo sería el de un instituto
donde las tablas PROFESORES y GRUPOS están relacionadas, ya que cada
profesor puede impartir clase a varios grupos y cada grupo puede tener
varios profesores:
Este tipo de relación sólo es posible si
se define una tercera tabla (denominada tabla de unión) cuya clave
principal consta de al menos dos campos: las claves externas de las
Tablas A y B. |
|
|
|
Cuestionario. Relaciones entre tablas
- Descarga el cuestionario de preguntas. DESCARGAR
- Renombra el archivo descargado como "relaciones".
- Abre el documento "relaciones".
- Contesta las preguntas del cuestionario.
- Guarda los cambios.
Subir el cuestionario
- Sube el fichero "relaciones" a la plataforma.
|
|
|
|
4. Establecer una relación uno a muchos (1:n)
A la hora de establecer una relación entre dos tablas es indispensable que se cumplan 3 requisitos:
- Ambas tablas deben tener un campo en común.
- Ambos campos deberán tener el mismo tipo (INTEGER, TEXTO, SMALL INTEGER, etc.) y el mismo tamaño.
- Uno de los campos deberá ser clave primaria en una de las dos tablas.
4.1. Base de datos: Discoteca
Según hemos explicado previamente,
existe claramente una relación del tipo uno a muchos (1:n) entre las
tablas MUSICA y SOPORTE. Y el campo "Soporte" de la tabla MUSICA será la
clave ajena o externa que relaciona con tabla SOPORTE.
Si consideramos que un álbum sólo puede
estar grabado en un soporte, éste sería el tipo de relación que existe
entre la tabla SOPORTE y la tabla MUSICA ya que, por ejemplo, el
soporte MP3 tendrá varios álbumes relacionados que son de dicho
soporte, pero dado un álbum sólo está relacionado con un tipo de
soporte.
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 dos tablas están relacionadas.
- Los números indican la cardinalidad. Es decir:
- (N) Dado un soporte (por ej. CD), puede haber muchos álbumes grabados en ese tipo de formato.
- (1) Dado un álbum, sólo está grabado en un tipo de soporte.
4.2. Inconsistencia de datos
Antes de definir una relación, debemos
asegurarnos que los datos son coherentes, es decir, que los campos que
están relacionados contienen la misma información.
En nuestro caso, debemos comprobar que
los valores contenidos en el campo "Soporte" de la tabla MUSICA se
corresponden con algún registro de la tabla SOPORTE. Por ejemplo, si
tenemos un álbum con soporte CD, éste ha de estar presente en la tabla
SOPORTE y el texto ha de coincidir tanto en mayúsculas como minúsculas. |
|
|
|
Comprobar consistencia de datos
Verifica que los datos contenidos en el
campo "Soporte" de la tabla MUSICA son coherentes con los datos de la
tabla SOPORTE. En caso necesario, modifica los datos que corresponda.
Relaciones. Añadir tablas
Vamos a crear una relación entre las tablas SOPORTE y MUSICA.
- Ve a la base de datos "discoteca".
- Cierra todas las tablas abiertas.
|
|
No es posible
establecer relaciones entre tablas abiertas, ya que al estar
introduciendo datos o modificando el diseño, éstas se encuentran
bloqueadas. |
|
|
- Ve al menú . Haz clic en el icono .
- Selecciona las tablas MUSICA y SOPORTE con el botón Añadir.
En nuestro caso, en la
tabla MUSICA tenemos un campo “Soporte” que hace referencia al tipo de
soporte en que está grabado el álbum. 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
Musica el campo “Soporte” debe ser del mismo tipo de datos que el campo
de la tabla Soporte. |
|
Los campos relacionados
no tienen porqué 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. |
|
|
Crear relación
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 “Soporte” de la tabla
Musica. Para ello:
- Arrastra del campo “Soporte” de
Musica al campo “Soporte” de Soporte. Base ha creado una relación uno a
muchos entre las 2 tablas.
- Guarda los cambios en la base de datos.
- Cierra la pantalla de relaciones.
|
|
|
|
5. 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. |
|
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á. |
|
|
|
|
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.
Caso 1. Introducir un álbum con un soporte que no existe en la tabla SOPORTE
- Haz clic en el botón Tablas de la Barra de Objetos.
- Ve a la tabla MUSICA y haz doble clic sobre ella.
- Introduce un nuevo registro con un soporte que no exista en la tabla SOPORTE. Por ejemplo:
Como podemos comprobar, Base nos muestra
un mensaje de error porque estamos insertando un registro con un
soporte 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 .
- Cierra la tabla MUSICA.
Caso 2. Modificar un soporte que tiene álbumes relacionados
- Ve a la tabla SOPORTE y haz doble clic sobre ella.
- Modifica datos en el registro CD para que ahora sea CD1. Por ejemplo:
Como podemos comprobar, Base nos muestra
un mensaje de error porque estamos modificando un registro de soporte
que contiene álbumes relacionados en la tabla MUSICA.
- Pulsa Aceptar.
- Haz clic a la izquierda sobre el lápiz con el botón derecho del ratón y elige la opción .
Caso 3. Eliminar un soporte que tiene álbumes relacionados
- Ve a la tabla SOPORTE y haz doble clic sobre ella.
- Elimina el registro con el tipo “CD”.
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:
Como podemos comprobar, Base nos muestra
un mensaje de error porque estamos borrando un registro de soporte que
contiene álbumes relacionados en la tabla MUSICA.
- Pulsa Aceptar.
- Haz clic a la izquierda sobre el lápiz con el botón derecho del ratón y elige la opción .
Cerrar la base de datos
- Cierra la tabla MUSICA.
- Guarda los cambios en la base de datos.
- Cierra la base de datos "discoteca".
|
|
|