Un trigger (o trigger) es como un "callback" en una base de datos, que reacciona a ciertos eventos. O sea, un trigger es una reacción automática a operaciones como INSERT, UPDATE o DELETE en las tablas.
Imagínate que tienes un asistente inteligente que hace cosas por ti. Por ejemplo, cada vez que añades un nuevo registro de un estudiante, el asistente actualiza automáticamente el campo con la fecha del último cambio. Un trigger en la base de datos funciona igual: "escucha" eventos y lanza una reacción programada.
Un trigger combina dos cosas:
- Evento: algo pasa en la tabla (por ejemplo, una inserción de registro).
- Función trigger: el código que se ejecuta cuando ocurre el evento.
un trigger no puede existir sin estar vinculado a una función. La función define qué hacer cuando el trigger se dispara.
Ejemplos de uso de triggers
Vamos a ver algunas situaciones donde los triggers pueden ser útiles.
- Actualización automática de datos
Quieres que en la tabla donde guardas los registros de estudiantes haya un campo last_modified que se actualice automáticamente cada vez que cambias un registro. En vez de actualizarlo a mano cada vez, puedes crear un trigger que lo haga por ti.
- Logging de cambios
Quieres saber quién y cuándo cambia datos en la tabla. Un trigger puede añadir automáticamente un registro en la tabla de auditoría (logs) cada vez que se modifican los datos.
- Validación de datos
Si en la tabla se añaden datos que deben cumplir ciertas reglas (por ejemplo, la edad del estudiante debe ser mayor de 18 años), un trigger puede comprobar los datos antes de insertarlos.
- Cálculos automáticos
En la tabla orders guardas pedidos, y cada vez que añades un pedido tienes que actualizar el total de compras del cliente. En vez de hacerlo a mano, el trigger puede actualizar la suma automáticamente.
Cuándo usar triggers
Ahora que ya sabes lo que pueden hacer, vamos a hablar de cuándo realmente merece la pena usar triggers.
Logging y auditoría: los triggers son perfectos para crear registros de auditoría y así seguir los cambios en tablas críticas.
Mantener la integridad de los datos: por ejemplo, si borras un curso de la base de datos, un trigger puede borrar automáticamente todos los estudiantes relacionados con ese curso para evitar datos "colgando".
Automatización de tareas repetitivas: estas tareas pueden ser actualizar valores calculados, actualizar datos agregados, etc.
Implementar lógica de negocio en la base de datos: en vez de depender solo del código de la app, parte de la lógica se puede poner directamente en la base de datos.
Ventajas de los triggers
Como ya te habrás dado cuenta, los triggers son una herramienta potente. Mira lo que ofrecen:
Automatización: casi nada de intervención humana. Por ejemplo, el tracking de usuarios que cambian datos ocurre solo.
Menos código duplicado: en vez de obligar a los desarrolladores a escribir lógica de actualización o validación en cada app, la metemos en la base de datos.
Asegurar la integridad de los datos: un trigger puede ser una capa extra de protección para que los datos siempre estén bien.
Desventajas de los triggers
Obviamente, como cualquier herramienta, los triggers tienen sus desventajas. Vamos a ver su lado oscuro:
Difíciles de depurar: los triggers funcionan "por detrás". Si no hacen lo que esperabas, depurarlos puede ser complicado.
Problemas de rendimiento potenciales: si el trigger es muy complejo o se llama demasiado seguido, puede ralentizar las consultas SQL.
Lógica oculta: cuando la lógica de negocio está "enterrada" en triggers, a los desarrolladores les cuesta más entender qué pasa realmente en la base de datos.
Escenarios reales de uso
Ejemplo 1: Logging de cambios
Supón que tienes una tabla students donde guardas los datos de los estudiantes. Queremos seguir los cambios en los registros. Para eso, el trigger añadirá un registro en la tabla audit_log cada vez que se cambien los datos de un estudiante.
Ejemplo 2: Actualización automática
En la tabla students hay una columna last_modified. Queremos que su valor se actualice cada vez que se cambian los datos de un estudiante. Esto se puede hacer con un trigger que se lanza después de la actualización.
GO TO FULL VERSION