Licenciatura en Sistemas de Información Administrativa. Programación de Servidores de Base de Datos • • • Alumnos: García Cervantes Mario Alejandro (315046) Guevara Rodríguez Fernando Alejandro (283803) Ramírez Reyes Joaquín Marino (540196) 10/10/2024 Introducción: A lo largo de las clases posteriores a la primera unidad, se abordaron temas relacionados con la creación de funciones y procedimientos almacenados. En esta segunda unidad, se llevó a cabo una revisión exhaustiva sobre triggers y transacciones. Por lo tanto, en el presente documento se presentará un caso práctico en el que se aplicarán los conocimientos adquiridos, evidenciando así la relevancia de estos temas. A continuación, se describe el caso que servirá de base para el desarrollo del trabajo: La administración de rentas de películas Sakila ha decidido premiar a los clientes más frecuentes con un cupón de Rentas_Gratis acorde al número de rentas entregadas según los siguientes parámetros. ● Ladiferencia de días entre la fecha de renta y retorno no deben de exceder más de 7 días. (Usar select) ● Uncupón en Rentas_Gratis es el equivalente a tres devoluciones por parte del cliente. (función simple con consumo de datos). ● Una vez tomados en cuenta la validación de las tres rentas, estas ya no deben ser tomadas en cuenta. Si la renta ya no es válida favor de mencionar en una tabla de log cual renta con fecha de consulta. (usar trigger) ● Proporcionar como resultado la salida de los clientes que fueron acreedores a los cupones especificando el total de cupones disponibles. Favor de utilizar las herramientas vistas en clase, procedimientos almacenados, funciones, triggers y transacciones. Desarrollo: 1. Se ejecutó una consulta SQL que selecciona todos los registros de la tabla rental. La consulta tiene como objetivo obtener las rentas cuya diferencia entre la fecha de devolución (return_date) y la fecha de renta (rental_date) sea de 7 días o menos. Los registros mostrados corresponden a rentas donde la devolución ocurrió dentro de los 7 días posteriores a la fecha de alquiler. 2. Se realizó una modificación estructural en la base de datos para permitir el seguimiento del estado de los cupones asociados a cada renta en la tabla “rental”. Esta modificación consistió en agregar una nueva columna llamada “estado_cupon” y luego actualizar su valor en todos los registros existentes. Este paso es fundamental para continuar con el proceso de asignación de cupones a los clientes, ya que ahora la base de datos tiene la capacidad de almacenar el estado de los cupones de manera individual por cada renta. 3. Implementamos una nueva tabla en la base de datos llamada cupones, que será utilizada para almacenar información relacionada con los cupones que se asignan a los clientes. Esta tabla tiene como propósito llevar un registro detallado de cuándo se generaron y cuándo fueron utilizados los cupones, además de establecer la relación entre los cupones y los clientes. 4. Se desarrolla el procedimiento almacenado llamado “SacarCupones”, cuyo objetivo es verificar si un cliente cumple con los criterios para recibir un cupón y, de ser así, asignarles uno y actualizar el estado de las rentas correspondientes. Este procedimiento realiza múltiples operaciones de consulta y actualización sobre la tabla de rentas, y es fundamental para la automatización del proceso de asignación de cupones. Se asegura de que, al acumular al menos tres devoluciones sin haber recibido cupones previamente, se le asigne un cupón y se actualicen los registros de las rentas correspondientes para evitar duplicidades. 5. Establecemos un procedimiento almacenado denominado “AplicarCuponesATodosClientes”, diseñado para recorrer la lista de clientes y aplicar cupones a aquellos que cumplan ciertos criterios. Este procedimiento utiliza un cursor para iterar sobre cada cliente y llama a otro procedimiento (SacarCupones) para determinar la elegibilidad de cada uno. 6. Se crea una tabla llamada “log_rentas_no_sirven”, cuyo propósito es almacenar un registro de las rentas que no califican para generar cupones o no cumplen con los requisitos establecidos. Esta tabla incluirá tanto la información de la renta como la fecha en que se realizó la consulta y la fecha y hora en la que se creó el registro. 7. En este paso se implementa un trigger llamado “rentalA”, el cual se ejecuta automáticamente después de cada actualización en la tabla “rental”. El objetivo de este trigger es registrar en la tabla “log_rentas_no_sirven” las rentas que cambian su estado de “estado_cupon” de false a true, asegurando que se lleve un control preciso de las rentas que no calificaron inicialmente para cupones pero luego cambiaron su estado. 8. Como paso final, se ejecuta una consulta SQL para obtener la cantidad total de cupones generados por cada cliente en la tabla cupones. Este análisis permite identificar qué clientes han recibido cupones, asegurando así que se está llevando un control efectivo de los beneficios otorgados. Dicho paso final cierra el ciclo del proceso de generación y seguimiento de cupones, asegurando que la base de datos se mantenga organizada y que la información relevante esté fácilmente accesible para análisis y toma de decisiones. Conclusión: La práctica se centró en el desarrollo de funciones, triggers y transacciones en MySQL, aplicadas a la base de datos Sakila. Se llevaron a cabo diversas técnicas, incluyendo la creación de funciones específicas para realizar las acciones requeridas, así como el diseño, implementación y gestión de triggers y transacciones dentro de la base de datos. Esto permitió identificar eventos específicos y prevenir errores durante la ejecución de ciertos comandos. A través de estas actividades, se fortalecieron los conocimientos sobre las herramientas mencionadas y se amplió la perspectiva sobre las oportunidades de desarrollo en el área del backend, así como en la administración, estructuración y mantenimiento de bases de datos. Este enfoque contribuye al backend al incorporar validaciones y reglas de negocio, evitando que la carga de procesamiento recaiga completamente en la base de datos.