Sie sind auf Seite 1von 20

1

Integridad en sistemas de bases de


datos relacionales
Competencias especficas a adquirir
Asegurar la integridad de los datos mediante la aplicacin de los mecanismos
soportados por los SGBDs.
Identificar los diferentes tipos de reglas de integridad definidos por el
estndar SQL-92
Tema 2.Modelo relacional 1
Integridad en Sistemas de Bases de Datos
Relacionales
Contenidos
Reglas de integridad: consideraciones generales y
componentes
Reglas de integridad en SQL-92
Reglas de integridad de dominio
Tema 2.Modelo relacional
Reglas de integridad de tabla
Reglas de integridad generales y Disparadores
Comprobacin de restricciones
2
2
Integridad en sistemas de bases de datos relacionales
Bibliografa ms relevante
[DD 1996] captulo 14;
[EN 2002] captulos 7 y 8;
[SKS 2002] capitulo 6;
3
[CB 2005] captulo 6
Tema 2.Modelo relacional
1 N i t l l d i t id d fi d
Reglas de integridad
Consideraciones generales
Integridad: consistencia o correccin de datos en la base de datos
Las reglas de integridad (RI) no son especficas para cada usuario
1. Nos interesan las reglas de integridad especficas de una
BD(reglas del negocio), adems de RI Entidad, RI Referencial...
2. Veremos las RI definidas sobre tablas base
- Por estar restringidas a contener datos correctos (reflejar la realidad)
La regla los ttulos de las pelculas son nicos se aplica a la tabla base
PELICULA, y tambin a cualquier vista definida sobre sta
Tema 2.Modelo relacional
- Podemos definir RI sobre una vista (tabla derivada)?
Sera deseable
La vista heredara toda RI de sus tablas base y podra aadir
nuevas (ejemplo: clave primaria o alternativa nueva para la vista)
Slo consideraremos RI sobre tablas base (por simplicidad)
4
3
3. Nos interesa soporte de RI declarativo
No nos centraremos en...
Procedimientos o funciones almacenados
Reglas de integridad
Consideraciones generales (y 2)
- Procedimientos o funciones almacenados,
- Disparadores (triggers)
4. Una BD en un estado de integridades correcta:
No viola ninguna RI conocida por el SGBD, es decir,
Satisface AND lgico de todas las RI definidas en su esquema
5. La integridad es importante en...
DISEO(estructuras de datos y reglas de integridad adecuadas)
Tema 2.Modelo relacional
DISEO(estructuras de datos y reglas de integridad adecuadas)
EJ ECUCIN(correccin de la informacin)
6. RI son mantenidas en el INFORMATION_SCHEMA del catlogo
Subsistema de Integridad del SGBD:
controla operaciones de usuario(INSERT,UPDATE,DELETE...)
para asegurar que NO violan las reglas de integridad
5
Nombre actor_cache_ok
- Regla almacenada en INFORMATION_SCHEMA del catlogo con ese nombre
- Aparecer en diagnsticos producidos por el sistema como respuesta a
Reglas de integridad
Componentes de una RI
Aparecer en diagnsticos, producidos por el sistema como respuesta a
intentos de violacin de la regla (mensajes de error al usuario)
Restriccin NOT EXISTS ( SELECT * FROM ACTOR WHERE cache 0 )
- Expresin booleana Restriccin de Integridad Regla de Integridad
- La regla ... se satisface la restriccin es TRUE
es violada la restriccin es FALSE
Respuestaa un intento de violacinde la regla
Tema 2.Modelo relacional
p
- Indica al SGBD qu hacer si se intenta una operacin que viola la RI
- Por defecto RECHAZAR, que implica...
Deshacer los posibles daos causados por la operacin
Mostrar informacin de diagnstico (mensaje)
- Podra ser un procedimiento de complejidad arbitraria: tratarErr(...)
6
4
Creacin de una regla de integridad... (en cualquier momento)
SGBD comprueba: el estado actual de la BDsatisface RI ?
N RI h d
Reglas de integridad
Creacin, destruccin y tipos
- No RI rechazada
- S RI aceptada
- Es almacenada en el INFORMATION_SCHEMA del catlogo
- La regla es activada (entra en vigor)
* Para la RI del ejemplo, actor_cache_ok , el SGBD controlar todo
INSERT INTO ACTOR y UPDATE ACTOR SET cache =
Destruccin de reglas de integridad
Tema 2.Modelo relacional
- el sistema elimina su definicin del INFORMATION_SCHEMA
Las RIs pueden restringir los valores legales de...
- Dominio
- Tabla, Columna
- Base de datos
7
1. Reglas de integridad de Dominio
Asociadas a un dominio de datos especfico
Es una expresin de complejidad arbitraria que define un dominio
Reglas de integridad en SQL-92
Categoras de reglas de integridad
Es una expresin de complejidad arbitraria que define un dominio
2. Reglas de integridad de Tabla
RIs de complejidad arbitraria incluidas en la definicin de una tabla
Pueden ser restricciones de Columna
restricciones de Clave Candidata
restricciones de Clave Externa
restricciones de Comprobacin
Tema 2.Modelo relacional
Una tabla vaca cumple cualquier RI de tabla,
aunque esa RI sea esta tabla no puede estar vaca
3. Reglas de integridad Generales
RIs de complejidad arbitraria no incluidas en la definicin de ninguna tabla
Son otro elemento ms de la BD, al mismo nivel que una tabla o vista
8
5
Es til ver la base de datos sujeta a una RI gigante...
resultado del AND de todas las RI...
Reglas de integridad en SQL-92
Otras consideraciones
- generales
- detabla
- dedominioaplicadas a cada columna de las tablas
Significado formal de la base de datos
Tema 2.Modelo relacional
Una regla de integridad es independiente de cualquier
aplicacin especfica que acceda a la base de datos
- No contiene parmetros ni variables host
(referencias a variables de los programas de aplicacin)
9
Definicin del conjunto de valores componentes de un
dominio:
Enumeracinde valores posibles: (marron gris azul verde negro)
Reglas de integridad en SQL-92
Reglas de Integridad de Dominio
- Enumeracinde valores posibles: ( marron , gris , azul , verde , negro )
- Expresinde definicin: edad 0 AND edad 120
RI como parte de la sentencia de definicin del dominio
CREATE DOMAIN <nombre dominio> [ AS ] <tipo de datos>
[ DEFAULT <valor defecto> ]
[ [ CONSTRAINT <nombre restriccin> ] CHECK (<condicin>) ]+ ;
- <valor defecto> suele contener un literal (perteneciente al dominio) oNULL
Tema 2.Modelo relacional
Aplicada a cada columna (de cualquier tabla) definida sobre el
dominio
CREATE DOMAIN Color_ojos AS VARCHAR(10)
DEFAULT marron
CONSTRAINT color_valido CHECK ( VALUE IN (marron,gris,azul,verde,negro) );
10
6
NOT NULL no es una restriccin de dominio vlida
CREATE DOMAIN Estado_civil AS CHAR(1) NOT NULL Incorrecto
CONSTRAINT estado civil ok CHECK ( VALUE IN (S C V D) ) ;
Reglas de integridad en SQL-92
Reglas de Integridad de Dominio(2)
CONSTRAINT estado_civil_ok CHECK ( VALUE IN ( S , C , V , D ) ) ;
CREATE DOMAIN Estado_civil AS CHAR(1)
CHECK (VALUE IS NOT NULL) Correcto
CONSTRAINT estado_civil_ok CHECK ( VALUE IN (S, C, V, D) ) ;
Alteracin de un dominio
ALTER DOMAIN <nombre dominio> <accin> ;
Tema 2.Modelo relacional
ALTER DOMAIN <nombre dominio> <accin>... ;
Permite aadir y eliminar restricciones de integridad de dominio y
valor por defecto
Explicado en el tema anterior
11
Eliminacin de un dominio
DROP DOMAIN <nombre dominio> { RESTRICT | CASCADE } ;
OpcinRESTRICT
Reglas de integridad en SQL-92
Reglas de Integridad de Dominio(y 3)
OpcinRESTRICT
- La eliminacin falla si el dominio es referenciado en cualquier definicin de
columna en una tabla, de vista o restriccin de integridad
- En otro caso, xito: el descriptor del dominio es eliminado del
INFORMATION_SCHEMA del catlogo
Opcin CASCADE
- El dominio es eliminado del INFORMATION_SCHEMA, junto con toda vista y RI
cuya definicin hace referencia al dominio
L RI d d i i i d li i d i d
Tema 2.Modelo relacional
- Las RI de 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 explcito, toma el del dominio (si ste lo tena)
Hereda toda restriccin de integridad asociada al dominio,
- convertida en una restriccin de tabla,
- sustituyendo VALUE por el nombre de la columna
12
7
Restriccin asociada a una tabla especfica
- No existe si la tabla no existe y
- Eliminar la tabla implica eliminar la RI
Reglas de integridad en SQL-92
Reglas de Integridad de Tabla
puede hacer
referencia a
otras tablas,

Eliminar la tabla implica eliminar la RI


RI especificada dentro de CREATE TABLE
CREATE TABLE <nombre tabla> ( <lista de elemento de tabla> ) ;
donde elemento puede ser:
- Definicin de columna, que puede incluir RI s de columna
- Definicin de... (precedida o no de CONSTRAINT <nombre restriccin>)
Restriccin de clave candidata
Restriccin de claveexterna
adems de a la
que la incluye
Tema 2.Modelo relacional
Restriccin de clave externa
Restriccin de comprobacin (CHECK)
RI aadida/eliminada conALTER TABLE <nombre tabla>...
Toda RI de tabla es comprobada inmediatamente:
Una operacin de modificacin sobre la tabla incluye el chequeo de
todas sus RI (como paso final de la operacin)+(una posible) accin
13
1. Definicin de Columna - RI de Columna
ifi i d l i d d d i i d l
Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (2)
Especificacin del tipo de datos o dominio y otras RI de columna
No necesita sentencia de creacin explcita: es parte de la definicin
de columna, dentro de la sentencia de creacin de la tabla
CREATE TABLE Actor
( nombre VARCHAR(30) NOT NULL,
cache INT(9) DEFAULT 2000 NOT NULL,
ojos Color ojos NOT NULL
Tema 2.Modelo relacional
ojos Color_ojos NOT NULL,
agencia CHAR(4), ...) ;
Si se especifica un dominio para una columna, la comprobacin es
derivada hacia la comprobacin de la restriccin de dominio
Una RI de columna se destruye al eliminar la columna de la tabla
14
8
2. Definicin de Restriccin de Clave Candidata
Clave Primaria PRIMARY KEY (<lista columnas>) incluyeRI Entidad
Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (3)
Clave Primaria PRIMARY KEY (<lista columnas>) incluye RI Entidad
Clave AlternativaUNIQUE (<lista columnas>)
3. Definicin de Restriccin de Clave Externa
FOREIGN KEY (<lista columnas>) REFERENCES <tabla> (<lista columnas>)
[ ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL } ]
O { O C O | C SC | S | S }
Tema 2.Modelo relacional
[ ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL } ]
Posibles Acciones de Mantenimiento
de la I ntegridad Referencial
(explicadas en el tema anterior)
15
Recordemos sobre las claves externas que
Cualquier (combinacin de) columna(s) puede ser clave externa
SQL 92 it l t (FK) fi l
Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (4)
SQL-92 permite que una clave externa (FK) se refiera a una clave
candidata (CK): clave primaria o clave alternativa
Una clave externa y la clave candidata a la que referencia
Deben contener el mismo n de componentes (columnas) y
Las columnas correspondientes deben estar definidas sobre el
mismo dominio o tipo de datos
Referencia desde una FK de la tabla T2 a una CK de la tabla T1...
Tema 2.Modelo relacional
Asegurar que cada T2.FK contiene un valor existente en T1.CK
es el problema de la integridad referencial
Pueden existir ciclos referenciales y auto-referencias
SQL-92 permite (por supuesto!) que una FKpueda contener NULL
salvo si se especifica NOT NULL para dicha FK en el CREATE TABLE
16
9
4. Definicin de Restriccin de Comprobacin(CHECK)
Regla que se refiere nicamente a la tabla que la contiene
Puede especificar restricciones adicionales para una columna
Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (y 5)
Puede especificar restricciones adicionales para una columna
*El cach de un actor siempre est entre 300 y 1200
CREATE TABLE ACTOR (
...,
CONSTRAINT actor_cache_ok
CHECK ( cache 300 AND cache 1200 ),
... );
Puede definir restricciones que involucran varias columnas
Tema 2.Modelo relacional
q
*Toda pelcula se estrena despus de finalizar su rodaje
CREATE TABLE PELICULA (
...,
CONSTRAINT pelicula_fechas_ok
CHECK ( fecha_fin_rodaje < fecha_estreno ),
... );
17
Resumen
Cules son los componentes de una restriccin de
integridad integridad
A qu elementos relacionales se puede aplicar RI
Distinguir los diferentes tipos de RI sobre tablas y dominios
Definir una regla de integridad
Tema 2.Modelo relacional 18
Definir una regla de integridad
10
Predicado que expresa una condicin que la BD debe
satisfacer siempre
Reglas de integridad en SQL-92
Reglas de Integridad Generales (Asertos)
Puede involucrar cualquier nmero de columnas de
cualquier cantidad de tablas
Es un elemento de BD, independiente de tablas y
vistas existentes
Especifica restricciones de integridad que pueden no ser...
de clave (primaria o alternativa)
Tema 2.Modelo relacional
de clave (primaria o alternativa)
de integridad referencial (clave externa)
Tiene un nombre y consta de una condicin (CHECK)
19
Satisfaccin y violacin de una RI general
Si alguna fila de la BD hace falsa la condicin, el aserto es violado
U t d d l BD ti f t i i ( bi i
Reglas de integridad en SQL-92
Reglas de Integridad Generales(2)
Un estado de la BDsatisface un aserto si ninguna (combinacin
de) fila(s) de dicho estado viola la condicin que incluye
Creacin de una RI general
CREATE ASSERTION <nombre restriccin> nombre obligatorio
CHECK ( <condicin> ) ;
Tema 2.Modelo relacional
Eliminacin de una RI general
DROP ASSERTION <nomRestriccin> ; Sin opcin RESTRICT o CASCADE
Elimina el aserto del INFORMATION_SCHEMA del catlogo
20
11
Normalmente, la <condicin> se expresa en negativo:
todo X satisface Y ningn X satisface NO( Y )
Reglas de integridad en SQL-92
Reglas de Integridad Generales(3)
*Todo actor representado por la agencia 1 debe cobrar 300 o ms
CREATE ASSERTION RI1_age1_cache
CHECK (NOT EXISTS (SELECT * FROM Actor WHERE agencia=1 AND cache<300)) ;
*La paga mnima de los actores que actan en una pelcula es de 15.000
CREATE ASSERTION RI2_paga_minima
CHECK 15000 (SELECT MIN(paga) FROM Actua_en) ;
Tema 2.Modelo relacional
*Toda agencia representa a un mximo de 40 actores
CREATE ASSERTION RI3_num_actores_age
CHECK (NOT EXISTS (SELECT * FROM Actor
GROUP BY codAge
HAVING COUNT(*) > 40)) ;
21
*Todo actor debe haber participado al menos en una pelcula
CREATE ASSERTION RI4_actor_en_pelicula
CHECK (NOT EXISTS (SELECT * FROM Actor
Reglas de integridad en SQL-92
Reglas de Integridad Generales(4)
( (
WHERE codA NOT IN (SELECT actor FROM Actua_en)));
*Todo actor no protagonista de una pelcula cobra menos que cualquier protagonista
CREATE ASSERTION RI5_paga_actores
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));
*Debe de existir al menos una distribuidora de pelculas
Tema 2.Modelo relacional
*Debe de existir al menos una distribuidora de pelculas
CREATE ASSERTION RI6_existe_distribuidora
CHECK ( 0 < SELECT COUNT (*) FROM Distribuidora ) ;
este aserto...
- debe crearse una vez que ya exista alguna fila en DISTRIBUIDORA
- una operacin DELETE puede violarlo, pero nunca lo har un INSERT
22
12
Algunas RI generales pueden ser expresadas como RI de
tabla
*El di d l i i ( i h 2 i i l di l i )
Reglas de integridad en SQL-92
Reglas de Integridad Generales(5)
*El cdigo de los guiones es nico ( si hay 2 guiones con igual cdigo, son el mismo)
CREATE ASSERTION RI7_guion_codigo_unico
CHECK ( NOT EXISTS (
SELECT * FROM Guion G1
WHERE G1.codG IN (SELECT codG FROM Guion G2
WHERE G1.titulo<>G2.titulo OR G1.resumen<>G2.resumen
OR G1.nomAutorPpal<>G2.nomAutorPpal OR G1.fechaFin<>G2.fechaFin
OR G1.fechaEntrega<>G2.fechaEntrega) ) );
Tema 2.Modelo relacional
g g ) ) );
este aserto...
- Equivale a especificar UNIQUE( codG ) en el CREATE TABLE Guion ()
23
Y viceversa: algunas RI de tabla pueden ser expresadas
como RI generales
E t l t d RI d l t i di l i d
Reglas de integridad en SQL-92
Reglas de Integridad Generales(y 6)
- Excepto la parte de una RI de clave externa que indica la accin de
mantenimiento de la integridad referencial (ON DELETE ON UPDATE)
*Los actores y pelculas anotados en la tabla ACTUA_EN deben existir
CREATE ASERTION RI8_actua_en_ok
CHECK (NOT EXISTS (SELECT * FROM Actua_en
WHERE actor NOT IN (SELECT codA FROM Actor)
OR film NOT IN (SELECT codP FROM Pelicula)));
Tema 2.Modelo relacional
( )))
este aserto...
- Equivale a especificar...
FOREIGN KEY (actor) REFERENCES Actor(codA)...
y FOREIGN KEY (film) REFERENCES Pelicula(codP)...
... dentro del CREATE TABLE Actor (...)
24
13
En muchos casos conviene especificar una accin que
ejecutar tras la violacin de una restriccin:
Abortar la transaccin que provoca la violacin o
Reglas de integridad en SQL-92
Disparadores- versin SQL:1999
- Abortar la transaccin que provoca la violacin, o
- Informar de ello al usuario (mensaje), o
- Ejecutar cierto procedimiento, o
- Realizar otras actualizaciones en la base de datos...
Esto se consigue mediante los disparadores o triggers
Un disparador se ejecuta de forma automtica como
efecto secundario de cierta modificacin de la BD
Tema 2.Modelo relacional
efecto secundario de cierta modificacin de la BD
Los SGBDR usan ampliamente los disparadores, pero no
formaron parte del estndar hasta la versin SQL:1999
cada SGBDR los implement con su propia sintaxis
Los disparadores SQL:1999 son similares a los de Oracle
25
Para disear un disparador, se debe especificar :
- Las condiciones en las que se debe ejecutar:
Evento que causa la comprobacin del disparador
Reglas de integridad en SQL-92
Disparadores- versin SQL:1999 (2)
Evento que causa la comprobacin del disparador
Condicin que se debe cumplir para ejecutarlo
- La Accin que se realizar cuando se ejecute
Es el modelo de disparadores evento-condicin-accin
La BD almacena los disparadores, por lo que...
- son persistentes y
- estn accesibles para todas las operaciones de BD
Tema 2.Modelo relacional
p p
El SGBD ejecuta automticamente un disparador cada
vez que ocurre el evento especificado y se cumple la
condicin correspondiente
La ejecucin del disparador se considera parte de la ejecucin
de la operacin que provoca su activacin
26
14
Definicin de un disparador
CREATE TRIGGER <nombre_disparador>
{ BEFORE | AFTER } { INSERT | UPDATE [OF <lista columnas>] | DELETE }
Reglas de integridad en SQL-92
Disparadores- versin SQL:1999 (3)
Granularidad
Parametrizacin
Evento
{ BEFORE | AFTER } { INSERT | UPDATE [OF <lista columnas>] | DELETE }
ON <nombre_tabla>
[ REFERENCING OLD [ ROW| TABLE ] [ AS ] <nombre>
[ NEW [ ROW| TABLE ] [ AS ] <nombre> ] ]
[ FOR EACH ROW | FOR EACH STATEMENT ]
Tema 2.Modelo relacional
Condicin
Accin
[ WHEN <condicin> ]
BEGIN ATOMIC
...
END;
27
* Antes de que un usuario elimine una o varias filas de la tabla PELICULA, el sistema debe
anotar dicha accin en una tabla DIARIO_BORRADOS, indicando el usuario y el momento
concreto en el que se realiza dicha operacin.
Reglas de integridad en SQL-92
Disparadores- versin SQL:1999 (4)
q p
CREATE TRIGGER anotacion_borrado_pelicula
BEFORE DELETE ON PELICULA
FOR EACH STATEMENT
INSERT INTO Diario_Borrados
VALUES( PELICULA, CURRENT_USER, CURRENT_TIMESTAMP);
Tema 2.Modelo relacional
Si la accin del trigger slo consiste en una sentencia SQL, no es necesario
utilizar las palabras reservadas BEGIN ATOMIC ni END
Este trigger est escrito en SQL:1999, y no en SQL de Oracle
28
15
* Si un actor no protagonista de una pelcula percibe una paga no inferior que la de un
protagonista, asignarle el mnimo cobrado por un protagonista menos 1000.
Reglas de integridad en SQL-92
Disparadores- versin SQL:1999 (5)
CREATE TRIGGER PagaNoProta
AFTER UPDATE OF paga ON ACTUA_EN
REFERENCING NEW ROW AS nueva
FOR EACH ROW
WHEN nueva.papel <> protagonista AND
nueva.paga (SELECT MAX ( paga ) FROM ACTUA_EN
WHERE film = nueva.film AND papel = protagonista )
BEGIN ATOMIC
En Oracle este trigger tendra el
problema de la tabla mutante
Se ver en las prcticas de PL/SQL
Tema 2.Modelo relacional
BEGIN ATOMIC
UPDATE ACTUA_EN
SET paga = (SELECT MIN( paga ) - 1000
FROM ACTUA_EN
WHERE film = nueva.film AND papel = protagonista )
WHERE actor = nueva.actor AND film = nueva.film
END;
29
Los disparadores combinan los enfoques declarativo y
procedimental
t di i d l ti
Reglas de integridad en SQL-92
Disparadores- versin SQL:1999 (y 6)
- El eventoy la condicindel disparador son declarativos
- Su accinopera por procedimientos
Comparacin ASSERTION vs. TRIGGER
- ASSERTION prohibe realizar una actualizacin que viola el aserto
(es decir, que hace FALSE la condicin)
- TRIGGER puede permitir la actualizacin que cumple la condicin
Tema 2.Modelo relacional
- TRIGGER puede permitir la actualizacin que cumple la condicin
(es decir, que viola una RI), pero ejecuta una accin (que puede
reparar la violacin, dejando consistente la BD)
Las condiciones especificadas en una y otro son inversas
30
16
SQL rechaza todo intento de INSERT o UPDATE que viole una
especificacin de tipo de datos
Reglas de integridad en SQL-92
Caractersticas adicionales (pseudo-RIs)
Ejemplo: introduccin de valor CHAR en columna definida como INTEGER
- Una especificacin de tipo de datos puede verse como una forma
primitiva de restriccin de integridad de dominio
- Una violacin de una RI de dominio o de tipo de datos se detecta en
tiempo de ejecucin
Tema 2.Modelo relacional
SQL rechaza todo intento de INSERT o UPDATE sobre una
vista, si viola la condicin de definicin de la vista
- Siempre que se haya especificado la opcin de verificacin en la
definicin de la vista (WITH CHECK OPTION)
31
En general, el SGBDcomprueba una RI de inmediato,
como ltimo paso de la ejecucin de una sentencia SQL
Si la RI es violada por la sentencia, sta es cancelada y no tiene efecto
sobre la base de datos
Comprobacin de restricciones
A veces es necesario que ciertas restricciones no sean
comprobadas hasta pasado un tiempo, pues si se
hiciera de inmediato siempre fallaran
Ciclo referencial EMP DEP Inicialmente, EMP y DEP estn vacas
CREATE TABLE EMP CREATE TABLE DEP
( cod_emp ... ( cod_dep ... ,
depto ... , jefe ... ,
Tema 2.Modelo relacional
depto , je e ,
FOREIGN KEY ( depto ) FOREIGN KEY ( jefe )
REFERENCES DEP ( cod_dep ) ... , REFERENCES EMP ( cod_emp )... ,
... ) ; ... ) ;
- Con chequeo inmediato de las RI de clave externa (RI referencial),
todo INSERT de una fila en EMP o en DEP fallara, pues nunca
encontrara la fila destino (referenciada) en la otra tabla
32
17
En un momento dado, dentro de cierta transaccin SQL, toda
restriccin de integridad debe estar en modo...
Comprobacin de restricciones
Modos de comprobacin
- INMEDIATE: ser comprobada inmediatamente, o
- DEFERRED: ser chequeada al final de la transaccin (diferida)
Para algunas restricciones de integridad, la comprobacin
diferida no tiene sentido:
Restricciones de dominio y tipo de datos

Tema 2.Modelo relacional


Restriccin de columna NOT NULL y
Restricciones de clave candidata (UNIQUE, PRIMARY KEY)
33
Una definicin de RI puede incluir estas dos clusulas
[ INITIALLY {IMMEDIATE | DEFERRED} ]
Comprobacin de restricciones
Modos de comprobacin (2)
[ [ NOT ] DEFERRABLE ]
- Modo inicial de la RI: INITIALLY DEFERRED o INITIALLY IMMEDIATE
Especifica el modo en el que est la RI tras de ser definida (creada) y al
comienzo de cada transaccin SQL
- Opcin de cambio de modo: DEFERRABLE o NOT DEFERRABLE
Indica si la RI puede pasar a modo DEFERRED
V l id i i
Tema 2.Modelo relacional
- Valores asumidos por omisin:
Si no se indica ningn modo inicial, se asume INITIALLY IMMEDIATE
Si se especifica INITIALLY IMMEDIATE (o se asume)...
- Si no se indica DEFERRABLE ni NOT DEFERRABLE, asume NOT DEFERRABLE
Si se especifica INITIALLY DEFERRED, no puede indicarse NOT DEFERRABLE
- Puede ponerse DEFERRABLE, aunque se supone
34
18
SentenciaSET CONSTRAINTS
SET CONSTRAINTS {<lista restricciones> | ALL} { DEFERRED | IMMEDIATE}
E t bl l d i RI l t i t l
Comprobacin de restricciones
Modos de comprobacin(y 3)
- Establece el modo para varias RI s para la transaccin actual
- Toda RI mencionada debe ser DEFERRABLE
De hecho ALL todas las RIs diferibles
- DEFERRED: toda RI mencionada pasa a modo diferido
- IMMEDIATE: cada RI pasa a modo inmediato y es comprobada
- si falla la comprobacin de alguna RI , falla SET CONSTRAINTS y
Tema 2.Modelo relacional
p g , y
ninguna RI cambia de modo
EjecutarCOMMIT implica realizar SET CONSTRAINTS ALL IMMEDIATE
- Si la comprobacin de alguna RI falla
COMMIT falla
la transaccin completa falla (rollback)
35
Claves externas: acciones referenciales (recordatorio)
Mantenimiento de integridad referencial ante intentos de violacin
Ejecucin de operaciones adicionales que dejan la BDconsistente
Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (5)
Ejecucin 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 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 (opcin por omisin) Rechazar la operacin de eliminacin sobre T1
CASCADE
Tema 2.Modelo relacional
b. CASCADE Eliminar junto con r1 toda fila r2 de T2 que se refiera a r1 (propagacin)
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 CK 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
36
19
ON UPDATE...
Indica la regla de actualizacinpara T1.CK respecto de T2.FK
Qu ocurre si se intenta modificar la clave candidata dentro de una fila r1 de T1 y existe
Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (6)
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 (opcin por omisin) Rechazar la actualizacin sobre T1.CK
b. CASCADE Propagar la actualizacin de CK 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, yactualizar r1
Tema 2.Modelo relacional
componentes modificados de T1.CK, en todas las filas r2, yactualizar r1
Debe existir una fila en T1 con cada componente de CK 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
37
Comportamiento ante una operacin de manipulacin de
datos, en funcin de la accin referencial especificada
Reglas de integridad en SQL-92
Reglas de Integridad de Tabla (7)
Sea T2.FK una clave externa hacia la clave candidata T1.CK ...
La definicin 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 Rechazar (NO ACTION)
DELETE en T1 o UPDATE de T1.CK
si alguna fila de T2 le hace referencia Rechazar (NO ACTION)
La definicinde FK incluyeON DELETE o bien ON UPDATE
Tema 2.Modelo relacional
La definicin de FK incluyeON DELETE o bien ON UPDATE...
INSERT en T2 o UPDATE de T2.FK
si el valor de T2.FK no existe en T1.CK Rechazar (NO ACTION)
DELETE en T1 o UPDATE de T1.CK
si alguna fila de T2 le hace referencia ejecucin de la accin referencial
especificada en las clusulas
38
20
Resumen
Explicar la funcin de los asertos
Distinguir entre aserto y disparador
Distinguir los modos de comprobacin de la integridad
Escribir asertos y disparadores
Tema 2.Modelo relacional 39

Das könnte Ihnen auch gefallen