- •Содержание
- •Введение
- •Анализ разрешений и запретов на операции с табличными данными для различных пользователей.
- •1 Системный анализ предметной области
- •1.2 Описание предметной области
- •1.2 Описание входных документов для заполнения бд
- •1.3 Определение пользователей
- •1.4 Определение запросов
- •1.5 Определение выходных документов
- •Анализ сущностей и связей между ними: er–диаграмма
- •Нормализация отношений: схема бд
- •Запросы
- •5 Анализ разрешений и запретов на операции с табличными данными для различных пользователей
- •6 Проектирование пользовательского интерфейса
- •6.1 Реализация всех запросов через вызовы хранимых процедур
- •6.2 Хранимые процедуры для выдачи требуемых разрешений каждому пользователю
- •6.3 Триггеры для работы пользователей с таблицами базы данных
- •7 Обработка и визуализация данных
- •7.1 Обработка и визуализация данных инструментами языка программирования Python
- •7.2 Визуализация данных программными инструментами Excel
- •Заключение
- •Список использованных источников
- •Приложение а Листинг создания таблиц
- •Приложение б Листинг добавление данных в таблицы
- •Приложение в Скриншоты заполненных таблиц в бд
5 Анализ разрешений и запретов на операции с табличными данными для различных пользователей
В данной ИС будут присутствовать следующие пользователи:
менеджер по организации рейсов заключает договоры с авиакомпаниями;
кассир принимает наличные деньги и оформляет финансовые
документы;
системный администратор имеет полное право доступа к БД, отвечает за
её работу. Менеджер по организации рейсов:
Может просматривать данные в таблицах Рейс, Билет, Самолет;
Может обновлять данные в таблице Авиакомпания;
Не может удалять записи ни в одной из таблиц;
Не может добавлять записи ни в одной из таблиц.
Кассир:
Может просматривать данные в таблицах Билет, Авиакомпания, Рейс,
Может добавлять новые записи в таблицу Билет
Может обновлять данные в таблице Билет
Не может удалять записи ни в одной из таблиц
Админ:
Может просматривать, добавлять, обновлять и удалять записи во всех таблицах
Были созданы 3 пользователя: менеджер обслуживания рейсов (mor), кассир (cashier) и администратор БД (adminbd). Создание пользователей и их доступов представлено в листинге 12. Результат создания пользователей представлен на рисунке 13.
Листинг 12 – Создание пользователей
create user 'mor' identified by 'mor1';
grant select on `рейс` to 'mor';
grant select on `билет` to 'mor';
grant select on `самолет` to 'mor';
grant update on `авиакомпания` to 'mor';
create user 'cashier' identified by 'cashier1';
grant select on `билет` to 'cashier';
grant select on `авиакомпания` to 'cashier';
grant select on `рейс` to 'cashier';
grant update on `билет` to 'cashier';
grant insert on `билет` to 'cashier';
create user 'Adminbd' identified by 'adminbd1';
grant all privileges on *.* to 'Adminbd';
Рисунок
12 - Список пользователей и их привилегий
6 Проектирование пользовательского интерфейса
6.1 Реализация всех запросов через вызовы хранимых процедур
Все запросы были реализованы через вызовы хранимых процедур.
Реализация запроса 1, вывод информации о о пассажирах по данному вылету, в процедуру get_passenger_info представлена в листинге 13. Пример вызова процедуры представлен на рисунке 14.
Листинг 13 – Реализация запроса 1 в процедуру get_passenger_info
DELIMITER //
CREATE PROCEDURE get_passenger_info()
BEGIN
SELECT `пассажиры`.`№ Пассажира`, `пассажиры`.`Ф.И.О.`
FROM `пассажиры`
JOIN `билет` ON `пассажиры`.`№ Пассажира` = `билет`.`№ Пассажира`
WHERE `билет`.`№ Рейса` = 2;
END //
DELIMITER ;
Рисунок 13 - Пример вызова процедуры get_passenger_info
Реализация запроса 2, вывод списка самолетов по годам выпуска в заданном интервале конкретной авиакомпании, в процедуру get_airplane_info представлена в листинге 14. Пример вызова процедуры представлен на рисунке 15.
Листинг 14 – Реализация запроса 2 в процедуру get_airplane_info
DELIMITER //
CREATE PROCEDURE get_airplane_info()
BEGIN
SELECT `самолет`.`Тип самолета`, `самолет`.`Год выпуска`
FROM `самолет`
JOIN `авиакомпания` ON `самолет`.`№ Самолета` = `авиакомпания`.`№ самолета`
WHERE `авиакомпания`.`Название авиакомпании` = 'Нарутотревел'
AND `самолет`.`Год выпуска` BETWEEN 2011 AND 2020;
END //
DELIMITER ;
Рисунок 14 - Пример вызова процедуры get_airplane_info
Реализация запроса 3, вывод списка экипажа на данный рейс, в процедуру get_crew_info представлена в листинге 15. Пример вызова процедур представлены на рисунке 16.
Листинг 15 – Реализация запроса 3 в процедуру get_crew_info
DELIMITER //
CREATE PROCEDURE get_crew_info()
BEGIN
SELECT `сотрудники`.`№ Экипажа`, `сотрудники`.`Ф.И.О.`, `сотрудники`.`Должность`
FROM `сотрудники`
JOIN `рейс` ON `сотрудники`.`№ Экипажа` = `рейс`.`№ Экипажа`
WHERE `рейс`.`№ Рейс` = 1;
END //
DELIMITER ;
Рисунок 16 - Пример вызова процедуры get_crew_info
Реализация запроса 4, вывод проданных билетов по каждой авиакомпании за определенный период, в процедуру get_airline_ticket_count1 представлена в листинге 16. Пример вызова процедур представлены на рисунке 17.
Листинг 16 – Реализация запроса 3 в процедуру get_airline_ticket_count1
DELIMITER //
CREATE PROCEDURE get_airline_ticket_count1()
BEGIN
SELECT `авиакомпания`.`Название авиакомпании`, COUNT(`билет`.`№ Билет`) AS `Количество билетов`
FROM `билет`
JOIN `рейс` ON `билет`.`№ Рейса` = `рейс`.`№ Рейс`
JOIN `авиакомпания` ON `рейс`.`№ авиакомпании` = `авиакомпания`.`№ Авиакомпании`
WHERE `билет`.`Дата приобретения` BETWEEN '2022-01-05' AND '2022-10-05'
GROUP BY `авиакомпания`.`Название авиакомпании`;
END //
DELIMITER ;
Рисунок 15 - Пример вызова процедуры get_airline_ticket_count1
Реализация запроса 5, вывод списка забронированных мест на пассажира, в процедуру get_booked_seat_info представлена в листинге 17. Пример вызова процедуры представлен на рисунке 18.
Листинг 17 – Реализация запроса 5 в процедуру get_booked_seat_info
DELIMITER //
CREATE PROCEDURE get_booked_seat_info()
BEGIN
SELECT `билет`.`№ Места`, `билет`.`Дата бронирования`, `места`.`Класс`
FROM `билет`
JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`
WHERE `билет`.`Дата бронирования` IS NOT NULL;
END //
DELIMITER ;
Рисунок 16 - Пример вызова процедуры get_booked_seat_info
Реализация запроса 6, вывод информации о рейсах в данный пункт назначения, в процедуру get_flight_to_tver представлена в листинге 18. Пример вызова процедур представлены на рисунке 19.
Листинг 18 – Реализация запроса 6 в процедуру get_flight_to_tver
DELIMITER //
CREATE PROCEDURE get_flight_to_tver()
BEGIN
SELECT * FROM рейс WHERE `Пункт прибытия` = 'Тверь';
END //
DELIMITER ;
Рисунок 17 - Пример вызова процедуры get_flight_to_tver
Реализация запроса 7, вывод информации о свободных местах на данный рейс и дату, в процедуру get_tickets_purchased_between_dates представлена в листинге 19. Примеры вызова процедуры представлены на рисунке 20.
Листинг 19 – Реализация запроса 7 в процедуру get_tickets_purchased_between_dates
DELIMITER //
CREATE PROCEDURE get_tickets_purchased_between_dates()
BEGIN
SELECT *
FROM `билет`
WHERE `Дата приобретения` BETWEEN '2022-10-05' AND '2022-10-12'
AND `№ Рейса` IN (2, 4, 10);
END //
DELIMITER ;
Рисунок 20 - Пример вызова процедуры get_tickets_purchased_between_dates
Реализация запроса 8, выводит информацию о средней стоимости билетов бизнес класса, в процедуру get_avg_business_class_ticket_price представлена в листинге 20. Пример вызова процедуры представлен на рисунке 21.
Листинг 20 – Реализация запроса 8 в процедуру get_avg_business_class_ticket_price
DELIMITER //
CREATE PROCEDURE get_avg_business_class_ticket_price()
BEGIN
SELECT AVG(`Стоимость`) AS `Средняя стоимость билета бизнес класса`
FROM `билет`
JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`
WHERE `места`.`Класс` = 'бизнес';
END //
DELIMITER ;
Рисунок 21 - Пример вызова процедуры get_avg_business_class_ticket_price
Реализация запроса 9, выводит информацию о том какой экипаж чаще обслуживает рейсы, в процедуру get_crew_service_frequency представлена в листинге 21. Пример вызова процедуры представлен на рисунке 22.
Листинг 21 – Реализация запроса 9 в процедуру get_crew_service_frequency
DELIMITER //
CREATE PROCEDURE get_crew_service_frequency()
BEGIN
SELECT `экипаж`.`№ Экипажа`, `экипаж`.`Название`, COUNT(`рейс`.`№ Экипажа`) AS `Частота обслуживания`
FROM `рейс`
JOIN `экипаж` ON `рейс`.`№ Экипажа` = `экипаж`.`№ Экипажа`
GROUP BY `экипаж`.`№ Экипажа`, `экипаж`.`Название`
ORDER BY COUNT(`рейс`.`№ Экипажа`) DESC;
END //
DELIMITER ;
Рисунок 22 - Пример вызова процедуры get_crew_service_frequency
Реализация запроса 10, выводит список с Ф.И.О. пассажиров, номером места, классом и расположением на определенный рейс для удобства сотрудников, в процедуру get_passenger_seat_info представлена в листинге 22. Пример вызова процедуры представлен на рисунке 23.
Листинг 22 – Реализация запроса 10 в процедуру get_passenger_seat_info
DELIMITER //
CREATE PROCEDURE get_passenger_seat_info()
BEGIN
SELECT `билет`.`№ Места`, `места`.`Класс`, `места`.`Расположение`, `пассажиры`.`Ф.И.О.`
FROM `билет`
JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`
JOIN `пассажиры` ON `билет`.`№ Пассажира` = `пассажиры`.`№ Пассажира`
WHERE `билет`.`№ Рейса` = 4;
END //
DELIMITER ;
Рисунок 18 - Пример вызова процедуры get_passenger_seat_info
