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

ГУАП

КАФЕДРА № 41

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

Ассистент

Б.К.Акопян

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №6

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ХРАНИМЫХ ПРОЦЕДУР

по курсу: БАЗЫ ДАННЫХ

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ гр. №

4116

подпись, дата

инициалы, фамилия

Санкт-Петербург 2023

Цель работы: программная реализация хранимых процедур на сервере.

Вариант 21.

Организация спортивного мероприятия

В Гуапландии любят спорт. Спортивная инфраструктура страны представлена спортивными сооружениями различного типа: спортивные залы, манежи, стадионы, корты и т.д. Каждая из категорий спортивных сооружений обладает атрибутами, специфичными только для нее: стадион характеризуется вместимостью, корт – типом покрытия. Гуапчане-спортсмены под руководством тренеров занимаются отдельными видами спорта, при этом один и тот же спортсмен может заниматься несколькими видами спорта, и в рамках одного и того же вида спорта может тренироваться у нескольких тренеров. Все спортсмены объединяются в спортивные клубы, при этом каждый из них может выступать только за один клуб. Организаторы соревнований проводят состязания по отдельным видам спорта на спортивных сооружениях города. По результатам участия спортсменов в соревнованиях производится награждение.

Ход работы:

Модель данных из прошлой лабораторной работы открыта в формате .mwb (рисунок 1)

Рисунок 1- модель данных

Реализована хранимая процедура training_time, которая принимает на вход код тренера и по времени из столбца «дата» (таблица «тренировки») выводит в какую часть дня у него тренировка: «раннее утро», «дневное время», «вечер». Переменная global_result является глобальной. Training_time хранит время тренировки, для определения времени дня используются условные операторы. С помощью CALL выполняется вызов процедуры (рисунок 3,4)

Рисунок 1- таблица «тренировки»

Рисунок 2- таблица «тренеры»

Листинг. Процедура определения времени тренировки тренера

DELIMITER

CREATE PROCEDURE training_time(IN код_тренера INT)

BEGIN

-- объявление переменной для времени

DECLARE training_time TIME;

-- извлечение времени и сохранение его в переменную

SELECT TIME(т.дата) INTO training_time

FROM тренировки AS т

WHERE т.код_тренера = код_тренера

ORDER BY т.дата

LIMIT 1;

IF training_time > '08:00:00' AND training_time < '12:00:00' THEN

SET @global_result = 'Раннее утро';

ELSEIF training_time >= '12:00:00' AND training_time < '16:00:00' THEN

SET @global_result = 'Дневное время';

ELSE

SET @global_result = 'Вечер';

END IF;

SELECT тренеры.код_тренера, имя, фамилия, @global_result AS Время_тренировки, time(тренировки.дата) as время

FROM тренеры

JOIN тренировки ON тренеры.код_тренера = тренировки.код_тренера

WHERE тренировки.код_тренера = код_тренера;

END;

//

DELIMITER ;

CALL training_time(1);

Рисунок 3- выполнение процедуры training_time для тренера с кодом 1

Рисунок 4- выполнение процедуры training_time для тренера с кодом 6\

Далее реализована процедура, которая принимает на вход код спортсмена и тип вида спорта. По таблице соревнования процедура проверяет есть ли подходящие соревнования для спортсмена по выбранному виду спорта, если есть, выводит информацию о спортсмене и соревновании, если нет- выводит сообщение. Чтобы соревнование подошло, дата соревнования должна быть позже сегодняшней даты. Имя и фамилия атлета записываются в глобальные переменные (рисунок 7,8)

Рисунок 5- таблица «соревнования»

Рисунок 6- таблица «вид_спорта»

Листинг. Процедура поиска соревнования для спортсмена по виду спорта

DELIMITER //

CREATE PROCEDURE сompetition_search(IN athlete_id INT, IN sport_type VARCHAR(255))

BEGIN

-- Объявление глобальных переменных для хранения ID соревнования и информации о спортсмене

DECLARE competition_id INT;

SET @athlete_name = '';

SET @athlete_surname = '';

SET competition_id = 0;

-- Поиск доступного соревнования для введенного вида спорта

SELECT c.код_соревнования INTO competition_id

FROM соревнования c

JOIN вид_спорта v ON v.код_вида_спорта = c.код_вида

WHERE v.название = sport_type AND c.дата_проведения >= NOW()

ORDER BY c.дата_проведения

LIMIT 1;

-- Если соревнование найдено, то

IF competition_id > 0 THEN

SELECT имя, фамилия INTO @athlete_name, @athlete_surname

FROM спортсмены

WHERE код_спортсмена = athlete_id;

-- Вывод информации о соревновании

SELECT @athlete_name, @athlete_surname, competition_id, c.дата_проведения as competition_date, sport_type

FROM соревнования c

WHERE c.код_соревнования = competition_id;

ELSE

SELECT 'Нет доступных соревнований для выбранного вида спорта.';

END IF;

END;

//

DELIMITER ;

CALL competition_search(3, 'теннис');

Рисунок 7- выполнение процедуры competition_search по виду спорта «теннис»

Рисунок 8- выполнение процедуры competition_search по несуществующему виду спорта

Для просмотра списка хранимых процедур БД, выполнены команды USE и SHOW PROCEDURE STATUS (рисунок 9)

Рисунок 9- вывод всех хранимых процедур БД

Рисунок10- фрагмент списка хранимых процедур БД

Вывод: реализованы две хранимые процедуры: training_time и competition_search. Training_time выводит в какое время дня у тренера тренировка, competition_search выполняет поиск соревнования по виду спорта, и сравнивает дату соревнования с сегодняшней.

Список используемых источников:

1. A.В. Аграновский, В.В. Боженко, Е.Л. Турнецкая. - Учебно-методическое пособие «Разработка и администрирование базы данных с открытым исходным кодом»‒ СПб.: ГУАП, 2022

2. Руководство по MySQL: https://metanit.com/sql/mysql.

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