entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

TRIGGER despues de un UPDATE

Bien, tengo una gran idea para facilitarme un proceso, de lo contrario luego de un update tendre que hacer un update en mysql. Mi problema es el siguiente:
Desarrollo una app tipo Cyber, (definicion resumida) por lo que guardo la fecha, la hora de inicio y la hora de salida con su id autoincremental, ademas de una columna llamada tiempo, que la usare para situaciones adelantes y ya quiero tener esa informacion almacenada.
En mi tabla la fecha es agregado por CURDATE() para agregarlo con la fecha actual, la hora de inicio con CURTIME() para la la hora actual del servidor y la hora de salida con el tiempo son nulos. Luego pienso agregar en hora de salida otra vez CURTIME() para la fecha de actual que sera la salida. Aqui el problema es que tambien quiero el tiempo, se obtiene sacando la diferencia de horas (ya se como hacerlo) pero surge el siguiente problema:

Se me habia ocurrido con un trigger, pero no soy bueno en eso, intente el siguiente codigo, lo acepto, pero cuando hago el update no pasa nada, anexo el codigo.

CREATE TRIGGER `tiempo_en_uso` before UPDATE
ON `registro`
FOR EACH ROW
    SET new.tiempo=(SELECT DATEDIFF(new.hora_salida,new.hora_inicio)  
FROM registro);

Donde:
registro = el nombre de mi tabla;
tiempo, hora_salida, hora_inicio = campos de mi tabla registro;

Ó quizas seria conveniente hacerlo desde el update cuando agregue la hora de salida ¿como seria, ejemplo?

Ó tendra que ser luego, por los transacciones, una despues de la otra (que no creo) [primero hago el update la hora de salida y luego calculo y vuelvo hacer el update solo con el tiempo]

Gracias, espero su ayuda pronto.

1 Respuesta

0voto

Leonardo-Tadei Puntos227010

Hola @ItIsJAPO,

se entiende tu pregunta y el problema, pero no deberías guardar la diferencia de las fechas, ya que sería una duplicación de datos (un dato que se obtiene de un cálculo es considerado una repetición por las Formas Normales de almacenamiento).

Cuando no había RDBMS con la potencia de los actuales (hace maś de 15 años!) era habitual guardar datos de cálculos por una cuestión de eficiencia, ya que era muy costoso hacer los cálculos. Los RDBMS fueron con el tiempo soportando cada vez mejor la teoría de la Normalización.

Actualmente pasa todo lo contrario: es más rápido y eficiente hacer un cálculo que leer una valor más del disco.

Te sorprendará ver que incluso para tablas con cientos de miles de registros, es sensiblemente más rápido hacer el DATEDIFF en una query que leer todos esos datos.

En resumen: no guardes el valor de tiempo, y este problema deja de existir, además de que respetarías mejor la Normalización.

Saludos cordiales!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta