Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 / курсовая.docx
Скачиваний:
3
Добавлен:
16.05.2025
Размер:
2.22 Mб
Скачать
  1. Нормализация отношений: схема бд

По определению компании Microsoft «нормализация – это процесс организации данных в базе данных, включающий создание таблиц и установление отношений между ними в соответствии с правилами, которые обеспечивают защиту данных и делают базу данных более гибкой, устраняя избыточность и несогласованные зависимости»

Основные правила нормализации:

Правило 1. Каждое поле таблицы должно представлять уникальный тип информации. Избавиться от повторяющихся полей (столбов) и разделить составные поля.

Правило 2. Каждая таблица должна иметь первичный ключ.

Правило 3. В таблице не должно быть данных, не относящихся к объекту, определяемому первичным ключом.

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

Если выполняются одновременно три первых правила, считают, что база данных представлена в «третьей нормальной форме».

Был составлен список связей таблиц, который представлен в таблице №18.

Таблица 18. Список связей таблиц

Название связи

Сущности, участвующие в связи

Назначение

1

1:М

Пассажиры-Билет

У каждого пассажира может быть несколько билетов, но каждый билет принадлежит только одному пассажиру.

2

1:М

Места-Билет

Каждое место может быть указано на нескольких билетах, но на каждом билете указано только одно место.

3

1:М

Рейс-Билет

Каждый рейс может иметь несколько билетов, но каждый билет соответствует только одному рейсу.

4

1:М

Авиакомпания-Рейс

Каждая авиакомпания может выполнять несколько рейсов, но каждый рейс принадлежит только одной авиакомпании.

5

1:М

Самолет-Авиакомпания

Каждый самолет может принадлежать только одной авиакомпании, но у каждой авиакомпании может быть несколько самолетов.

6

1:М

Экипаж-Сотрудники

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

7

1:М

Экипаж-Рейс

Каждый экипаж может выполнять несколько рейсов, но каждый рейс может иметь только один экипаж.

Была построена схема данных базы данных, которая представлена на рисунке 2.

Рисунок 2 - Схема данных

Все отношения (соответствующие сущностям) в предварительной схеме данных были приведены к третьей нормальной форме.

  1. Запросы

В среде MySQL Workbench была создана база данных, а также описанные выше таблицы с атрибутами, в каждую таблицу были введены данные. Создание базы данных представлено в листинге 1. Создание таблиц представлено в приложении А. Добавление данных в таблице представлено в приложении Б. Скриншоты заполненных таблиц в БД представлены в приложении В.

Листинг 1 – Создание базы данных

create database аэропорт;

Были написаны запросы, которые могут быть полезны работы с данными.

Запрос 1. Выводит информацию о пассажирах по данному рейсу. Запрос 1 представлен в листинге 2. Можно заменить "Рейс" на любой другой, по которому хотим получить информацию. Этот запрос использует оператор JOIN для объединения данных из таблиц "Пассажиры" и "Билет" на основе общего атрибута "№ Пассажира", а затем фильтрует результаты, чтобы показать только те строки, в которых атрибут "Рейс" соответствуют указанному значению. Результат выполнения запроса представлен на рисунке 3.

Листинг 2 – Запрос 1

SELECT `пассажиры`.`№ Пассажира`, `пассажиры`.`Ф.И.О.`

FROM `пассажиры`

JOIN `билет` ON `пассажиры`.`№ Пассажира` = `билет`.`№ Пассажира`

WHERE `билет`.`№ Рейса` = 2;

Рисунок 3 - Результат выполнения запроса 1

Запрос 2 выводит список самолетов по годам выпуска в заданном интервале конкретной авиакомпании. Запрос 2 представлен в листинге 3. Можно заменить "Название авиакомпании" на любую другую, по которому хотим получить информацию. Этот запрос использует оператор JOIN для объединения данных из таблиц "Авиакомпания" и "Самолет" на основе общего атрибута "№ Самолета", а затем фильтрует результаты, чтобы показать только те строки, в которых атрибут "Название авиакомпании" соответствуют указанному значению, также добавлено условие определенного временного интервала с помощью оператора WHERE. Результат выполнения запроса представлен на рисунке 4.

Листинг 3 – Запрос 2

SELECT `самолет`.`Тип самолета`, `самолет`.`Год выпуска`

FROM `самолет`

JOIN `авиакомпания` ON `самолет`.`№ Самолета` = `авиакомпания`.`№ самолета`

WHERE `авиакомпания`.`Название авиакомпании` = 'Нарутотревел'

AND `самолет`.`Год выпуска` BETWEEN 2011 AND 2020;

Рисунок 4 - Результат выполнения запроса 2

Запрос 3 выводит список экипажа на данный рейс. Запрос 3 представлен в листинге 4. Этот запрос использует оператор JOIN для объединения данных из таблиц "Сотрудники", "Рейс" на основе их общих атрибутов "№ Экипажа" и "Код товара" соответственно, фильтрует данные по атрибуту "Рейс ". Результат выполнения запроса представлен на рисунке 5.

Листинг 4 – Запрос 3

SELECT `сотрудники`.`№ Экипажа`, `сотрудники`.`Ф.И.О.`, `сотрудники`.`Должность`

FROM `сотрудники`

JOIN `рейс` ON `сотрудники`.`№ Экипажа` = `рейс`.`№ Экипажа`

WHERE `рейс`.`№ Рейс` = 1;

Рисунок 5 - Результат выполнения запроса 3

Запрос 4 показывает проданные билеты по каждой авиакомпании за определенный период. Запрос 4 представлен в листинге 5. Этот запрос использует оператор JOIN для объединения данных из таблиц "Авиакомпания" и "Билет" на основе общего атрибута "№ Авиакомпании", а затем фильтрует результаты, чтобы показать только те строки, которые соответствуют определенному временному интервалу с помощью оператора WHERE, а затем группирует результаты по атрибуту «Название авиакомпании". Результат выполнения запроса представлен на рисунке 6.

Листинг 5 – Запрос 4

SELECT `авиакомпания`.`Название авиакомпании`, COUNT(`билет`.`№ Билет`) AS `Количество билетов`

FROM `билет`

JOIN `рейс` ON `билет`.`№ Рейса` = `рейс`.`№ Рейс`

JOIN `авиакомпания` ON `рейс`.`№ авиакомпании` = `авиакомпания`.`№ Авиакомпании`

WHERE `билет`.`Дата приобретения` BETWEEN '2022-01-05' AND '2022-10-05'

GROUP BY `авиакомпания`.`Название авиакомпании`;

Рисунок 6 - Результат выполнения запроса 4

Запрос 5 выводит забронированные места на пассажира. Запрос 5 представлен в листинге 6. Этот запрос использует оператор JOIN для объединения данных из таблиц "Билет" и "Места" на основе их общих атрибута "№ Места", а затем фильтрует данные с помощью оператора WHERE по заполненным. Результат выполнения запроса представлен на рисунке 7.

Листинг 6 – Запрос 5

SELECT `билет`.`№ Места`, `билет`.`Дата бронирования`, `места`.`Класс`

FROM `билет`

JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`

WHERE `билет`.`Дата бронирования` IS NOT NULL;

Рисунок 7 - Результат выполнения запроса 5

Запрос 6 выводит информацию о рейсах в данный пункт назначения. Запрос 6 представлен в листинге 7. Этот запрос использует таблицу "Рейс". Если вам нужно получить только определенные столбцы или применить фильтрацию, вы можете указать нужные столбцы после ключевого слова SELECT и/или добавить условия с помощью оператора WHERE. В данном запросе используется оператор WHERE для того чтобы указать определенный пункт назначения. Результат выполнения запроса представлен на рисунке 8.

Листинг 7 – Запрос 6

SELECT *

FROM `рейс`

WHERE `Пункт прибытия` = 'Тверь';

Рисунок 8 - Результат выполнения запроса 6

Запрос 7 выводит информацию о свободных местах на данный рейс и дату. Запрос 8 представлен в листинге 8. Этот запрос использует таблицу "Билет". Если вам нужно получить только определенные столбцы или применить фильтрацию, вы можете указать нужные столбцы после ключевого слова SELECT и/или добавить условия с помощью оператора WHERE. В данном запросе используется оператор WHERE для того чтобы указать определенный период и рейс. Результат выполнения запроса представлен на рисунке 9.

Листинг 8 – Запрос 7

SELECT *

FROM `билет`

WHERE `Дата приобретения` BETWEEN '2022-10-05' AND '2022-10-12'

AND `№ Рейса` IN (2, 4, 10);

Рисунок 8 - Результат выполнения запроса 7

Запрос 8 выводит информацию о средней стоимости билетов бизнес класса. Запрос 8 представлен в листинге 9. Этот запрос использует оператор JOIN для объединения данных из таблиц "Билет" и "Места" на основе их общих атрибута "№ Места", затем использует оператор AVG для подсчета среднего значения по атрибуту "Стоимость", вывод происходит через создание новой графы оператором SELECT. Результат выполнения запроса представлен на рисунке 10.

Листинг 9 – Запрос 8

SELECT AVG(`Стоимость`) AS `Средняя стоимость билета бизнес класса`

FROM `билет`

JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`

WHERE `места`.`Класс` = 'бизнес';

Рисунок 9 - Результат выполнения запроса 8

Запрос 9 выводит информацию о том какой экипаж чаще обслуживает рейсы. Запрос 9 представлен в листинге 10. Этот запрос использует оператор JOIN для объединения данных из таблиц "Рейс" и "Экипаж" на основе их общих атрибута "№ Экипажа", затем использует оператор COUNT для подсчета значений по атрибуту "№ Экипажа", далее группирует с помощью оператора GROUP BY по атрибутам "№ Экипажа" и "Название", вывод происходит через создание нового столбца оператором SELECT. Результат выполнения запроса представлен на рисунке 11.

Листинг 10 – Запрос 9

SELECT `экипаж`.`№ Экипажа`, `экипаж`.`Название`, COUNT(`рейс`.`№ Экипажа`) AS `Частота обслуживания`

FROM `рейс`

JOIN `экипаж` ON `рейс`.`№ Экипажа` = `экипаж`.`№ Экипажа`

GROUP BY `экипаж`.`№ Экипажа`, `экипаж`.`Название`

ORDER BY COUNT(`рейс`.`№ Экипажа`) DESC;

Рисунок 10 - Результат выполнения запроса 9

Запрос 10 выводит список с Ф.И.О. пассажиров, номером места, классом и расположением на определенный рейс для удобства сотрудников. Запрос 10 представлен в листинге 11. Этот запрос использует оператор JOIN для объединения данных из таблиц "Билет", "Места" и "Пассажиры" на основе их общих атрибутов "№ Пассажира" и "№ Места", затем использует оператор WHERE фильтрации по определенному рейсу. Результат выполнения запроса представлен на рисунке 12.

Листинг 11 – Запрос 10

SELECT `билет`.`№ Места`, `места`.`Класс`, `места`.`Расположение`, `пассажиры`.`Ф.И.О.`

FROM `билет`

JOIN `места` ON `билет`.`№ Места` = `места`.`№ Места`

JOIN `пассажиры` ON `билет`.`№ Пассажира` = `пассажиры`.`№ Пассажира`

WHERE `билет`.`№ Рейса` = 4;

Рисунок 11 - Результат выполнения запроса 10

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