Está en la página 1de 16

6.

Integridad en Sistemas de Bases


de Datos Relacionales
Objetivos
• Apreciar la necesidad de garantizar la integridad o
corrección de la información almacenada en una base de
datos
• Distinguir e identificar los diferentes tipos de reglas de
integridad de datos definidos por el estándar SQL-92
• Conocer los mecanismos que proporciona SQL-92 para
definir reglas o restricciones de integridad en un
esquema de base de datos

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 1

6. Integridad en Sistemas de Bases de Datos


Relacionales

Contenidos

6.1 Reglas de integridad: consideraciones generales y


componentes
6.2 Reglas de integridad en SQL-92
6.2.1. Reglas de integridad de dominio
6.2.2. Reglas de integridad de tabla base
6.2.3. Reglas de integridad generales
6.3 Comprobación de restricciones

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 2


6. Integridad en Sistemas de Bases de Datos
Relacionales
Bibliografía

[EN 2002] Elmasri, R.; Navathe, S.B.: Fundamentos de Sistemas de


Bases de Datos. 3ª Edición. Addison-Wesley. (Cap. 7 y 8)
[EN 1997] Elmasri, R.; Navathe, S.B.: Sistemas de bases de datos.
Conceptos fundamentales. 2ª Edición. Addison-Wesley
Iberoamericana. (Cap. 6 y 7)
[DD 1996] Date, C.J.; Darwen, H.: A Guide to the SQL Standard. 4th
Edition. Addison-Wesley. (Cap. 14)
[SKS 1998] Korth, H; Silberschatz, A., Sudarshan, S.: Fundamentos de
bases de datos . 3ª Edición. McGraw-Hill. (Cap. 6)

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 3

6.1 Reglas de integridad


• Integridad: consistencia o corrección de datos en la base de datos
• Las reglas de integridad (RI) no son específicas para cada usuario

Consideraciones generales
1. Nos interesan las reglas de integridad específicas de
una BD (reglas del negocio), además de RI Entidad, RI Referencial...
2. Veremos las RI definidas sobre relaciones base,
por estar restringidas a contener datos correctos (reflejar la realidad)
La regla “los títulos de las películas son únicos” se aplica a la
tabla base PELICULA, y a cualquier vista definida sobre ésta
¿Podemos definir RI sobre relaciones derivadas (sobre vistas)?
• Sería deseable
• La vista heredaría toda RI de sus relaciones base y podría añadir
nuevas (clave candidata nueva para la vista, p.ej.)
I Sólo consideraremos RI sobre relaciones base (por simplicidad)
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 4
6.1 Reglas de integridad
Consideraciones generales (y 2)
3. Nos interesa soporte de RI declarativo
No hablaremos de...
- Procedimientos almacenados (stored procedures), ni de
- Procedimientos disparados ( triggered procedures)
4. Una BD en un estado de integridad es correcta:
• No viola ninguna RI conocida por el SGBD, es decir,
• Satisface AND lógico de todas las RI definidas en su esquema
5. La integridad es importante en...
• DISEÑO (estructuras de datos y reglas de integridad adecuadas)
• EJECUCIÓN (corrección de la información)
6. RI son mantenidas en el Catálogo del Sistema
Subsistema de Integridad del SGBD:
• controla operaciones de usuario (INSERT,UPDATE,DELETE...)
• para asegurar que NO violan las reglas de integridad
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 5

6.1 Reglas de integridad


Componentes de una RI
m Nombre actor_cache_ok
- Regla almacenada en el Catálogo del Sistema bajo ese nombre
- Aparecerá en diagnósticos, producidos por el sistema como respuesta a
intentos de violación de la regla (mensajes de error al usuario)
m Restricción NOT EXISTS (SELECT * FROM ACTOR WHERE cache≤
≤ 0)
- Expresión booleana N Restricción de Integridad ⊆ Regla de Integridad
- La regla ... se satisface ⇔ la restricción es TRUE
es violada ⇔ la restricción es FALSE
m Respuesta a un intento de violación de la regla
- Indica al SGBD qué hacer si se intenta una operación que viola la RI
- Por defecto RECHAZAR (o rehusar) que implica...
· Deshacer los posibles daños causados por la operación
· Mostrar información de diagnóstico (mensaje)
- Podría ser un procedimiento de complejidad arbitraria: tratarErr(...)

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 6


6.1 Reglas de integridad
Creación, destrucción y tipos
• Creación de una regla de integridad... (en cualquier momento)
SGBD comprueba: ¿el estado actual de la BD satisface RI?
- Sí ð RI aceptada
- el sistema la almacena en el catálogo
- la regla es activada (entra en vigor)
ð SGBD controlará todo INSERT y UPDATE de caché en ACTOR
- No ð RI rechazada
• Destrucción de reglas de integridad
- el sistema elimina su definición del catálogo
• Las RIs pueden restringir los valores legales de...
- Dominio
- Atributo
- Relación
- Base de Datos
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 7

6.2 Reglas de integridad en SQL-92


Categorías de reglas de integridad
1. Restricciones de integridad de Dominio
– Asociadas a un dominio de datos específico
– Aplicadas a cada columna definida sobre el dominio
– No limitadas a la enumeración de valores posibles del dominio
» es una expresión de complejidad arbitraria que define un dominio
2. Restricciones de integridad de Tabla
– RIs de complejidad arbitraria incluidas en la definición de una tabla (relación)
– No limitadas a hacer referencia sólo a la tabla en la que son definidas
– Pueden ser restricciones de Atributo
restricciones de Clave Candidata
restricciones de Clave Externa
restricciones de Comprobación
û Una relación vacía cumple cualquier RI de tabla,
aunque esa RI sea “esta tabla no puede estar vacía ”

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 8


6.2 Reglas de integridad en SQL-92
Categorías de reglas de integridad (y 2)
3. Restricciones de integridad Generales
– RIs de complejidad arbitraria no incluidas en la definición de ninguna
tabla
– Son otro elemento más de la BD, al mismo nivel que una tabla o vista
– Se aplican a cualquier combinación de columnas de cualquier nº de
tablas
La paga mínima de los actores que actúan en una película es de 15.000€
CREATE ASSERTION IR1_paga_mínima
CHECK (SELECT MIN(paga) FROM Actua_en) ≥15000 ;
Todo actor debe haber participado al menos en una película
CREATE ASSERTION IR2_actor_en_película
CHECK (NOT EXISTS (SELECT * FROM Actor
WHERE codA NOT IN (SELECT actor FROM Actua_en)));

– Algunas RI generales pueden expresarse como RI de tabla


Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 9

6.2 Reglas de integridad en SQL-92


Consideraciones
• Una regla de integridad es independiente de cualquier
aplicación específica que acceda a la base de datos
» no contiene parámetros ni variables host
(referencias a variables de los programas de aplicación)

• Es útil ver la base de datos sujeta a una “RI gigante”...


AND de todas las RI...
- generales
- de tabla
- de dominio aplicadas a cada columna de las tablas

»Significado formal de la base de datos

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 10


6.2 Reglas de integridad en SQL-92
Características adicionales (pseudo-RIs)
• SQL rechaza todo intento de INSERT o UPDATE que
viole una especificación de tipo de datos

ejemplo: valor CHAR en columna definida como INTEGER

– Una especificación de tipo de datos puede verse como una «forma


primitiva» de restricción de dominio
– Una violación de una RI de dominio se detecta en tiempo de
ejecución

• SQL rechaza todo intento de INSERT o UPDATE sobre


una vista, si viola la condición de definición de la vista
– Siempre que se haya especificado la opción de verificación en la
definición de la vista ( WITH CHECK OPTION)

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 11

6.2 Reglas de integridad en SQL-92


Reglas de Integridad de Dominio
• Definición del conjunto de valores componentes de un
dominio:
- Enumeración de valores posibles: (‘marrón,‘gris’, ‘azul’, ‘verde’, ‘negro’)
- Expresión de definición: cache > 0 AND cache < 100

• RI como parte de la sentencia de definición del dominio


CREATE DOMAIN <nombre dominio> [ AS ] <tipo de datos>
[ DEFAULT <valor defecto> ]
[ [ CONSTRAINT <nomRestricción> ] CHECK (<condición>) ]+ ;

donde <valor defecto> = { literal | funciónSinArgum | NULL }


y funciónSinArgum es USER ó CURRENT_USER authorization-ID actual
SESSION_USER authorization-ID de sesión SQL actual
SYSTEM_USER ID del usuario del SO actual
CURRENT_DATE fecha del día
CURRENT_TIME hora actual
CURRENT_TIMESTAMP marca de tiempo actual
i ID=identificador
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 12
6.2 Reglas de integridad en SQL-92
Reglas de Integridad de Dominio (2)
CREATE DOMAIN Color AS VARCHAR(10)
DEFAULT ‘marrón’
CONSTRAINT color_válido
CHECK ( VALUE IN ( ‘marrón, ‘gris’, ‘azul’, ‘verde’, ‘negro’ ) );
CREATE DOMAIN Estado_civil CHAR(1)
CONSTRAINT estado_civil_ok CHECK ( VALUE IN (‘S’, ‘C’, ‘V’, ‘D’) ) ;

– NOT NULL no es una restricción de dominio válida


§CREATE DOMAIN Estado_civil AS CHAR(1) NOT NULL E Incorrecto
§CREATE DOMAIN Estado_civil AS CHAR(1)
CHECK (VALUE IS NOT NULL) E Correcto

• Alteración de un dominio
ALTER DOMAIN <nomdominio> ... ;
– Permite añadir y eliminar restricciones de integridad de dominio y
valor por defecto

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 13

6.2 Reglas de integridad en SQL-92


Reglas de Integridad de Dominio (y 3)
• Eliminación de un dominio
DROP DOMAIN <nomDominio> { RESTRICT | CASCADE } ;
§ Opción RESTRICT
- La eliminación falla si el dominio es referenciado en cualquier definición de
columna en una tabla
- En otro caso, tendrá éxito: el descriptor del dominio es eliminado del
catálogo
§ Opción CASCADE
- El dominio es eliminado del catálogo
- Las RI-dominio asociadas no son eliminadas, sino que cada columna
definida sobre el dominio...
· Es definida directamente sobre el tipo de datos subyacente al dominio
· Si no tiene DEFAULT explícito, toma el del dominio (si éste lo tenía)
· Hereda toda restricción de integridad asociada al dominio,
- convertida en una restricción de tabla,
- sustituyendo VALUE por el nombre de la columna

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 14


6.2 Reglas de integridad en SQL-92
Reglas de Integridad de Tabla
• Restricción asociada a una tabla específica N Puede
· la RI está definida como parte de la definición de la tabla, afectar a
· la RI no existe si la tabla asociada no existe y varias tablas
· eliminar la tabla implica eliminar la RI
• Toda RI-tabla puede expresarse como una RI-general
(excepto la parte de una RI de clave externa que indica la acción de
mantenimiento de la integridad referencial)
• RI especificada dentro de CREATE TABLE
CREATE TABLE <nombre tabla> ( <lista de elementos de tabla> ) ;
donde los elementos pueden ser:
- Definición de columna, que puede incluir RIs de atributo
- Definición de... (precedida o no de CONSTRAINT <nombre restricción> )
· Restricción de clave candidata
· Restricción de clave externa
· Restricción de comprobación (CHECK)
• RI añadida/eliminada con ALTER TABLE <nombre tabla>...
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 15

6.2 Reglas de integridad en SQL-92


Reglas de Integridad de Tabla (2)

1. Definición de Columna - RI de Atributo


• Especificación del dominio del atributo y otras RI de atributo
• No necesita sentencia de creación explícita: es parte de la definición
de atributo, dentro de la sentencia de creación de la tabla:
CREATE TABLE Actor
( nombre VARCHAR(30) NOT NULL,
cache INT(9) NOT NULL DEFAULT 2000,
colorOjos Color NOT NULL,
agencia CHAR(4), ...) ;
NToda RI-Atributo es comprobada inmediatamente:
– todo intento de INSERT o UPDATE (sobre el atributo) con un
valor∉
∉ dominio, es rechazado al instante
» La respuesta a un intento de violación siempre es RECHAZAR
• Si se especifica un dominio para un atributo, la comprobación es
derivada hacia la comprobación de la restricción del dominio
• Una RI-atributo se destruye al eliminar el atributo de la tabla
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 16
6.2 Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (3)

2. Definición de Restricción de Clave Candidata


• Clave Primaria PRIMARY KEY (<lista atributos>) N incluye RI Entidad
• Clave Alternativa UNIQUE (<lista atributos>)
3. Definición de Restricción de Clave Externa
FOREIGN KEY (<atributos>) REFERENCES <tabla> (<atributos>)
[ ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL } ]
[ ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL } ]
ñ acciones referenciales posibles
• Cualquier (combinación de) columna(s) puede ser clave externa
• SQL-92 permite que una clave ajena se refiera a una clave
candidata (N no sólo PKs)
• Referencia desde FK de la tabla T1 a una CK de la tabla T2...
» Asegurar que cada T2.FK contiene un valor existente en T2.CK
es el problema de la integridad referencial

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 17

6.2 Reglas de integridad en SQL-92


Reglas de Integridad de Tabla (4)

• Pueden existir ciclos referenciales y auto-referencias


• SQL-92 permite (¡por supuesto!) que una FK pueda contener NULL
– salvo si se especifica NOT NULL para la FK en el CREATE TABLE
• La FK y la CK a la que referencia, deben...
– contener el mismo nº de componentes (columnas o atributos) y
– éstos estar definidos sobre los mismos dominios
• Si FK no es compuesta, no se necesita cláusula FOREIGN KEY...
CREATE TABLE Actúa_en CREATE TABLE Actúa_en
(actor ... , (actor ... REFERENCES Actor(codA) ...,
film ... , film ... REFERENCES Película(codP) ...,
papel ... , papel ... ,
PRIMARY KEY (actor, film), PRIMARY KEY (actor, film)
FOREIGN KEY (actor) ... ) ;
REFERENCES Actor(codA)...,
FOREIGN KEY (film)
REFERENCES Película(codP)...
... ) ;
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 18
6.2 Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (5)

Acciones referenciales (recordatorio)


– Mantenimiento de integridad referencial ante intentos de violación
– Ejecución de operaciones adicionales que dejan la BD consistente
ON DELETE...
– Indica la regla de borrado para filas de T1 respecto de T2.FK
Qué ocurre si se intenta eliminar una fila r1 de T1 y existe alguna fila r2 en T2 que le
hace referencia (e.d. contiene un valor r2.FK = r1.CK)
– Acciones referenciales posibles:
a. NO ACTION (opción por omisión) Rechazar la operación de eliminación sobre T1
b. CASCADE Eliminar junto con r1 toda fila r2 de T2 que se refiera a r1 (propagación)
c. SET DEFAULT
Asignar su valor por defecto a cada componente de la FK en toda fila r2, y eliminar r1
» Debe existir una fila en T1 con cada componente de C K a su valor por defecto
d. SET NULL
Asignar NULL a cada componente de la FK en todas las filas r2, y eliminar r1
» Cada componente de la FK debe tener nulos permitidos
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 19

6.2 Reglas de integridad en SQL-92


Reglas de Integridad de Tabla (6)

ON UPDATE...
– Indica la regla de actualización para T1.CK respecto de T2.FK
Qué ocurre si se intenta modificar la clave candidata dentro de una fila r1 de T1 y
existe alguna fila r2 en T2 que le hace referencia (contiene valor r2.FK = r1.CK)
– Acciones referenciales posibles:
a. NO ACTION (opción por omisión) Rechazar la actualización sobre T1.CK
b. CASCADE Propagar la actualización de C K a toda fila r2 de T2 que se refiera a r1
c. SET DEFAULT
Asignar su valor por defecto a los componentes de FK que corresponden a
componentes modificados de T1.CK, en todas las filas r2, y actualizar r1
» Debe existir una fila en T1 con cada componente de C K a su valor por defecto
d. SET NULL
Asignar NULL a los componentes de la FK correspondientes a componentes modificados
en T1.CK, en todas las filas r2, y actualizar r1
» Tales componentes de la FK debe tener nulos permitidos

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 20


6.2 Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (7)

• Comportamiento ante una operación de manipulación de


datos, en función de la acción referencial especificada
Sea T2.FK una clave externa hacia la clave candidata T1.CK ...
q La definición de FK no incluye ON DELETE ni ON UPDATE...
§ INSERT en T2 o UPDATE de T2.FK
si el valor de T2.FK no existe en T1.CK ð Rechazo (NO ACTION)
§ DELETE en T1 o UPDATE de T1.CK
si alguna tupla de T2 le hace referencia ð Rechazo (NO ACTION)

q La definición de FK incluye ON DELETE o bien ON UPDATE...


§ INSERT en T2 o UPDATE de T2.FK
si el valor de T2.FK no existe en T1.CK ð Rechazo (NO ACTION)
§ DELETE en T1 o UPDATE de T1.CK
si alguna tupla de T2 le hace referencia ðejecución de la acción
referencial especificada en las cláusulas
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 21

6.2 Reglas de integridad en SQL-92


Reglas de Integridad de Tabla (y 8)

4. Definición de Restricción de Comprobación (CHECK)


• Regla que se refiere únicamente a una tabla
• Puede especificar restricciones adicionales para algún atributo
El cache de un actor siempre está entre 300 y 1200€
CREATE TABLE ACTOR ( ...,
CONSTRAINT actor_caché_ok
CHECK ( cache > 300 AND cache < 1200 ), ... );
• Puede definir restricciones que involucran varios atributos de la tabla
Toda película se estrena después de finalizar su rodaje
CREATE TABLE PELICULA ( ...,
CONSTRAINT película_fechas_ok
CHECK ( fecha_fin_rodaje < fecha_estreno ), ... );

I Toda RI-Tabla base es comprobada inmediatamente:


• Una operación de modificación sobre la tabla incluye el chequeo de
todas sus RI (como paso final de la operación) + (una posible) acción

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 22


6.2 Reglas de integridad en SQL-92
Reglas de Integridad Generales (asertos)
• Restricción de complejidad arbitraria que involucra cualquier nº de
columnas de cualquier nº de tablas
• Elemento de BD, independiente de tablas/vistas existentes
• Especifica restricciones de integridad que pueden no ser...
ü de clave (primaria o alternativa)
ü de integridad referencial (clave ajena)
• Tiene un nombre y consta de una condición (cláusula CHECK)
• Creación de una RI general (aserción o aserto)
CREATE ASSERTION <nombre restricción> ð nombre obligatorio
CHECK ( <condición> ) ;
– Si una tupla de la BD hace que condición=FALSE, la restricción
habrá sido violada
– Un estado de la BD satisface un aserto si ninguna combinación de
tuplas de dicho estado viola la restricción que incluye
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 23

6.2 Reglas de integridad en SQL-92


Reglas de Integridad Generales (2)
– Normalmente, <condición> se expresa en negativo:
todo X satisface Y ≡ ningún X satisface NO( Y )
Todo actor representado por la agencia 1 debe cobrar 300€ o más
CREATE ASSERTION age1_cache_ok
CHECK (NOT EXISTS (SELECT * FROM Actor
WHERE agencia=1 AND cache<300)) ;
Ninguna agencia representa a más de 40 actores
CREATE ASSERTION num_actores_age_ok
CHECK (NOT EXISTS (SELECT * FROM Actor
GROUP BY codAge
HAVING COUNT(*) > 40)) ;
Todo actor no protagonista de una película cobra menos que cq protagonista
CREATE ASSERTION paga_actores_ok
CHECK (NOT EXISTS (SELECT * FROM Actua_en ACT
WHERE papel<>‘protagonista’ AND
paga >= ANY (SELECT paga FROM Actua_en PROTA
WHERE ACT.film=PROTA.film
AND PROTA.papel=‘protagonista’));
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 24
6.2 Reglas de integridad en SQL-92
Reglas de Integridad Generales (3)
Debe de existir al menos una distribuidora de películas
CREATE ASSERTION existencia_distribuidora
CHECK ( 0 < SELECT COUNT (*) FROM Distribuidora ) ;
N este aserto...
- debe crearse una vez que ya exista alguna tupla en DISTRIBUIDORA
- una operación DELETE puede o no violarlo, pero nunca lo hará un
INSERT

El código de los guiones es único (≡si hay 2 guiones con igual código, son el mismo)
CREATE ASSERTION guión_código_único
NOT EXISTS (SELECT * FROM Gui ón G1, Guión G2
WHERE G1.codG = G2. codG
AND NOT ( G1.titulo=G2.titulo AND
G1.descrip= G2.descrip) );
N este aserto...
- Equivale a especificar UNIQUE( codG ) en el CREATE TABLE

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 25

6.2 Reglas de integridad en SQL-92


Reglas de Integridad Generales (y 4)
Los actores y películas anotados en la relación ACTUA_EN deben existir
CREATE ASERTION actúa_en_ok
CHECK (NOT EXISTS (SELECT * FROM Actúa_en
WHERE actor NOT IN (SELECT codA FROM Actor)
OR film NOT IN ( SELECT codP FROM Película)));
N este aserto...
- Equivale a especificar...
FOREIGN KEY (actor) REFERENCES Actor(codA)...
y FOREIGN KEY (film) REFERENCES Película(codP)...
... dentro del CREATE TABLE Actor (...)

• Eliminación de una RI general


DROP ASSERTION <nomRestricción> ;
N Sin opción RESTRICT o CASCADE
– Elimina el aserto del catálogo

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 26


6.2 Reglas de integridad en SQL-92
Disparadores - antiguas versiones de SQL
• En muchos casos conviene especificar una acción que
ejecutar (disparar) tras la violación de una restricción:
- Abortar la transacción que provoca la violación, o
- Informar de ello al usuario (mensaje), o
- Ejecutar cierto procedimiento, o
- Disparar otras actualizaciones
» Esto se consigue mediante los disparadores o triggers
• Definición de un disparador
DEFINE TRIGGER <nombre> ON <lista tablas> :
<condición> ACTION_PROCEDURE <llamada a procedimiento>

– Especifica una condición y la acción que realizar si ésta se cumple


– La ejecución del trigger se considera parte de la ejecución de la
operación que intentó violar la RI

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 27

6.2 Reglas de integridad en SQL-92


Disparadores - antiguas versiones de SQL (y 2)
Si se detecta que algún actor en una película percibe una paga mayor que la de
un protagonista, pedir confirmación para permitir dicho estado o no
DEFINE TRIGGER Disp_Paga ON Actúa_en ACT, Actúa_en PROTA:
ACT.film=PROTA.film AND ACT.papel <> ‘protagonista’
AND PROTA.papel = ‘protagonista’ AND ACT.paga >= PROTA.paga
ACTION_PROCEDURE SolicitarAprobacion(...) ;

• Combinan los enfoques declarativo y procedimental


- La condición del disparador es declarativa
- Su acción opera por procedimientos

• ASSERTION vs. TRIGGER


- ASSERTION prohibe realizar una actualización que viola el aserto
(es decir, que hace FALSE la condición)
- TRIGGER puede permitir la actualización que cumple la condición
(es decir, que viola una RI), pero ejecuta una acción (que puede
reparar la violación, dejando consistente la BD)
» Las condiciones especificadas en una y otro son inversas
Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 28
6.3 Comprobación de restricciones
• En general, el SGBD comprueba una RI de forma inmediata,
como último paso de ejecución de operación o sentencia SQL
– Si la RI es violada, la operación o sentencia se cancela y no tiene
efecto sobre la base de datos
• A veces es necesario que ciertas restricciones no sean
comprobadas hasta pasado un tiempo, pues si se hiciera
de inmediato, siempre fallarían
Ciclo referencial T1 T2 Inicialmente, T1 y T2 están vacías
CREATE TABLE T1 CREATE TABLE T2
( atrib1 ... , ( atrib2 ... ,
FOREIGN KEY (atrib1) FOREIGN KEY (atrib2)
REFERENCES T2 (...) ... , REFERENCES T1 (...) ... ,
... ) ; ... ) ;
- Con chequeo inmediato de estas FKs (RI referencial), toda inserción
de filas en cualquier tabla fallaría, pues nunca encontraría la fila
destino en la otra tabla

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 29

6.3 Comprobación de restricciones


Modos de comprobación
• En un momento dado, dentro de cierta transacción SQL, toda
restricción de integridad debe estar en modo...
- INMEDIATE: será comprobada inmediatamente, o
- DEFERRED: será chequeada al final de la transacción (diferida)

N Para algunas restricciones de integridad, la comprobación


diferida no tiene sentido:
• Restricciones de dominio
• Restricción de atributo NOT NULL y
• Restricciones de clave candidata

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 30


6.3 Comprobación de restricciones
Modos de comprobación (2)

• Una definición de restricción de integridad puede incluir


[ INITIALLY { DEFERRED | IMMEDIATE } ]
[ [ NOT ] DEFERRABLE ]
§ INITIALLY DEFERRED, o bien INITIALLY IMMEDIATE
– especifica el modo inicial de la RI, es decir, el modo en el que está tras
de ser definida (creada) y al comienzo de cada transacción SQL
§ DEFERRABLE, o bien NOT DEFERRABLE
– indica si la RI puede pasar a modo DEFERRED
§ Si no se indica ningún modo inicial, se asume INITIALLY IMMEDIATE
§ Si se especifica INITIALLY IMMEDIATE (o se asume)...
- Si no se indica DEFERRABLE ni NOT DEFERRABLE, se asume NOT
DEFERRABLE
§ Si se especifica INITIALLY DEFERRED, no puede indicarse NOT DEFERRABLE
- Puede ponerse DEFERRABLE, aunque se supone

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 31

6.3 Comprobación de restricciones


Modos de comprobación (y 3)
• Sentencia SET CONSTRAINTS
SET CONSTRAINTS {<restricciones> | ALL} { DEFERRED | IMMEDIATE}
- Establece el modo para varias RIs respecto de la transacción SQL
actual
- Toda RI mencionada debe ser DEFERRABLE
· pues ALL ≡ todas las RIs diferibles
§ DEFERRED hace que todas las RI (mencionadas) pasen a modo diferido
§ IMMEDIATE hace que pasen a modo inmediato y son comprobadas:
si falla la comprobación de alguna RI, falla SET CONSTRAINTS y
ninguna RI cambia de modo

• COMMIT Æ SET CONSTRAINTS ALL IMMEDIATE


– Si una comprobación de alguna RI falla
ð COMMIT falla
ð la transacción completa falla (rollback)

Tema 6. Integridad en Sistemas de Bases de Datos Relacionales 32

También podría gustarte