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

LR7.Tyutterin_Yakov_Z1411-1

.pdf
Скачиваний:
0
Добавлен:
29.04.2024
Размер:
4.17 Mб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА ПРИКЛАДНОЙ ИНФОРМАТИКИ

ОЦЕНКА

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

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

 

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

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

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

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

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

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

по дисциплине: Базы данных

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

 

 

 

 

 

СТУДЕНТ гр. №

Z1411

 

 

Я. Н. Тюттерин

 

 

 

 

 

 

 

номер группы

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

 

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

Студенческий билет №

2022/4886

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

Лабораторная работа № 7. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ТРИГГЕРОВ.

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

Вариант 18. Занятость актеров театра. Работников театра можно подразделить на актеров, музыкантов, постановщиков и служащих. Каждая из перечисленных категорий имеет уникальные атрибуты-характеристики и может подразделяться (например, постановщики) на более мелкие категории. Театр возглавляет директор, в функции которого входят контроль за постановками спектаклей, утверждение pепеpтуаpа, принятие на работу новых служащих, приглашение актеров и постановщиков. Актеры, музыканты и постановщики, работающие в театре, могут уезжать на гастроли. Актеры театра могут иметь звания заслуженных и народных артистов, могут быть лауреатами конкурсов. Также актерами театра могут быть и студенты театральных училищ. Каждый актер имеет свои вокальные и внешние данные (пол, возраст, голос, pост и т.п.), которые могут подходить для каких-то pолей, а для каких-то нет (не всегда женщина может сыграть мужчину и наоборот). Для постановки любого спектакля необходимо подобрать актеров на роли и дублеров на каждую главную pоль. Естественно, что один и тот же актер не может играть более одной pоли в спектакле, но может играть несколько pолей в различных спектаклях. У спектакля также имеется pежисеp-постановщик, художник-постановщик, диpижеp- постановщик, автор. Спектакли можно подразделить по жанрам: музыкальная комедия, трагедия, оперетта и пр. С другой стороны, спектакли можно подразделить на детские, молодежные и пр. В pепеpтуаpе театра указывается какие спектакли, в какие дни и в какое время будут проходить, а также даты пpемьеp. В кассах театра можно заранее приобрести билеты или абонемент на любые спектакли. Абонемент обычно включает в себя билеты на спектакли либо конкретного автора, либо конкретного жанра. Цена билетов зависит от места, и спектакля. На премьеры билеты дороже. Администрацией театра фиксируется количество проданных билетов на каждый спектакль.

Рисунок 1 - Схема БД

В качестве триггера на вставку в таблицу со спектаклями будет использоваться тот, что будет вычислять значение даты окончания на основе времени старта и продолжительности в минутах. Но сначала потребуется модифицировать существующую таблицу со спектаклями и добавить столбец с датой окончания.

ALTER TABLE shows ADD COLUMN end_date timestamp;

Результат создания новой колонки:

Далее обновим значения для существующих событий:

update shows set end_date = `date` + INTERVAL duration MINUTE;

Результат выполнения запроса:

Результат создания триггера:

create trigger set_end_date_for_show before insert on shows for each row

begin

set new.end_date = new.date + INTERVAL new.duration MINUTE;

end;

Также сразу же введем ограничение NOT_NULL для этой колонки, чтобы точно убедиться, что триггер будет выполнен перед вставкой.

Произвели вставку тестовой записи:

INSERT INTO shows (title, date, duration, theatre_id)

VALUES ('Test', now(), 120, 1);

В результате получили:

Также для проверки корректности обновления даты спектакля произведем создание триггера, который не будет допускать спектакли с датой старта идущей после либо равно времени окончания.

create trigger check_date_end_and_date_update before update on shows for each row

BEGIN

IF (new.date > new.end_date OR (new.date + INTERVAL new.duration MINUTE) != new.end_date) THEN

SIGNAL SQLSTATE '45000'

SET

MESSAGE_TEXT = 'The start date of the performance cannot be equal to or after the end date';

END IF;

END

При передаче корректных значений:

При передаче некорректного значения:

Перед созданием триггера на удаление - введен новую таблицу, которая будут хранить информацию об операция удаления для таблицы shows. То есть она будет выступать в качестве журнала об операциях. Таким образом на уровне БД будут реализован аудит.

CREATE TABLE log (

id INT AUTO_INCREMENT PRIMARY KEY, date_log timestamp not null, operation varchar(10), description varchar(50),

value text

);

Результат создания триггера:

CREATE TRIGGER delete_show before DELETE on shows

FOR EACH ROW BEGIN

INSERT INTO log (date_log, operation, description, value) VALUES (now(), 'DELETE', 'Delete from shows', CONCAT(CAST(OLD.id AS CHAR), ', ', OLD.title));

END;

Результат удаления тестовой записи:

Просмотр таблицы с логами:

Просмотр списка триггеров:

Вывод

В результате проделанной работы был получен практический опыт создания триггеров для БД MySql. Триггеры в базе данных используются для выполнения различных задач, например для автоматической генерации значений виртуального поля, логгирования, сбора статистики, изменения данных в таблицах, если в DML-операции участвует представление, предотвращения DML-операций в определённые часы, реализации сложных ограничений целостности данных, организации различных видов аудита, оповещения других модулей о том, что делать в случае изменения информации в БД и т.д. Все это упрощает работу с БД и упрощает процесс сопровождения и поддержания актуальности данных. Также позитивно сказывается на производительности, так как при их отсутствии из клиентского приложения требовалось бы предварительно производить запросы, выполняющие определенные манипуляции с данными.

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

1)https://metanit.com/sql/mysql/3.4.php

2)https://hmarketing.ru/blog/mysql/interval/

3)https://www.simmanchith.com/tutorial/sql/sql-not-null.aspx

4)https://stackoverflow.com/questions/12126991/cast-from-varchar-to-int-mysql

5)https://stackoverflow.com/questions/43689517/mysql-reference-current-row-in-delete-trigger

6)https://losst.pro/kak-dobavit-stolbets-v-tablitsu-mysql

7)https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]