Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/12/2010, 06:15
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Necesito saber como hacer un trigger que saque promedio

Hay varios considerandos a tener en cuenta:

- Un trigger es una rutina que se ejecuta cada vez que se cumple el evento para el que fue definida (INSERT, UPDATE o DELETE), lo que quiere decir que en tu caso, si hicieses veinticinco inserciones (si ese fuese el evento), el promedio en cuestión se calcularía veinticinco veces y se almacenaría veinticinco veces. Eso no tiene sentido, al menos práctico.

- Un TRIGGER es una rutina que se define si la tarea a cumplir se debe hacer si o sí cada vez que esa sentencia se ejecuta, si la rutina contiene tareas que se ejecuten siempre de la misma forma y normalmente si esas tareas se deben hacer con uno o más de los valores que pertenecen al registro que se inserta/actualiza/borra. Si no es así, si el proceso abarca conjuntos que no necesariamente incluyen a ese registro, es probable que la rutina a crear no sea un TRIGGER sino un STORED PROCEDURE, como te están indicando.

- Hacer un TRIGGER para crear un dato calculable en sí no tiene tampoco mucho sentido práctico, porque el promedio que buscas, por ejemplo, es mucho más simple de calcular directamente cuando haces las consultas, con todos los datos ya ingresados/actualizados.

- Almacenar un dato calculable tampoco es una buena práctica, porque los datos calculables, precisamente se pueden calcular al mismo tiempo que se recuperan los datos vinculados. Para eso es que existen las funciones agrupadas, el GROUP BY, y todos los tipos de consulta que los aprovechan.

- Los datos calculables le agregan problemas de consistencia a las bases de datos (razón por la cual en las cursadas de la asignatura en la facultad, los profesores dicen "¡están prohibidos!"). Tienen el problema de ser datos que requieren mantenimiento a través del tiempo, porque cada vez que se realice un a inserción/actualización/borrado de los datos que los afectan, hay que recorrer todos los datos claculables almacenados para actualizarlos, con el consiguiente aumento de procesos, validaciones y tiempo de programación, todo lo cual se podría evitar simplemente... haciendo que el calculo se haga cuando se hace la consulta, la que en esas condiciones siempre está actualizada.

Bien, respecto a los TRIGGER en sí, tienen variaciones de codificación y capacidades según el DBMS que uses, por lo que empecemos con lo que ya te pidieron: ¿Qué estás usando?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)