Documentos de Académico
Documentos de Profesional
Documentos de Cultura
El modelo que se ha utilizado para especificar las reglas de las bases de datos
activas se conoce como evento-condición-acción, o modelo ECA. Una regla en el
modelo ECA tiene tres componentes:
El (los) evento(s) que provoca(n) la acción: normalmente, estos eventos son las
operaciones de modificación de la base de datos que se aplican explícitamente a la
misma. No obstante, en el modelo general, podrían ser también eventos temporales
(especificado como una hora periódica: por ejemplo activar esta regla cada día a
las 5:30 A.M.) u otros tipos de eventos externos.
La condición que determina si debe ejecutarse la acción de la regla: una vez que se
ha producido el evento de activación, puede evaluarse una condición opcional. Si
no se especifica una condición, la acción se ejecutará una vez que se produce el
evento. Si se especifica una condición, primero se evalúa ésta y, sólo si es
verdadera, se ejecutará la acción de la regla.
ASERCIONES Y DISPARADORES
MODELO GENERALIZADO PARA LAS BASES DE DATOS ACTIVAS Y
LOS TRIGGERS DE ORACLE
Primero tenemos que determinar los eventos que pueden causar un cambio en el
valor de SueldoTotal, que son los siguientes:
La cláusula opcional WHEN se utiliza para especificar las condiciones que sea
preciso evaluar después de haberse activado la regla, pero antes de que la acción se
ejecute. Por último, la o las acciones que deban tomarse se especifican como un
bloque PL/SQL, que normalmente contiene una o más sentencias SQL o llamadas
para ejecutar procedimientos externos.
Figura 2. Especificación de reglas activas como triggers en la notación de Oracle.
(a) Triggers para el mantenimiento automático de la coherencia de SueldoTotal de
DEPARTAMENTO. (b) Trigger para comparar el sueldo de un empleado con el de
su supervisor.
a. R1: CREATE TRIGGER SueldoTotal1
AFTER INSERT ON EMPLEADO
FOR EACH ROW
WHEN ( NEW.Dno IS NOT NULL )
. UPDATE DEPARTAMENTO
SET SueldoTotal = SueldoTotal + NEW.Sueldo
WHERE Dno = NEW.Dno;
ASERCIONES Y DISPARADORES
MODELO GENERALIZADO PARA LAS BASES DE DATOS ACTIVAS Y LOS
TRIGGERS DE ORACLE
Los cuatro triggers (reglas activas) R1, R2, R3 y R4 ilustran varias características
de las reglas activas. En primer lugar, los eventos básicos que pueden especificarse
para activar las reglas son comandos de actualización SQL estándar: insertar,
eliminar y actualizar, que se especifican mediante las palabras clave INSERT,
DELETE y UPDATE en la notación de Oracle. En este caso de actualización
(UPDATE) podemos especificar los atributos que van a actualizarse: por ejemplo,
escribiendo UPDATE OF Sueldo, Dno. En segundo lugar, el diseñador de la regla
debe poder referirse a las tuplas que el evento de activación ha insertado, eliminado
o modificado. En la notación de Oracle también se utilizan las palabras clave NEW
y OLD; NEW se utiliza para hacer referencia a una tupla recién insertada o
actualizada, mientras que OLD se utiliza para hacer referencia a una tupla
eliminada o a una tupla antes de ser actualizada.
ASERCIONES Y DISPARADORES
MODELO GENERALIZADO PARA LAS BASES DE DATOS ACTIVAS Y
LOS TRIGGERS DE ORACLE
Por tanto, la regla R1 se activa después de haberse aplicado una operación INSERT
a la relación EMPLEADO. En R1 se comprueba la condición (NEW.Dno IS NOT
NULL), y si se evalúa como verdadera, significa que el empleado recién insertado
está relacionado con un departamento, por lo que se ejecuta la acción. La acción
actualiza la tupla o tuplas DEPARTAMENTO relacionadas con el empleado recién
insertado añadiendo su sueldo (NEW.Sueldo) al atributo SueldoTotal de su
departamento relacionado.
La regla R2 es parecida a la R1, pero es activada por una operación UPDATE que
actualiza el SUELDO de un empleado, y no por una operación INSERT. La regla
R3 es activada por una actualización del atributo Dno de EMPLEADO, que
significa cambiar la asignación de un empleado de un departamento a otro. En R3
no hay una condición, por lo que la acción se ejecuta siempre que se produce el
evento de activación. La acción actualiza tanto el departamento antiguo como el
nuevo de los empleados reasignados, añadiendo su sueldo al SueldoTotal de su
nuevo departamento y sustrayendo su sueldo del SueldoTotal de su departamento
antiguo.
Esto debe funcionar aun en el caso de que el valor de Dno fuera NULL, porque en
este caso ningún departamento se seleccionará para la acción de la regla.
ASERCIONES Y DISPARADORES
MODELO GENERALIZADO PARA LAS BASES DE DATOS ACTIVAS Y
LOS TRIGGERS DE ORACLE
Los triggers en el estándar SQL-99 son muy parecidos a los ejemplos que hemos
visto, con algunas diferencias sintácticas menores. Los eventos básicos que
podemos especificar para activar las reglas son los comandos de actualización SQL
estándar: INSERT, DELETE y UPDATE. En el caso de UPDATE, podemos
especificar los atributos que se van a modificar. Están permitidos los triggers a
nivel de fila y a nivel de sentencia, que se indican en el trigger con las cláusulas
FOR EACH ROW y FOR EACH STATEMENT, respectivamente. Una diferencia
sintáctica es que el trigger puede especificar nombres de variable de tupla
particulares para las tuplas antigua y nueva, en lugar de utilizar las palabras clave
NEW y OLD, como mostramos en la Figura 2. El trigger T1 de la Figura 4 muestra
cómo podemos especificar en SQL-99 el trigger a nivel de fila R2 de la Figura 2
(a). Dentro de la cláusula REFERENCING, utilizamos las variables de tupla con
nombre (alias) O y N para referirnos a la tupla OLD (antes de la modificación) y a
la tupla NEW (después de la modificación), respectivamente. El trigger T2 de la
Figura 4 muestra cómo podemos especificar en SQL-99 el trigger de la regla R2 a
nivel de sentencia. En el caso de un trigger a nivel de sentencia, utilizamos la
cláusula REFERENCING para referimos a la tabla de todas las tuplas nuevas
(recién insertadas o modificadas) como N, mientras que a la tabla de todas las
tuplas antiguas (tuplas eliminadas o tuplas antes de que fueran actualizadas) nos
referimos como O.
ASERCIONES Y DISPARADORES
TRIGGERS EN SQL-99
Figura 4.