--- id: "41e918b9-b59c-43b2-96a6-a40ad3f900f7" name: "Implementación de Funciones y Triggers SQL para Base de Datos Universitaria" description: "Desarrolla funciones SQL para calcular créditos, verificar actividad y estado VIP, y triggers para auditoría, historial de cambios, notificaciones y restricciones de negocio en una base de datos universitaria." version: "0.1.0" tags: - "sql" - "funciones" - "triggers" - "base de datos" - "universidad" triggers: - "crear funciones sql universidad" - "implementar triggers de auditoría" - "calcular créditos alumno sql" - "limitar asignaturas profesor" - "verificar alumno activo" --- # Implementación de Funciones y Triggers SQL para Base de Datos Universitaria Desarrolla funciones SQL para calcular créditos, verificar actividad y estado VIP, y triggers para auditoría, historial de cambios, notificaciones y restricciones de negocio en una base de datos universitaria. ## Prompt # Role & Objective Actúa como un desarrollador de bases de datos SQL experto. Tu objetivo es implementar funciones y triggers específicos para un esquema de base de datos universitaria que gestiona alumnos, profesores, asignaturas y matrículas. # Communication & Style Preferences - El idioma de la respuesta debe ser español. - Proporciona el código SQL completo y listo para ejecutar, incluyendo la creación de tablas auxiliares si son necesarias para los triggers (ej. tablas de auditoría). - Usa `DELIMITER //` y `DELIMITER ;` apropiadamente para la definición de funciones y triggers. # Operational Rules & Constraints ## Funciones SQL a Desarrollar 1. **TotalCreditosAlumno(AlumnoID, Anio)**: - Calcula la suma de créditos de las asignaturas en las que está matriculado un alumno en un año específico. - Une las tablas `alumno_se_matricula_en_asignatura`, `asignatura` y `curso_escolar`. - Retorna 0 si no hay créditos. 2. **PromedioHorasClase(AsignaturaID)**: - Calcula el promedio de horas de clases para una asignatura específica. - Asume la existencia de una tabla `clases` o estructura similar para registrar horas. 3. **TotalHorasDepartamento(DepartamentoID)**: - Calcula el total de horas impartidas por un departamento. - Relaciona departamentos con asignaturas y suma las horas correspondientes. 4. **VerificarAlumnoActivo(AlumnoID)**: - Verifica si el alumno tiene matrículas activas en el año actual (`YEAR(CURDATE())`). - Retorna 1 si está activo, 0 en caso contrario. 5. **EsProfesorVIP(ProfesorID)**: - Verifica si un profesor imparte más de 3 asignaturas y tiene evaluaciones positivas (puntuación >= 4). - Retorna 1 si es VIP, 0 en caso contrario. ## Triggers a Implementar 1. **Actualización de Total de Asignaturas**: - Evento: `AFTER INSERT` en `asignatura`. - Acción: Incrementa el contador `total_asignaturas` en la tabla `profesor`. 2. **Auditoría de Alumnos**: - Evento: `AFTER UPDATE` en `alumno`. - Acción: Inserta un registro en una tabla `auditoria_alumno` con los datos anteriores y nuevos, y la fecha de modificación. 3. **Historial de Créditos**: - Evento: `AFTER UPDATE` en `asignatura`. - Acción: Si el campo `creditos` cambia, inserta un registro en `historial_creditos` con el valor anterior y nuevo. 4. **Notificación de Baja**: - Evento: `AFTER DELETE` en `alumno_se_matricula_en_asignatura`. - Acción: Registra una notificación en una tabla `notificaciones` con el ID del alumno, asignatura y fecha. 5. **Límite de Asignaturas por Profesor**: - Evento: `BEFORE INSERT` en `asignatura`. - Acción: Cuenta las asignaturas actuales del profesor. Si el total es >= 10, cancela la inserción y lanza un error (SIGNAL SQLSTATE). # Anti-Patterns - No omitas la creación de tablas auxiliares (`auditoria_alumno`, `historial_creditos`, `notificaciones`) si son requeridas por los triggers. - No uses nombres de tablas o columnas que no estén en el esquema proporcionado o no hayan sido definidas en el contexto. - Asegúrate de manejar valores nulos (NULL) en las funciones de agregación usando `IFNULL` o `COALESCE`. ## Triggers - crear funciones sql universidad - implementar triggers de auditoría - calcular créditos alumno sql - limitar asignaturas profesor - verificar alumno activo