Introducción a nuevas Tecnologías
Bases de datos orientadas por objeto.
- Carencia de un modelo de datos universal.
- No hay ningún modelo de datos que esté universalmente aceptado para los SGBDOO y la mayoría de los modelos carecen una base teórica.
- Carencia de experiencia. Todavía no se dispone del nivel de experiencia del que se dispone para los sistemas tradicionales.
- Carencia de estándares. No Existe una carencia de estándares general para los SGBDOO.
- Capacidad de expresar consultas por medio de reglas lógicas.
- Permitir consultas recursivas y algoritmos eficientes para su evaluación.
- Contar con negaciones estratificadas.
- Soportar objetos y conjuntos complejos.
- Contar con métodos de optimización que garanticen la traducción de especificaciones dentro de planes eficientes de acceso.
- Su lenguaje de definición de datos (DDL) es dataLog.
- En lugar de relaciones entre entidades, aparecen los predicados; y en lugar de las tulpas aparecen los hechos.
- Modelado semántico y uniformidad en la representación.
Funciones de los Mecanismos de Inferencia
- Determinación de las acciones que tendrán lugar, el orden en que lo harán y como lo harán entre las diferentes partes del sistema experto.
- Determinar cómo y cuándo se procesaran las reglas, y dado el caso también la elección de que reglas deberán procesarse.
- Control de dialogo con el usuario. La decisión sobre los mecanismos de procesamiento de reglas, es decir, qué estrategias de búsqueda se implementarán, es de vital importancia para la efectividad del sistema en su conjunto.
Reglas en datalog
- No admite símbolos de función en los argumentos.
- El significado de los programas sigue el punto de vista de teoría de modelos.
- Una relación se representa por un predicado.
- Almacenamiento de pocos datos.
- Ofrecen reglas que permiten crear combinaciones de datos.
- Soportan objetos y conjuntos complejos.
- Ofrecen la capacidad de expresar consultas por medio de reglas lógicas.
- Permiten consultas recursivas y algoritmos eficientes para su evaluación.
- Cuentan con métodos de optimización que garantizan la traducción de especificaciones dentro de planes eficientes de acceso.
- Cuentan con negaciones estratificadas.
- Poder encontrar criterios de interpretación para las reglas deductivas. Es complicado poder encontrar buenos criterios de evaluación para las reglas lógicas por lo que es muy difícil sacar todo su potencial.
- Replantear correctamente, en un contexto deductivo, las convenciones habituales en una base de datos.
- Desarrollar procedimientos eficaces de deducción.
- Mayor productividad, mejor mantenimiento, reutilización de código.
- Posibilidad de optimización semántica.
- Mayor independencia de datos.
- Integración de distintos subsistemas.
- Extensión del ámbito de aplicación.
- Un SGBDA no deja de ser un SGBD (Sistema de Gestión de Base de Datos).
- Un SGBDA tiene un modelo de reglas ECA (Evento-Condición-Acción).
- Un SGBDA debe soportar la gestión de reglas y la evolución de la base de reglas, esto significa, que el SGBD debe soportar la definición mediante reglas.
- Un SGBDA tiene un modelo de ejecución.
- Un SGBDA debe ofrecer diferentes modelos de acoplamiento.
- Un SGBDA debe implementar modos de consumo.
- Un SGBDA debe gestionar la historia de eventos.
- Un SGBDA debe implementar resolución de conflictos.
- Un SGBDA debería poseer un entorno de programación.
- Un SGBD A debería ser ajustable.
- Mayor productividad.
- Mejor mantenimiento.
- Reutilización de código.
- Reducción del tráfico de mensajes.
- Posibilidad de optimización semántica.
- Facilitar el acceso a la BD a usuarios finales.
Trigger
Un disparador define una acción que la base de datos debe llevar a cabo cuando se produce algún suceso relacionado con la misma. Los disparadores (triggers) pueden utilizarse para completar la integridad referencial, también para imponer reglas de negocio complejas o para auditar cambios en los datos. El código contenido en un disparador, denominado cuerpo del disparador, está formado por bloques PL/SQL. La ejecución de disparadores es transparente al usuario.
Existen varios tipos de disparadores, dependiendo del tipo de transacción de disparo y el nivel en el que se ejecuta el disparador (trigger):
1.-Disparadores de nivel de fila: se ejecutan una vez para cada fila afectada por una instrucción DML. Los disparadores de nivel de fila se crean utilizando la cláusula for each row en el comando create trigger.
2.-Disparadores de nivel de instrucción: se ejecutan una vez para cada intrucción DML. Por ejemplo, si una única intrucción INSERT inserta 500 filas en una tabla un disparador de nivel de instrucción para dicha tabla sólo se ejecutará una vez. Los disparadores de nivel de instrucción son el tipo predeterminado que se crea con el comando create trigger.
3.-Disparadores Before y After: puesto que los disparadores son ejecutados por sucesos, puede establecerse que se produzcan inmediatamente antes (before) o después (after) de dichos sucesos.
4.-Disparadores Instead Of: puede utilizar INSTEAD OF para indicar a Oracle lo que tiene que hacer en lugar de realizar las acciones que invoca el disparador. Por ejemplo, podría usar un disparador
INSTEAD OF en una vista para gestionar las inserciones en una tabla o para actualizar múltiples tablas que son parte de una vista.
5.-Disparadores de esquema: puede crear disparadores sobre operaciones en el nivel de esquema tales como create table, alter table, drop table, audit, rename, truncate y revoke. Puede incluso crear disparadores para impedir que los usuarios eliminen sus propias tablas. En su mayor parte, los disparadores de nivel de esquema proporcionan dos capacidades: impedir operaciones DDL y proporcionar una seguridad adicional que controle las operaciones DDL cuando éstar se producen.
6.-Disparadores en nivel de base de datos: puede crear disparadores que se activen al producirse sucesos de la base de datos, incluyendo errores, inicios de sesión, conexiones y desconexiones. Puede utilizar este tipo de disparador para automatizar el mantenimiento de la base de datos o las acciones de auditoría.
Para eliminar
Activar/ Desactivar dispadores
Existen dos opciones.
· ALTER TRIGGERnombre_disparador{DISABLE|ENABLE};
· ALTER TABLEnombre_tabla{ENABLE|DISABLE}ALL TRIGGERS;
La ejecución del disparador puede serantes(before) odespués(after) de llevar a cabo la sentencia disparadora. Es posible especificar condiciones 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.
Para diseñar un disparador hay que cumplir dos requisitos:
· Especificar las condiciones en las que se va a ejecutar el disparador. Esto se descompone en un evento que causa la comprobación del disparador y una condición que se debe cumplir para ejecutar el disparador.
· Especificar las acciones que se van a realizar cuando se ejecute el disparador.
Registros old y new.
Estas variables se utilizan del mismo modo que cualquier otra variable, con la salvedad de que no es necesario declarar las,son de tipo %ROWTYPE y contienen una copia del registro antes (OLD) y después (NEW) de la acción SQL (INSERT,UPDATE,DELETE)que ha ejecutado el trigger. Utilizando esta variable podemos acceder a los datos que se están insertando, actualizando o borrando
De uso exclusivo en los disparadores de nivel de fila, si se intenta hacer referencia a cualquiera de los dos dentro de otro tipo de disparador, se obtendrá un error de compilación.
La siguiente tabla resume los valores regresados por estos seudoregistros en diferentes eventos
Ejemplo 1:
Ahora cree el siguiente disparador
Inserte los siguientes datos
Revise la tabla amigoscopia, el disparador realizó un insert al momento de insertar datos en la tabla amigos
Manejo de excepciones
Para hacer que un trigger ejecute un ROLLBACK de la transacción que tiene activa y teniendo en cuenta que en las sentencias que componen el cuerpo de un trigger no puede haber este tipo de sentencias (rollback, commit,...) hay que ejecutar 'error / excepcion' mediante la sentenciaraise_application_errorcuya sintaxis es:
Dondenum_erroren el rango: [-20000 y -20999]Ejemplo: Retomando el ejemplo anterior, desarrollamos una excepción en nuestra tabla amigos.
En la cual no admitimos como amiga a 'Isabel Mebarak Ripoll'
Ejemplo 2:
Ingresamos los siguientes registros en la tabla libros
insert into libros values(100,'Uno','Richard Bach','Planeta',25);
insert into librosvalues(103,'El aleph','Borges','Emece',28);
insert into libros values(105,'Matematica estas ahi','Paenza','Nuevo siglo',12);
insert into libros values(120,'Aprenda PHP','Molina Mario','Nuevo siglo',55);
insert into libros values(145,'Alicia en el pais de las maravillas','Carroll','Planeta',35);
Creamos un trigger a nivel de fila que se dispara "antes" que se ejecute un "update" sobre el campo "precio" de la tabla "libros". En el cuerpo del disparador se debe ingresar en la tabla "control", el nombre del usuario que realizó la actualización, la fecha, el código del libro que ha sido modificado, el precio anterior y el nuevo:
Cuando el trigger se dispare, antes de ingresar los valores a la tabla, almacenará en "control", además del nombre del usuario y la fecha, el precio anterior del libro y el nuevo valor.Actualizamos el precio del libro con código 100:
update libros set precio=30 where codigo=100;
Veamos lo que se almacenó en "control" al dispararse el trigger:
select *from control;
Los campos "precioanterior" y "precionuevo" de la tabla "control" almacenaron los valores de ":old.precio" y ":new.precio" respectivamente.
Actualizamos varios registros:
update libros set precio=precio+precio*0.1 where editorial='Planeta';
Veamos lo que se almacenó en "control" al dispararse el trigger:
select *from control;
Los campos "precioanterior" y "precionuevo" de la tabla "control" almacenaron los valores de ":old.precio" y ":new.precio" respectivamente de cada registro afectado por la actualización.
Modificamos la editorial de un libro:
update libros set editorial='Sudamericana' where editorial='Planeta';
El trigger no se disparó, pues fue definido para actualizaciones del campo "precio" unicamente.Ejemplo 3:
Vamos a reemplazar el trigger anteriormente creado. Ahora el disparador "tr_actualizar_precio_libros" debe controlar el precio que se está actualizando, si supera los 50dolares, se debe redondear tal valor a entero hacia abajo (empleando "floor"), es decir, se modifica el valor ingresado accediendo a ":new.precio" asignándole otro valor:
Vaciamos la tabla "control":
truncate table control;
Actualizamos el precio del libro con código 100:
update libros set precio=54.99 where codigo=100;
Veamos cómo se actualizó
select *from libros where codigo=100;
El nuevo precio actualizado se redondeó a 54.
Veamos lo que se almacenó en "control" al dispararse el trigger:
select *from control;










Comentarios
Publicar un comentario