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