
БД 3 курс осень / БД8
.docxлГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Ассистент |
|
|
|
Б.К.Акопян |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №8 |
ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ТРИГГЕРОВ |
по курсу: БАЗЫ ДАННЫХ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ гр. № |
4116 |
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2023
Цель работы получение практических навыков по программной реализации триггеров на сервере MySQL
Вариант 21.
Организация спортивного мероприятия
В Гуапландии любят спорт. Спортивная инфраструктура страны представлена спортивными сооружениями различного типа: спортивные залы, манежи, стадионы, корты и т.д. Каждая из категорий спортивных сооружений обладает атрибутами, специфичными только для нее: стадион характеризуется вместимостью, корт – типом покрытия. Гуапчане-спортсмены под руководством тренеров занимаются отдельными видами спорта, при этом один и тот же спортсмен может заниматься несколькими видами спорта, и в рамках одного и того же вида спорта может тренироваться у нескольких тренеров. Все спортсмены объединяются в спортивные клубы, при этом каждый из них может выступать только за один клуб. Организаторы соревнований проводят состязания по отдельным видам спорта на спортивных сооружениях города. По результатам участия спортсменов в соревнованиях производится награждение.
Ход работы:
Модель данных из прошлой лабораторной работы открыта в формате .mwb (рисунок 1)
Рисунок 1- модель данных
Триггер check_training_date активируется перед вставкой новых записей в таблицу «тренировки». Его целью является проверка даты тренировки перед вставкой и предотвращения добавления записей с датами в прошлом (рисунок 2)
Рисунок 2- таблица «тренировки»
Листинг триггера BEFORE INSERT. Проверка даты
drop trigger if exists check_training_date;
DELIMITER //
CREATE TRIGGER check_training_date
BEFORE INSERT ON тренировки
FOR EACH ROW
BEGIN
IF NEW.дата < CURDATE() THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Ошибка: Дата тренировки не может быть в прошлом.';
END IF;
END;
//
DELIMITER ;
Листинг вставки записи в таблицу
USE sport;
INSERT INTO тренировки
VALUES (8,1,5, '2023-10-11 12:30:00' );
SELECT * FROM тренировки ;
Рисунок 3- ошибка добавления записи в таблицу
Рисунок 4- таблица «тренировки»
Далее реализован триггер, который срабатывает при выполнении операции обновления кода спортсмена таблицы «тренировки». Если код спортсмена обновляется на 4, то код тренера изменяется на 3 (рисунок 6).
Рисунок 5- таблица «соревнования»
Листинг триггера UPDATE. Обновление кода
DELIMITER //
CREATE TRIGGER update_coach_code
BEFORE UPDATE ON тренировки FOR EACH ROW
BEGIN
DECLARE new_sportsman_code INT;
DECLARE new_coach_code INT;
-- Получаем новый код спортсмена и новый код тренера
SET new_sportsman_code = NEW.код_спортсмена;
SET new_coach_code = NEW.код_тренера;
-- Если новый код спортсмена равен 4, обновляем код тренера на 3
IF new_sportsman_code = 4 THEN
SET NEW.код_тренера = 3;
END IF;
END;
//
DELIMITER ;
Листинг обновления таблицы
UPDATE тренировки
SET код_спортсмена = 4
WHERE код_тренировки = 6;
Рисунок 6- выполнение триггера update_coach_code
Затем создается триггер, который создает действие, выполняющееся после удаления записи из таблицы «тренеры». Если запись о тренере удаляется из таблицы «тренировки», триггер автоматически удаляет все записи о тренировках, связанные с этим тренером (рисунок 9,10)
Рисунок 7- таблица «тренеры»
Рисунок 8- таблица «тренировки»
Листинг триггера delete_training
drop trigger if delete_training;
DELIMITER //
CREATE TRIGGER delete_training
AFTER DELETE ON тренеры
FOR EACH ROW
BEGIN
DELETE FROM тренировки WHERE код_тренера = OLD.код_тренера;
END;
//
DELIMITER ;
Листинг удаления записи тренера с кодом 2
-- Отключить проверку внешних ключей
SET FOREIGN_KEY_CHECKS = 0;
DELETE FROM тренеры WHERE код_тренера = 2;
SET FOREIGN_KEY_CHECKS = 1;
Рисунок 9- таблица «тренеры» после удаления
Рисунок 10- таблица «тренировки» после применения триггера
Для просмотра списка триггеров БД, выполнены команды USE и SHOW TRIGGERS (рисунок 11)
Рисунок 11- вывод всех хранимых триггеров БД
Рисунок 12- список триггеров БД
Вывод: реализованы три триггера: check_training_date, update_coach_code и delete_training, которые срабатывают до добавления, обновления или после удаления.
Список используемых источников:
1. A.В. Аграновский, В.В. Боженко, Е.Л. Турнецкая. - Учебно-методическое пособие «Разработка и администрирование базы данных с открытым исходным кодом»‒ СПб.: ГУАП, 2022
2. Руководство по MySQL: https://metanit.com/sql/mysql.