Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы / отчет лабы бд 5 сем.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
2.84 Mб
Скачать

Лабораторная работа №3 оптимизация работы базы данных и защита базы данных в субд mysql 5.5

Цель лабораторной работы:

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

Задание на выполнение и ход лабораторной работы:

В соответствии с разработанной логической моделью, созданной в СУБД MySQL 5.5 (входящей в состав Денвер 3 или МАМР 5.0 и выше) и наполненной в рамках выполнения лабораторной работы 2 с учетом особенностей запросов, сформированных в лабораторной работе №3:

  1. Выполнить оптимизацию работы разработанной базы данных путём использования индексов для увеличения производительности операций выборки (обосновать выбор индексов);

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

Индексы в таблице chat-user:

Индексы в таблице chats:

Индексы в таблице damage_of_equipment:

Индексы в таблице halts:

Индексы в таблице messages:

Индексы в таблице qualification-of-instructor:

Индексы в таблице rent:

Индексы в таблице review:

Индексы в таблице route-halt:

Индексы в таблице teams:

Индексы в таблице trip:

Индексы в таблице equipment:

Индексы в таблице routes:

  1. Определить пользовательские роли и выполнить их проектирование;

Роли: администратор, инструктор, турист

CREATE ROLE administrator;

CREATE ROLE instructor;

CREATE ROLE tourist;

Администратор может видеть все данные в базе, может добавлять, изменять и удалять данные.

GRANT INSERT, UPDATE, DELETE ON hikingtrips.* TO administrator;

Инструктор может видеть данные о походах, привалах, оборудовании и туристах. Он может добавлять, изменять и удалять данные в таблицах походов, привалов и оборудовании и может только просматривать таблицу туристов.

GRANT INSERT, UPDATE, DELETE ON hikingtrips.routes TO instructor;

GRANT INSERT, UPDATE, DELETE ON hikingtrips.halts TO instructor;

GRANT INSERT, UPDATE, DELETE ON hikingtrips.equipment TO instructor;

GRANT SELECT ON hikingtrips.costumers TO instructor;

Турист может только просматривать таблицу походов, привалов и оборудования.

GRANT SELECT ON hikingtrips.routes TO tourist;

GRANT SELECT ON hikingtrips.halts TO tourist;

GRANT SELECT ON hikingtrips.equipment TO tourist;

  1. Разработать процедуру для выполнения одной из операций поддерживаемого процесса;

Делаем скидку 10% в конце месяца на все маршруты:

BEGIN

DECLARE cur_date DATE;

SET cur_date = CURDATE();

IF LAST_DAY(current_date) = current_date THEN

UPDATE routes

SET price = price * 0.90

WHERE price IS NOT NULL;

END IF;

END

  1. Разработать триггеры для контроля ограничений целостности.

Проверка ввода даты рождения, нельзя добавить пользователя младше 18 лет:

BEGIN

IF YEAR(NEW.date_of_birth) > 2007 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'The user is under 18 years old. You cannot add underage users';

END IF;

END (SIGNAL SQLSTATE '45000' в MySQL используется для сигнализации общего значения SQLSTATE, означающего «необработанное определяемое пользователем исключение».)

Проверка ввода номера телефона:

BEGIN

IF NOT NEW.phone_number REGEXP '^[0-9]{11}$' THEN

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Номер телефона должен состоять из 11 цифр.';

END IF;

END;

Проверка ввода адреса электронной почты:

BEGIN

IF NEW.email NOT LIKE '%@%.%' THEN

SIGNAL SQLSTATE '45000'

SET MESSAGE_TEXT = 'Invalid email address has been entered';

END IF;

END

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