
БД 3 курс осень / БД7
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
Ассистент |
|
|
|
Б.К.Акопян |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №7 |
ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПОЛЬЗОВАТЕЛЬСКИХ ФУНКЦИЙ |
по курсу: БАЗЫ ДАННЫХ |
|
РАБОТУ ВЫПОЛНИЛ
СТУДЕНТ гр. № |
4116 |
|
|
|
|
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург 2023
Цель работы: программная реализация пользовательских функций на сервере.
Вариант 21.
Организация спортивного мероприятия
В Гуапландии любят спорт. Спортивная инфраструктура страны представлена спортивными сооружениями различного типа: спортивные залы, манежи, стадионы, корты и т.д. Каждая из категорий спортивных сооружений обладает атрибутами, специфичными только для нее: стадион характеризуется вместимостью, корт – типом покрытия. Гуапчане-спортсмены под руководством тренеров занимаются отдельными видами спорта, при этом один и тот же спортсмен может заниматься несколькими видами спорта, и в рамках одного и того же вида спорта может тренироваться у нескольких тренеров. Все спортсмены объединяются в спортивные клубы, при этом каждый из них может выступать только за один клуб. Организаторы соревнований проводят состязания по отдельным видам спорта на спортивных сооружениях города. По результатам участия спортсменов в соревнованиях производится награждение.
Ход работы:
Модель данных из прошлой лабораторной работы открыта в формате .mwb (рисунок 1)
Рисунок 1- модель данных
Реализована хранимая функция athlete_training_time, которая принимает на вход код спортсмена и по времени из столбца «дата» (таблица «тренировки») выводит в какую часть дня у него тренировка: «раннее утро», «дневное время», «вечер». Переменная result является глобальной. Training_time хранит время тренировки, для определения времени дня используются условные операторы (рисунок 4,5).
Рисунок 2- таблица «соревнования»
Рисунок 3- таблица «спортсмены»
Листинг. Функция определения времени тренировки спортсмена
DELIMITER //
CREATE FUNCTION athlete_training_time( код_спортсмена INT) RETURNS VARCHAR(255) DETERMINISTIC
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 @result = 'Раннее утро';
ELSEIF training_time >= '12:00:00' AND training_time < '16:00:00' THEN
SET @result = 'Дневное время';
ELSE
SET @result = 'Вечер';
END IF;
RETURN @result;
END;
//
DELIMITER ;
SELECT athlete_training_time(1);
Рисунок 4- выполнение функции athlete_training_time для спортсмена с кодом 1
Рисунок 5- выполнение функции athlete_training_time для спортсмена с кодом 3
Для реализации следующей хранимой функции, в таблицу «соревнования» добавлены новые записи (рисунок 6).
Рисунок 6- таблица «соревнования»
Функция Competition_Date выводит информацию о соревнованиях, у которых дата проведения меньше текущей даты. С помощью условия cur, выбираются данные из таблицы. Переменная done используется для отслеживания завершения цикла. FETCH cur сохраняет данные, выбранные курсором в переменные. Если done становится true, значит записей больше нет, и цикл завершается. CONCAT объединяет строки из разных записей.
Листинг. Функция поиска прошедшего соревнования
DELIMITER //
CREATE FUNCTION Competition_Date()
RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN
DECLARE код INT;
DECLARE дата DATE;
DECLARE result VARCHAR(1000) DEFAULT '';
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT код_соревнования, дата_проведения
FROM соревнования
WHERE дата_проведения < CURDATE()
ORDER BY дата_проведения;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO код, дата;
IF done THEN
LEAVE read_loop;
END IF;
SET result = CONCAT(result, 'Код соревнования: ', код, ', Дата проведения: ', дата, '; ');
END LOOP;
CLOSE cur;
SET @global_result = result;
RETURN @global_result;
END;
//
DELIMITER ;
SELECT Competition_Date();
Рисунок 7- выполнение функции Competition_Date
Для просмотра списка хранимых функций БД, выполнены команды USE и SHOW FUNCTION STATUS (рисунок 8)
Рисунок 8- вывод всех хранимых функций БД
Рисунок 9- фрагмент списка хранимых функций БД
Вывод: реализованы две хранимые функции: athlete_training_time и Competition_Date. Athlete_training_time выводит в какое время дня у спортсмена тренировка, competition_Date выводит информацию о соревнованиях, которые уже прошли.
Список используемых источников:
1. A.В. Аграновский, В.В. Боженко, Е.Л. Турнецкая. - Учебно-методическое пособие «Разработка и администрирование базы данных с открытым исходным кодом»‒ СПб.: ГУАП, 2022
2. Руководство по MySQL: https://metanit.com/sql/mysql.