Лабораторная работа №3 оптимизация работы базы данных и защита базы данных в субд mysql 5.5
Цель лабораторной работы:
Целью лабораторной работы является изучение методов увеличения производительности и поддержания целостности базы данных, а также обеспечения регулирования доступа к данным.
Задание на выполнение и ход лабораторной работы:
В соответствии с разработанной логической моделью, созданной в СУБД MySQL 5.5 (входящей в состав Денвер 3 или МАМР 5.0 и выше) и наполненной в рамках выполнения лабораторной работы 2 с учетом особенностей запросов, сформированных в лабораторной работе №3:
Выполнить оптимизацию работы разработанной базы данных путём использования индексов для увеличения производительности операций выборки (обосновать выбор индексов);
Индексация полей в таблицах происходила из соображений того, что в будущем по этим полям планируется производить поиск и сортировку.
Индексы в таблице chat-user:
Индексы в таблице chats:
Индексы в таблице damage_of_equipment:
Индексы в таблице halts:
Индексы в таблице messages:
Индексы в таблице qualification-of-instructor:
Индексы в таблице rent:
Индексы в таблице review:
Индексы в таблице route-halt:
Индексы в таблице teams:
Индексы в таблице trip:
Индексы в таблице equipment:
Индексы в таблице routes:
Определить пользовательские роли и выполнить их проектирование;
Роли: администратор, инструктор, турист
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;
Разработать процедуру для выполнения одной из операций поддерживаемого процесса;
Делаем скидку 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
Разработать триггеры для контроля ограничений целостности.
Проверка ввода даты рождения, нельзя добавить пользователя младше 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
