1 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
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
2
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
3 Tema 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)
6. Integridad en Sistemas de Bases de Datos
Relacionales
4 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
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 basePELICULA, y a cualquier vistadefinida sobre ésta
¿Podemos definir RI sobre relaciones derivadas (sobre vistas)?
• Sería deseable
• La vista heredaríatoda RI de sus relaciones base y podría añadir
nuevas(clave candidata nueva para la vista, p.ej.)
I
Sóloconsideraremos RI sobre relaciones base(por simplicidad)6.1 Reglas de integridad
Consideraciones generales
• Integridad: consistencia o corrección de datos en la base de datos • Las reglas de integridad (RI) noson específicas para cada usuario
5 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
3.
Nos interesa
soporte
de RI
declarativo
Nohablaremos de...- Procedimientos almacenados (stored procedures), ni de - Procedimientos disparados (triggered procedures)
4. Una BD en un
estado de integridad
es correcta
:
• No viola ninguna RIconocida por el SGBD, es decir,
• Satisface ANDlógico de todas las RI definidas en su esquema
5.
La
integridad
es
importante
en...
• DISEÑO(estructuras de datosy reglas de integridadadecuadas)
• EJECUCIÓN(corrección de la información)
6. RI son
mantenidas
en
el
Catálogo
del Sistema
Subsistema de Integridaddel SGBD:
• controla operacionesde usuario(INSERT,UPDATE,DELETE...)
• para asegurar que NO violan las reglas de integridad
Consideraciones generales
(y 2)6
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 NNRestricción de Integridad
⊆
⊆
Regla de Integridad - La regla ... se satisface ⇔ la restricción es TRUEes violada ⇔ la restricción es FALSE
m
Respuesta
a un intento de violaciónde 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ñoscausados por la operación · Mostrar información de diagnóstico(mensaje)
- Podría ser un procedimiento de complejidad arbitraria: tratarErr(...)
6.1 Reglas de integridad
7 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
•
Creación
de una regla de integridad...
(en cualquier momento)SGBD comprueba:
¿el
estado actual
de la
BD satisface RI
?
-
Sí
ð
RIaceptada
- el sistema la almacena en elcatálogo - la regla es activada(entra en vigor)
ðSGBD controlará todo INSERT yUPDATEde caché en ACTOR
-
No
ð
RI rechazada
•
Destrucción
de reglas de integridad
- el sistema elimina su definicióndel catálogo
• Las RIs pueden
restringir los valores legales
de
...
-
Dominio
-
Atributo
-
Relación
-
Base de Datos
6.1 Reglas de integridad
Creación, destrucción y tipos
8 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
1.
Restricciones de integridad
d
e
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ónde 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íacumple cualquier RI de tabla, aunque esa RI sea “esta tabla no puede estar vacía”
6.2 Reglas de integridad en SQL-92
9 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
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 tablao 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 ASSERTIONIR1_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 generalespueden expresarse como RI de tabla
Categorías de reglas de integridad
(y 2)10
• 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”...
ANDde todas las RI...- generales
- de
tabla
- de
dominio
aplicadas a cada columna de las tablas»Significado formal
de la base de datos
6.2 Reglas de integridad en SQL-92
11 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
• SQL rechaza todo intento de
INSERT
o
UPDATE
que
viole una especificación de
tipo de datos
ejemplo: valor CHARen columna definida como INTEGER
– Una especificación de tipo de datospuede verse como una «forma primitiva» de restricción de dominio
– Una violación de una RI de dominiose 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ónen la definición de la vista (WITH CHECK OPTION)
6.2 Reglas de integridad en SQL-92
Características adicionales
(pseudo-RIs)
12 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
•
Definición del conjunto de valores componentes de un
dominio
:-Enumeraciónde valoresposibles: (‘marrón,‘gris’, ‘azul’, ‘verde’, ‘negro’)
-Expresiónde 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ónSinArgumes USER ó CURRENT_USERauthorization-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
iID=identificador
6.2 Reglas de integridad en SQL-92
13 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
CREATE DOMAINColor AS VARCHAR(10) DEFAULT‘marrón’
CONSTRAINT color_válido
CHECK (VALUEIN( ‘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 EIncorrecto §CREATE DOMAIN Estado_civil AS CHAR(1)
CHECK (VALUE IS NOT NULL) ECorrecto
•
Alteración
de un dominio
ALTER DOMAIN<nomdominio>...;
– Permite añadir y eliminar restriccionesde integridad de dominio y valor por defecto
Reglas de Integridad de Dominio
(2)14
•
Eliminación
de un dominio
DROP DOMAIN<nomDominio> { RESTRICT| CASCADE } ;
§OpciónRESTRICT
- La eliminación fallasi el dominioes referenciadoen cualquier definición de columnaen una tabla
- En otro caso, tendrá éxito: el descriptor del dominio es eliminadodel 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 eltipo de datos subyacenteal dominio · Si no tiene DEFAULTexplícito, toma el del dominio (si éste lo tenía) ·Heredatoda restricción de integridad asociada al dominio,
-convertida en una restricción de tabla,
- sustituyendo VALUEpor el nombre de la columna
6.2 Reglas de integridad en SQL-92
15 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
• Restricción
asociada a
una
tabla específica
· la RI está definida como parte de la definición de la tabla, · la RI no existe si la tabla asociada no existe y
· eliminar la tabla implica eliminar la RI
• Toda
RI-tabla
puede expresarse como una
RI-general
(excepto la parte deuna RI de clave externaque indica la acción de mantenimiento de la integridad referencial)
• RI
especificada
dentro de
CREATE TABLECREATE TABLE <nombre tabla> ( <lista de elementosde tabla> ) ;
donde los elementospueden 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>...6.2 Reglas de integridad en SQL-92
Reglas de Integridad de Tabla
N NPuede afectar a varias tablas
16 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
1. Definición de Columna
-
RI de Atributo
•Especificación del dominio del atributoy otrasRIde atributo • No necesita sentencia de creación explícita: es partede 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-Atributoes comprobada inmediatamente:
– todo intento de INSERT o UPDATE(sobre el atributo) con un
valor∉∉dominio, es rechazadoal instante
» La respuesta a un intento de violación siempre es RECHAZAR • Si se especifica un dominiopara un atributo, la comprobación es
derivadahacia la comprobación de la restricción del dominio • Una RI-atributo se destruye al eliminar el atributo de la tabla
6.2 Reglas de integridad en SQL-92
17 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
2. Definición de
Restricción de Clave Candidata
• Clave Primaria PRIMARY KEY (<lista atributos>) NNincluye 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 referencialesposibles
•Cualquier (combinación de) columna(s) puede ser clave externa • SQL-92 permite que una clave ajena se refieraa una clave
candidata(Nno sólo PKs)
• Referencia desde FKde la tabla T1 a una CKde la tabla T2...
» Asegurar que cada T2.FK contiene un valor existente en T2.CK
es el problema de la integridad referencial
Reglas de Integridad de Tabla
(3)18
• Pueden existir ciclos referencialesy auto-referencias
• SQL-92 permite (¡por supuesto!)que una FK pueda contener NULL
– salvo si se especifica NOT NULLpara la FK en el CREATE TABLE
• La FK yla CKa la que referencia, deben...
– contener el mismo nºde componentes(columnas o atributos) y – éstos estar definidos sobre los mismos dominios
• Si FK noes compuesta, nose necesitaclá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)...
... ) ;
6.2 Reglas de integridad en SQL-92
19 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
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 borradopara filas de T1 respecto de T2.FK
Qué ocurre si se intenta eliminar una fila r1 de T1y existe alguna fila r2en T2que le
hace referencia (e.d. contiene un valor r2.FK = r1.CK)
–Acciones referenciales posibles:
a.NO ACTION(opción por omisión) Rechazarla operación de eliminación sobre T1
b.CASCADE Eliminar junto con r1toda fila r2de T2que se refiera a r1 (propagación) c.SET DEFAULT
Asignar su valor por defectoa cada componente de la FK en toda fila r2, y eliminar r1 »Debe existir una filaen T1con cada componente de CKa 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
6.2 Reglas de integridad en SQL-92
Reglas de Integridad de Tabla
(5)20 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
ON UPDATE...
– Indica la regla de actualizaciónpara T1.CKrespecto de T2.FK
Qué ocurre si se intenta modificar la clave candidata dentro de una fila r1 de T1y
existe alguna fila r2en T2que le hace referencia (contiene valor r2.FK = r1.CK)
–Acciones referenciales posibles:
a. NO ACTION(opción por omisión) Rechazarla actualización sobre T1.CK
b. CASCADE Propagarla actualización de CKa toda fila r2de T2que se refiera a r1
c. SET DEFAULT
Asignar su valor por defectoa los componentes de FKque corresponden a componentes modificados de T1.CK, en todas las filas r2, y actualizar r1
»Debe existir una filaen T1con cada componente de CKa su valor por defecto
d. SET NULL
Asignar NULLa los componentes de la FKcorrespondientes a componentes modificados en T1.CK, en todas las filas r2, y actualizar r1
»Tales componentes de la FK debe tener nulos permitidos
6.2 Reglas de integridad en SQL-92
21 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
•
Comportamiento ante
una operación de
manipulación de
datos
, en función de la
acción referencial
especificada
Sea T2.FKuna clave externahacia la clave candidata T1.CK... qLa definición de FKno incluye ON DELETEniON UPDATE...
§ INSERTen T2o UPDATEde T2.FK
si el valor de T2.FKno existeen T1.CKðRechazo (NO ACTION) § DELETEen T1o UPDATEde T1.CK
si alguna tuplade T2le hace referencia ðRechazo (NO ACTION)
qLa definición de FKincluyeON DELETEo bien ON UPDATE...
§ INSERTen T2o UPDATEde T2.FK
si el valor de T2.FKno existeen T1.CK ðRechazo (NO ACTION) § DELETEenT1o UPDATEde T1.CK
si alguna tuplade T2le hace referencia ðejecución de laacción referencialespecificada en las cláusulas
Reglas de Integridad de Tabla
(7)22
4. Definición de
Restricción de Comprobación
(CHECK)•Regla que se refiere únicamente auna 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 atributosde 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
:
• Unaoperación de modificaciónsobre la tabla incluye el chequeo de todas sus RI(como paso final de la operación) + (una posible) acción
6.2 Reglas de integridad en SQL-92
23 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
• Restricción de complejidad arbitraria que involucracualquier nº de
columnas de cualquier nº de tablas
•Elemento de BD, independientede tablas/vistas existentes • Especificarestricciones de integridad que pueden noser...
üde clave (primaria o alternativa)
üde integridad referencial (clave ajena)
• Tiene un nombre y consta de una condición(cláusulaCHECK)
•
Creación
de una RI general
(aserción o aserto)
CREATE ASSERTION <nombre restricción> ðnombre obligatorioCHECK (<condición> ) ;
– Si unatupla de la BD hace que condición=FALSE, la restricción
habrá sido violada
– Un estadode la BD satisfaceun aserto si ninguna combinación de tuplas de dicho estado viola la restricción que incluye
6.2 Reglas de integridad en SQL-92
Reglas de Integridad Generales
(asertos)
24 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
– 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’));
6.2 Reglas de integridad en SQL-92
25 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
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 DELETEpuede 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 especificarUNIQUE( codG )en elCREATE TABLE
Reglas de Integridad Generales
(3)26 Los actores y películas anotados en la relación ACTUA_ENdeben 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 delCREATE TABLE Actor (...)
•
Eliminación
de una RI general
DROP ASSERTION <nomRestricción>;
NSin opciónRESTRICTo CASCADE
– Elimina el aserto del catálogo
6.2 Reglas de integridad en SQL-92
27 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
• En muchos casos
conviene especificar una acción
que
ejecutar (disparar)
tras
la
violación de
una
restricción
:
-Abortarla transacciónque provoca la violación, o -Informarde ello al usuario (mensaje), o
-Ejecutarcierto procedimiento, o -Disparar otras actualizaciones
» Esto se consigue mediante los disparadoresotriggers
•
Definición
de un
disparador
DEFINE TRIGGER <nombre>ON <lista tablas>:
<condición>ACTION_PROCEDURE <llamada a procedimiento>
– Especifica una condicióny la acciónque realizar si ésta se cumple – La ejecución del triggerse considera parte de la ejecución de la
operación que intentó violar la RI
6.2 Reglas de integridad en SQL-92
Disparadores
- antiguas versiones de SQL
28 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
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_PROCEDURESolicitarAprobacion(...) ;
•
Combinan
los
enfoques declarativo y procedimental
- La condicióndel disparador es declarativa
- Su acciónopera por procedimientos •ASSERTION
vs.
TRIGGER- ASSERTIONprohiberealizar una actualizaciónque violael aserto (es decir, que hace FALSEla condición)
- TRIGGERpuede permitirla actualizaciónque cumple la condición
(es decir, que viola una RI), pero ejecutauna acción(que puede reparar la violación, dejando consistente la BD)
» Las condicionesespecificadas en una y otro son inversas
6.2 Reglas de integridad en SQL-92
29 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
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,T1y T2están vacías
CREATE TABLE T1 CREATE TABLE T2
( atrib1 ... , ( atrib2 ... ,
FOREIGN KEY (atrib1) FOREIGN KEY (atrib2)
REFERENCES T2 (...) ... , REFERENCES T1 (...) ... ,
... ) ; ... ) ;
- Con chequeo inmediatode 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
30
• 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 atributoNOT NULLy
• Restricciones de clave candidata
6.3 Comprobación de restricciones
31 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
• Una
definición
de
restricción de integridad
puede
incluir
[ INITIALLY{ DEFERRED| IMMEDIATE} ][ [ NOT] DEFERRABLE]
§ INITIALLY DEFERRED, o bienINITIALLY IMMEDIATE
– especifica el modo inicialde 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 bienNOT DEFERRABLE
– indica sila RI puede pasar amodoDEFERRED
§ Si nose indica ningún modo inicial, se asume INITIALLY IMMEDIATE § Si se especifica INITIALLY IMMEDIATE(o se asume)...
- Si no se indica DEFERRABLEni NOT DEFERRABLE, se asume NOT DEFERRABLE
§ Si se especifica INITIALLY DEFERRED, nopuede indicarse NOT DEFERRABLE
- Puede ponerse DEFERRABLE, aunque se supone
6.3 Comprobación de restricciones
Modos de comprobación
(2)32 Tema 6. Integridad en Sistemas de Bases de Datos Relacionales
• Sentencia
SET CONSTRAINTS
SET CONSTRAINTS {<restricciones> | ALL} {DEFERRED|IMMEDIATE}
- Establece el modopara varias RIs respecto de la transacciónSQL
actual
- Toda RI mencionada debe ser DEFERRABLE · puesALL ≡todas las RIs diferibles
§ DEFERREDhace que todaslas RI (mencionadas) pasen a modo diferido
§ IMMEDIATEhace que pasen a modo inmediato y son comprobadas:
si fallala comprobación de algunaRI, falla SET CONSTRAINTS y ningunaRI cambia de modo
•COMMITÆSET CONSTRAINTS ALL IMMEDIATE –Si unacomprobación de alguna RI falla
ðCOMMITfalla
ðla transaccióncompleta falla(rollback)