4.3. Regla de integridad referencial

4.3. Regla de integridad referencial Dataprix 11 Diciembre, 2009 - 12:37
Observad que todo lo que impone la regla de integridad referencial
viene implicado por la misma noción
de clave foránea que se ha explicado en
el subapartado 2.5 de esta unidad.

La regla de integridad referencial está relacionada con el concepto de clave foránea. Concretamente, determina que todos los valores que toma una clave foránea deben ser valores nulos o valores que existen en la clave primaria que referencia.

Ejemplo

Si tenemos las siguientes relaciones:

•Relación DESPACHOS:

DESPACHOS

edificio

número

superficie

Marina

120

10

Marina

122

15

Marina

230

20

Diagonal

120

10

 •Relación EMPLEADOS:

EMPLEADOS

DNI

nombre

apellido

edificiodesp

númerodesp

40.444.255

Juan

García

Marina

120

 

33.567.711

Marta

Roca

Marina

120

55.898.425

Carlos

Buendía

Diagonal

120

77.232.144

Elena

Pla

NULO

NULO

donde edificiodesp y númerodesp de la relación EMPLEADOS forman una clave foránea que referencia la relación DESPACHOS. Debe ocurrir que los valores no nulos de edificiodesp y númerodesp de la relación EMPLEADOS estén en la relación DESPACHOS como valores de edificio y número. Por ejemplo, el empleado <40.444.255, Juan García, Marina, 120> tiene el valor Marina para edificiodesp, y el valor 120 para númerodesp, de modo que en la relación DESPA CHOS hay un despacho con valor Marina para edificio y con valor 120 para número.

La necesidad de la regla de integridad relacional proviene del hecho de que las claves foráneas tienen por objetivo establecer una conexión con la clave primaria que referencian. Si un valor de una clave foránea no estuviese presente en la clave primaria correspondiente, representaría una referencia o una conexión incorrecta.

Referencia incorrecta

Supongamos que en el ejemplo anterior hubiese un empleado con los valores <56.666.789, Pedro, López, Valencia, 325>. Ya que no hay un despacho con los valores Valencia y 325 para edificio y número, la tupla de este empleado hace una referencia incorrecta; es decir, indica un despacho para el empleado que, de hecho, no existe.

A continuación explicamos la regla de modo más preciso.

La regla de integridad referencial establece que si el conjunto de atributos CF es una clave foránea de una relación R que referencia una relación S (no necesariamente diferente de R), que tiene por clave primaria CP, entonces, para toda tupla t de la extensión de R, los valores para el conjunto de atributos CF de t son valores nulos, o bien valores que coinciden con los valores para CP de alguna tupla s de S.
En el caso de que una tupla t de la extensión de R tenga valores para CF que coincidan con los valores para CP de una tupla s de S, decimos que t es una tupla que referencia s y que s es una tupla que tiene una clave primaria referenciada por t.

Un SGBD relacional tendrá que hacer cumplir esta regla de integridad. Deberá efectuar comprobaciones cuando se produzcan las siguientes operaciones:

a)  Inserciones en una relación que tenga una clave foránea.

b)  Modificaciones que afecten a atributos que pertenecen a la clave foránea de una relación.

c)  Borrados en relaciones referenciadas por otras relaciones.

d)  Modificaciones que afecten a atributos que pertenecen a la clave primaria de una relación referenciada por otra relación.

Ejemplo

Retomamos el ejemplo anterior, donde edificiodesp y númerodesp de la relación EMPLEADOS forman una clave foránea que referencia la relación DESPACHOS:

•Relación DESPACHOS:

DESPACHOS

edificio

número

superficie

Marina

120

10

Marina

122

15

Marina

230

20

Diagonal

120

10

 •Relación EMPLEADOS:

EMPLEADOS

DNI

nombre

apellido

edificiodesp

númerodesp

40.444.255

Juan

García

Marina

120

33.567.711

Marta

/td>

Roca

Marina

/td>

120

55.898.425

Carlos

Buendía

Diagonal

120

77.232.144

Elena

Pla

NULO

NULO

Las siguientes operaciones provocarían el incumplimiento de la regla de integridad referencial:

•   Inserción de <12.764.411, Jorge, Puig, Diagonal, 220> en EMPLEADOS.

•   Modificación   de   <40.444.255,   Juan,   García,   Marina,   120>   de   EMPLEADOS   por
<40.444.255, Juan, García, Marina, 400>.

•   Borrado de <Marina, 120, 10> de DESPACHOS.

•   Modificación de <Diagonal, 120, 10

 

Un SGBD relacional debe procurar que se cumplan las reglas de integridad del modelo.  Una forma habitual  de  mantener  estas reglas  consiste en  rechazar toda operación de actualización que deje la base de datos en un estado en el que alguna regla no se cumpla. En algunos casos, sin embargo, el SGBD tiene la posibilidad de aceptar la operación y efectuar acciones adicionales compensatorias, de modo que el estado que se obtenga satisfaga las reglas de integridad, a pesar de haber ejecutado la operación.

Esta última política se puede aplicar en las siguientes operaciones de actualización que violarían la regla de integridad:

a)  Borrado de una tupla que tiene una clave primaria referenciada.

b)  Modificación de los valores de los atributos de la clave primaria de una tupla que tiene una clave primaria referenciada.

En los casos anteriores, algunas de las políticas que se podrán aplicar serán las siguientes: restricción, actualización en cascada y anulación. A continuación explicamos el significado de las tres posibilidades mencionadas.

 

4.3.1. Restriccion

4.3.1. Restriccion Dataprix 11 Diciembre, 2009 - 12:44

La política de restricción consiste en no aceptar la operación de actualización.

Más concretamente, la restricción en caso de borrado, consiste en no permitir borrar una tupla si tiene una clave primaria referenciada por alguna clave foránea.
De forma similar, la restricción en caso de modificación consiste en no permitir modificar ningún atributo de la clave primaria de una tupla si tiene una clave primaria referenciada por alguna clave foránea.

Ejemplo de aplicación de la restricción

Supongamos que tenemos las siguientes relaciones:

•Relación CLIENTES:

CLIENTES

numcliente

...

10

15

18

•Relación PEDIDOS_PENDIENTES

PEDIDOS_PENDIENTES

numped

...

numcliente*

1.234

10

1.235

10

1.236

15

 * {numcliente} referencia CLIENTES.

a) Si aplicamos la restricción en caso de borrado y, por ejemplo, queremos borrar al cliente número 10, no podremos hacerlo porque tiene pedidos pendientes que lo referencian.
 

 

4.3.2. Actualizacion en cascada

4.3.2. Actualizacion en cascada Dataprix 11 Diciembre, 2009 - 12:47

La política de actualización en cascada consiste en permitir la operación de actualización de la tupla, y en efectuar operaciones compensatorias que propaguen en cascada la actualización a las tuplas que la referenciaban; se actúa de este modo para mantener la integridad referencial.

Más concretamente, la actualización en cascada en caso de borrado consiste en permitir el borrado de una tupla t que tiene una clave primaria referenciada, y borrar también todas las tuplas que referencian t.
De forma similar, la actualización en cascada en caso de modificación consiste en permitir la modificación de atributos de la clave primaria de una tupla t que tiene una clave primaria referenciada, y modificar del mismo modo todas las tuplas que referencian t.

Ejemplo de aplicación de la actualización en cascada

Supongamos que tenemos las siguientes relaciones:

•Relación EDIFICIOS:

EDIFICIOS

nombreedificio

...

Marina

Diagonal

 •Relación DESPACHOS:

DESPACHOS

edificio*

número

superficie

Marina

120

10

Marina

122

15

Marina

230

20

Diagonal

120

10

* {edificio} referencia EDIFICIOS.

a) Si aplicamos la actualización en cascada en caso de borrado y, por ejemplo, queremos borrar el edificio Diagonal, se borrará también el despacho Diagonal 120 que hay en el edificio,
y nos quedará:

•Relación EDIFICIOS:

EDIFICIOS

nombreedificio

...

Marina

•Relación DESPACHOS:

DESPACHOS

edificio*

número

superficie

Marina

120

10

Marina

122

15

Marina

230

20

* {edificio} referencia EDIFICIOS.

b) Si aplicamos la actualización en cascada en caso de modificación, y queremos modificar
el nombre del edificio Marina por Mar, también se cambiará Marina por Mar en los despachos Marina 120, Marina 122 y Marina 230, y nos quedará:

•Relación EDIFICIOS:

EDIFICIOS

nombreedificio

...

Mar

 

•Relación DESPACHOS:

DESPACHOS

edificio*

número

superficie

Mar

120

10

Mar

122

15

Mar

230

20

 

4.3.3. Anulacion

4.3.3. Anulacion Dataprix 11 Diciembre, 2009 - 12:51

 

Esta política consiste en permitir la operación de actualización de la tupla y en efectuar operaciones compensatorias que pongan valores nulos a los atributos de la clave foránea de las tuplas que la referencian; esta acción se lleva a cabo para mantener la integridad referencial.

Puesto que generalmente los SGBD relacionales permiten establecer que un determinado atributo de una relación no admite valores nulos, sólo se puede aplicar la política de anulación si los atributos de la clave foránea sí los admiten.

Más concretamente, la anulación en caso de borrado consiste en permitir el borrado de una tupla t que tiene una clave referenciada y, además,  modificar  todas  las  tuplas  que  referencian  t,  de  modo  que  los atributos de la clave foránea correspondiente tomen valores nulos.
De forma similar, la anulación en caso de modificación consiste en permitir la modificación de atributos de la clave primaria de una tupla t que tiene una clave referenciada y, además, modificar todas las tuplas que referencian t, de modo que los atributos de la clave foránea correspondiente tomen valores nulos.

Ejemplo de aplicación de la anulación

El mejor modo de entender en qué consiste la anulación es mediante un ejemplo. Tenemos las siguientes relaciones:

•Relación VENDEDORES:

VENDEDORES

numvendedor

...

1

2

3

• Relación CLIENTES:

CLIENTES

numcliente

...

vendedorasig*

23

1

35

1

38

2

42

2

50

3

* {vendedorasig} referencia VENDEDORES.

a) Si aplicamos la anulación en caso de borrado y, por ejemplo, queremos borrar al vendedor número 1, se modificarán todos los clientes que lo tenían asignado, y pasarán a tener un valor nulo en vendedorasig. Nos quedará:

•Relación VENDEDORES:

 

 

VENDEDORES

numvendedor

...

2

3

•Relación CLIENTES:

CLIENTES

numcliente

...

vendedorasig*

23

NULO

35

NULO

38

2

42

2

50

3

* {vendedorasig} referencia VENDEDORES.

b) Si aplicamos la anulación en caso de modificación, y ahora queremos cambiar el número del vendedor 2 por 5, se modificarán todos los clientes que lo tenían asignado y pasarán a tener un valor nulo en vendedorasig. Nos quedará:

•Relación VENDEDORES:

 

 

VENDEDORES

numvendedor

...

5

3

•Relación CLIENTES:

CLIENTES

numcliente

...

vendedorasig*

23

NULO

35

NULO

38

NULO

42

NULO

50

3

 

4.3.4. Seleccion de la politica de mantenimiento de la integridad referencial

4.3.4. Seleccion de la politica de mantenimiento de la integridad referencial Dataprix 11 Diciembre, 2009 - 12:56
La forma de definir estas políticas de mantenimiento de la integridad con
el lenguaje SQL se explica en la unidad“El lenguaje SQL” de este curso.

Hemos visto que en caso de borrado o modificación de una clave primaria referenciada por alguna clave foránea hay varias políticas de mantenimiento de la regla de integridad referencial.

El diseñador puede elegir para cada clave foránea qué política se aplicará en caso de borrado de la clave primaria referenciada,

Aplicación de políticas diferentes
Puede ocurrir que, para una determinada clave foránea, la política adecuada en caso de borrado sea diferente de la adecuada en caso de modificación. Por ejemplo, puede ser necesario aplicar la restricción en caso de borrado y la actua- lización en cascada en caso de modificación.
 

y cuál en caso de modificación de ésta. El diseñador deberá tener en cuenta el significado de cada clave foránea concreta para poder elegir adecuadamente.