Informatico-comunicacion

Solo disponible en BuenasTareas
  • Páginas : 18 (4324 palabras )
  • Descarga(s) : 0
  • Publicado : 15 de enero de 2011
Leer documento completo
Vista previa del texto
Guía de Disparadores
Un disparador (o trigger) es un procedimiento almacenado asociado a una tabla que se ejecuta al realizar una operación “básica” (INSERT, un DELETE o un UPDATE) sobre ésta. La operación básica que despierta al trigger es conocida como sentencia disparadora. La ejecución del disparador puede ser antes o después de llevar a cabo la sentencia disparadora. Es posible especificarcondiciones adicionales para la ejecución del disparador (restrictores). Dado que una sentencia disparadora puede afectar una o más filas de una tabla, es necesario especificar si se quiere que el disparador se ejecute para cada una de las filas afectadas o para el bloque en general.

Diseño de disparadores
Los disparadores pueden ser utilizados para cumplir con alguna de las siguientes tareas:• • • •


Evitar la ejecución de transacciones inválidas Garantizar el cumplimiento de restricciones de integridad Garantizar el cumplimiento de reglas del negocio Generar, automáticamente, valores de columnas derivadas

Cuando se diseñan disparadores es necesario tomar en cuenta las siguientes consideraciones: El disparador no debe ser utilizado para garantizar el cumplimiento derestricciones de integridad que puedan ser definidas a nivel de esquema. Por ejemplo, no tiene sentido implementar un disparador para verificar que al insertar una tupla en la tabla Empleado que su tipo debe ser ‘A’, si es administrativo, ‘O’, si es obrero o ‘D’, si es docente. Esta restricción puede garantizarse al definir el atributo tipo_empleado de la tabla Empleado. La manera de hacerlo escolocando la restricción CHECK (tipo_empleado IN (‘A’,’O’,’D’)) Hay que evitar crear disparadores recursivos. Por ejemplo, el crear un disparador que se active después de actualizar la tabla Empleado, que a su vez realiza una actualización de la tabla Empleado, provoca una ejecución recursiva del disparador que agota la memoria. Dado que los disparadores son compilados la primera vez que se activan, serecomienda que la cantidad de instrucciones de un disparador no sea muy grande (máximo 60 líneas). De esta manera, el efecto que tiene la primera ejecución sobre el rendimiento del sistema será menor. Si un trigger tiene demasiadas líneas es preferible incluir el código de éste en un procedimiento almacenado (que se almacena ya compilado). De esta forma, el trigger puede llamar al procedimiento,reduciendo así el tiempo de compilación al momento de ejecución.

• •

Para diseñar un trigger es necesario identificar cada uno de los elementos definidos para él (sentencia disparadora, etc). A continuación se presenta un ejemplo de un disparador implementado para garantizar una restricción de integridad. Suponga que se tienen las siguientes relaciones, asociadas a la concesión de préstamos enun banco:
Prestatario(ci, nombre, dir, tel, empresa, tel_ofic) almacena todos los prestatarios actuales del banco. Préstamo(num_prest, ci, tasa, monto) almacena todos los préstamos que aun no han sido cancelados. El atributo

ci referencia a Prestatario y es candidato a clave pues el banco no otorga simultáneamente dos préstamos a la misma persona. Cuota(num_prest, num_cuota, f_venc, f_pago)almacena todas las cuotas de los préstamos actuales (tanto las pagadas como las pendientes). El atributo num_prest referencia a Préstamo. Se tiene como política que toda cuota debe ser pagada antes de su fecha de vencimiento. Al implantar el esquema sobre el RDBMS ORACLE se obtiene lo siguiente:
CREATE TABLE Prestatario ( ci VARCHAR(8) NOT NULL PRIMARY KEY, nombre VARCHAR(50) NOT NULL, dirVARCHAR(100) NOT NULL, tel VARCHAR(10) NOT NULL, empresa VARCHAR(100) NOT NULL, tel_ofic VARCHAR(10) NOT NULL); CREATE TABLE Prestamo ( num_prest NUMBER(5) NOT NULL PRIMARY KEY, ci VARCHAR(8)UNIQUE REFERENCES Prestatario(ci), tasa NUMBER(4,2) NOT NULL, monto NUMBER(8)NOT NULL CHECK(monto > 0));

CREATE TABLE Cuota ( num_prest NUMBER(5) NOT NULL, num_cuota NUMBER(2) NOT NULL, f_venc DATE NOT NULL,...
tracking img