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

1 / 7

.docx
Скачиваний:
1
Добавлен:
16.05.2025
Размер:
318.74 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

Кафедра 41

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

Доцент, канд. техн. наук

Е. Л. Турнецкая

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

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

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

Лабораторная работа №7

Программная реализация триггеров

по курсу: Базы данных

СТУДЕНТКА ГР. №

Z0411

14.05.23

М. В. Карелина

номер группы

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

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

Номер студенческого билета: 2020/3477

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

2023

Цель работы:

получение практических навыков по программной реализации триггеров на сервере MySQL.

Порядок выполнения работы

1. Реализуйте триггер, привязанный к событию INSERT (для вашей предметной области). Проверьте его работоспособность. Результат покажите на скриншоте.

2. Разработайте триггер, привязанный к событию UPDATE (для вашей предметной области). Проверьте его работоспособность. Результат покажите на скриншоте.

3. Создайте триггер, привязанный к событию DELETE (для вашей предметной области). Проверьте его работоспособность. Результат покажите на скриншоте.

4. Посмотрите список реализованных триггеров и сделайте скриншот.

5. Выполните отчет в соответствие с требованиями ГОСТ 7.32-2017 и ГОСТ 2.105-2019: по оформлению отчетов (https://guap.ru/standart/doc).

Вариант 8

Обслуживание рейсов в аэропорту

Аэропорт обслуживает рейсы разных авиакомпаний. У каждой авиакомпании есть несколько рейсов. Авиакомпании предоставляют самолеты различного типа (вместимости). Самолеты характеризуются типом, годом выпуска, количеством мест и фирмой-производителем. В один город могут быть несколько рейсов в разное время, осуществляемых различными авиакомпаниями. Самолеты обслуживаются экипажем: 27 командир корабля, второй пилот, штурман, бортинженер и стюардессы. О сотрудниках хранится следующая информация: Ф.И.О., должность, квалификация, экипаж. Рейс имеет свой номер, пункт отправления, пункт прибытия, время вылета, время в пути, тип самолета, название авиакомпании, обслуживающей данный рейс. Билет на самолет имеет свой номер и № рейса, ФИО пассажира, № места, стоимость, дата продажи, дата бронирования. Пассажир, приобретая билет на самолет, сообщает о себе паспортные данные. Клиент может забронировать билет по Интернету и выкупить его за 3 часа до вылета.

В данной лабораторной работе будет использована модель данных, спроектированная в прошлых работах (Рис. 1).

Рисунок 1 - Модель данных в среде MySQL Workbench

Триггеры – это объекты базы данных или хранимые программы, которые будут выполнены автоматически при наступлении определенного события, например модификации данных с помощью операторов INSERT, UPDATE или DELETE для связанной таблицы базы данных.

Создадим триггер, который автоматически подсчитывает разницу в днях между Датой бронирования и Датой приобретения в Таблице Билет.

Листинг триггера. Подсчет периода.

use аэропорт;

drop trigger if exists check_duration;

delimiter //

create trigger check_duration before insert on билет for

each row

begin

set new.`Разница` = ABS(DATEDIFF(new.`Дата приобретения`, new.`Дата бронирования`));

end

//

Рисунок 2 - Результат периода

В таблице Билет создадим триггер на обновление данных для проверки корректности Даты бронирования и Даты продажи.

Листинг триггера. Проверка даты.

use аэропорт;

drop trigger if exists check_date;

delimiter //

create trigger check_date before update on `билет`

for each row

BEGIN

IF new.`Дата бронирования` > new.`Дата приобретения` THEN

SIGNAL SQLSTATE '45000'

SET

MESSAGE_TEXT = 'Дата бронирования не может быть позже даты

приобретения';

END IF;

END //

Тестирование правильности.

update `билет` set `Дата бронирования` = '2023-01-01'

where `№ Билет` = 11;

Рисунок 3 - Расшифровка отчета об отказе выполнения операции обновления

Создадим триггер для удаления записи в таблице Скидка.

Для этого создадим таблицу Лог.

CREATE TABLE `лог` (id_log INT AUTO_INCREMENT PRIMARY KEY,

date_log date,

operation char(10),

description text)

Листинг триггера.

use `аэропорт`;

drop trigger if exists number_rr;

delimiter $$

create trigger number_rr before delete on `скидка`

for each row

begin

insert into `лог` (date_log,operation,description) VALUES

(curdate(),'delete','Удаление из таблицы скидка');

end $$

delimiter ;

Результат выполнения.

delete from скидка where `№ Билет` = 9;

select * from аэропорт.`лог`;

Рисунок 4 - Результат заполнения таблицы log

Вывод

В ходе выполнения данной лабораторной работы были изучены возможности триггеров, на сервере были реализованы триггеры, которые могут пригодиться при работе в этой предметной области – Аэропорт, например, триггер на расчёт количества дней между датами бронирования и приобретения, и триггеры (на обновление и на удаление), которые обновляют информацию о корректности ввода дат, а также выводят сообщение об ошибке и удаления данных в таблице Скидка.

Созданные триггеры были протестированы и срабатывают корректно.

Проблемы возникли с триггером DELETE, для его корректной работы в итоге была выбрана таблица без связей, в других случая возникала Ошибка 1442(про которую написано в интернет ресурсах, что она не новая и все о ней знают).

Соседние файлы в папке 1