Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
6
Добавлен:
11.04.2025
Размер:
239.02 Кб
Скачать

лГУАП

КАФЕДРА № 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.

Соседние файлы в папке БД 3 курс осень