Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
telfono
Asignatura cod_asg
D
INSERT DELETE UPDATE
Ejemplo1: cuando un profesor se da de baja (es borrado) sus datos deben registrarse en un histrico de profesores.
Profesor
HistricoProfesores
cod_pro nombre telfono cod_dep fecha Insercin quin debe realizar esta insercin?
Borrado
Borrado
En un SGBD activo la insercin en el histrico de profesores puede ser realizada por el SGBD sin la intervencin del usuario.
SGBD
INSERT INTO Histrico-Profesores VALUES (RFC, Robert Fuster Capilla, 6789, MAT, SYSDATE) PPP Pedro Prez Puerta
HistricoProfesores
7795 DISCA 12/12/97 6789 MAT 12/12/99
evento: especifica el suceso a cuya ocurrencia debe responder el sistema . condicin: especifica el contexto en el cual la regla cuyo evento se ha producido debe ser ejecutada. accin: especifica las acciones que deben ser ejecutadas por el sistema como respuesta a la ocurrencia del evento cuando la condicin es cierta .
Disparadores en SQL
SGBD
Cmo escribir una regla ECA genrica que sirva para cualquier borrado en Profesor?
Despus (AFTER) de un borrado en Profesor (evento), en cualquier contexto (no hay condicin), se insertar una tupla en HistricoProfesores (accin).
evento
OLD.cod_pro
OLD.nombre
OLD.telfono
OLD.cod_dep
Para poder referir los valores de la tupla actualizada, los eventos estn parametrizados impcitamente con la tupla actualizada (OLD)
A los parmetros del evento se les debe asociar un identificador (nominar) en el disparador: REFERENCING [NEW | OLD] AS ....
Despus (AFTER) de un borrado en Profesor (evento), en cualquier contexto (no hay condicin), se insertar una tupla en HistricoProfesores (accin) construida con los valores de los atributos de la tupla borrada.
Si el evento es mltiple cmo debe ser ejecutado el disparador? una vez por cada tupla afectada una nica vez para toda la sentencia SQL
SGBD
INSERT INTO Histrico-Profesores VALUES ( )
HistricoProfesores
JCC Juan C. Casamayor Rdenas 7796 DSIC 12/12/99 MAF Mara Alpuente Frasnedo 3560 DSIC 12/12/99 MCG Matilde Celma Gimnez 7756 DSIC 12/12/99
Despus (AFTER) de una operacin de borrado en Profesor (evento), en cualquier contexto (no hay condicin), se insertar una tupla en Histrico-Profesores (accin), por cada tupla borrada.
Profesor se debe hacer un registro de seguridad en la tabla Accesos. cod_pro nombre telfono cod_dep
INSERT
SGBD
Accesos
DELETE-UPDATE-INSERT
Despus (AFTER) de una operacin (insercin, borrado o actualizacin) en Profesor (evento) se insertar una tupla en Accesos (accin) independientemente del nmero de tuplas actualizadas. Nota: USER y SYSDATE son funciones predefinidas que devuelven el identificador del usuario conectado y la fecha del sistema.
El valor por defecto para la granularidad es FOR EACH ROW Slo los disparadores de tipo FOR EACH ROW tienen parmetros asociados al evento.
punto de ejecucin
2.7 Mecanismo de actividad: disparadores. Restriccin de integridad: Los profesores que imparten la asignatura EST1 deben ser del departamento de Estadstica (EST).
SQL
CREATE ASSERTION CHECK ( NOT EXISTS (SELECT * FROM Docencia NATURAL JOIN Profesor WHERE Docencia.cod_asg = EST1 AND Profesor.cod_dep <> EST )
En los SGBD relacionales que no son SQL completos, las restricciones de integridad que no se pueden definir en el esquema pueden ser comprobadas por medio de disparadores.
2.7 Mecanismo de actividad: disparadores. Restriccin de integridad: Los profesores que imparten la asignatura EST1 deben ser del departamento de Estadstica (EST).
Se deben analizar los eventos relevantes para la restriccin, es decir que pueden violarla, y definir los disparadores necesarios.
Evento
Condicin
REGLA DE ACTIVIDAD (ECA)
Accin
SQL
SQL
Evento
Condicin
REGLA DE ACTIVIDAD
Accin
Solucin Ejercicio 1
a) Disee un disparador, trigger, para controlar el borrado en Compra.
CREATE TRIGGER T1 AFTER DELETE ON COMPRA FOR EACH ROW DECLARE aux NUMBER; BEGIN SELECT COUNT(*) INTO aux FROM COMPRA C WHERE :old.prop = C.prop; IF aux = 0 THEN RAISE_APPLICATION_ERROR(-20000, 'No se puede borrar la compra, porque dejaramos un propietario sin compras'); END IF; END;
atributo crditos de Profesor es la suma de todos los crditos que en la relacin Docencia aparecen impartidos por el profesor
telfono
Asignatura cod_asg
crditos*
* atributo derivado
Docencia
UPDATE (crditos)
Evento
Condicin
REGLA DE ACTIVIDAD
Accin
Ejercicio 2
SI de un servicio de urgencias sanitarias domiciliarias:
Personal(dni:d_dni, nombre:d_nom, categora:d_cat, tfno:d_tfn, edad: d_edad) CP: {dni} VNN: {nombre} VNN: {categora} Material(codm: d_cod, descripcin: d_desc, precio:d_precio) CP: {codm} VNN: {precio} Vehculo (matrcula: d_mat, tipo: d_tipo) CP: {matrcula} VNN: {tipo} Salida(cods:d_cod, motivo:d_mot, matrcula:d_mat, coste_material:d_coste, fecha:d_fecha) CP: {cods} CAj: {matrcula} Vehculo VNN: {motivo} VNN: {fecha} PersonalSal(cods: d_cod, dni: d_dni) CP: {cods,dni} CAj: {cods} Salida CAj: {dni} Personal MaterialSal(cods: d_cod, codm: d_cod, cantidad: d_cant) CP: {cods,codm} CAj: {cods} Salida CAj: {codm} Material
El atributo coste_material debe ser mantenido por el SGBD. a) Enumere qu operaciones sobre la BD podran afectar a esta restriccin. b) Disee un disparador para controlar la insercin en MaterialSal.
Dada la RI: El presupuesto de un proyecto en un instante de tiempo t nunca ser inferior al de un instante t anterior (siempre aumentar) a) Enumere las operaciones sobre la BD que podran violar la restriccin. b) Disee un trigger para controlar alguna de las operaciones (La
Solucin Ejercicio 2
a) Enumere las operaciones sobre la BD que podran violar la restriccin. INSERCIN en SALIDA *(PONER A 0 EL coste_material) MODIFICACIN del atributo coste_material en SALIDA *(PROHIBIDA) INSERCIN en MATERIALSAL MODIFICACIN del atributo 'cods' de MATERIALSAL MODIFICACIN del atributo 'codm' de MATERIALSAL MODIFICACIN del atributo 'cantidad' de MATERIALSAL BORRADO en MATERIALSAL MODIFICACIN del atributo precio en MATERIAL
Solucin Ejercicio 2
b) Disee un trigger para controlar la insercin en MaterialSal CREATE TRIGGER T1 AFTER INSERT ON MATERIALSAL FOR EACH ROW DECLARE aux NUMBER; BEGIN SELECT M.precio * :new.cantidad INTO aux FROM MATERIAL M WHERE M.codm = :new.codm; UPDATE SALIDA S SET coste_material = coste_material + aux WHERE S.cods = :new.cods; END;
Solucin Ejercicio 3
a) Enumere las operaciones sobre la base de datos que podran violar la restriccin b) Disee un trigger para controlar alguna de las operaciones enumeradas en la cuestin anterior. La
MODIFICACIN del atributo PRESUPUESTO de la relacin PROYECTO