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

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ВОЗДУШНОГО ТРАНСПОРТА

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ

БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра ВМКСС

ОТЧЁТ

по выполнению лабораторных работ по

дисциплине «Базы данных»

Семестр V

Вариант № 17

Выполнила студентка группы ИС 3-1

Магальник Екатерина Борисовна

(Ф.И.О.)

Преподаватель:

__д.т.н., Профессор Егорова А.А._

(звание, степень, Ф.И.О.)

МОСКВА – 2024

Лабораторная работа №2 проектирование базы данных в субд mysql 5.5

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

Целью лабораторной работы является изучение СУБД MySQL и методов проектирования в ней баз данных.

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

В соответствии со своим вариантом для заданной в первой лабораторной работе предметной области:

  1. создать проект, базу данных и описать таблицы базы данных в СУБД MySQL 5.5 (входящей в состав Денвер 3 или MAMP 5.0 и выше);

В Денвере при помощи phpMyAdmin была создана база данных, в которой будут таблицы с различными данными о пеших туристических походах:

После в базе данных были созданы следующие таблицы:

Таблица chat-user является служебной таблицей-связкой, через которую туристы по их айди связываются с чатом.

Таблица chats нужна для хранения информации о чате: даты и времени создания, названия и инструктора.

Таблица costumers содержит данные о туристах: фамилию, имя, отчество, номер телефона, почту и дату рождения.

Таблица damage-of-equipment содержит информацию о том, какое арендованное оборудование было повреждено и по какой причине.

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

Таблица halts содержит информацию о привалах: название, пропускную способность, местоположение, инфраструктуру и тип (берется из словаря).

Таблица instructors содержит информацию об инструкторах: фамилию, имя, отчество, номер телефона, почту и стаж работы.

Таблица messages содержит информацию о присланных в чат сообщениях: в какой чат сообщение было прислано, в какую дату и время оно было прислано.

Таблица qualification-of-instructor содержит информацию о квалификации инструктора: название документа и дату получения.

Таблица rent содержит информацию об арендованном оборудовании: кто арендовал, что арендовал и сколько он заплатил за аренду.

Таблица review содержит информацию об отзывах на туристические маршруты: кто написал и текст отзыва.

Таблица route-halt является служебной таблицей-связкой, через которую связаны маршруты и привалы, которые есть на этих маршрутах.

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

Таблица teams является служебной таблицей-связкой, через которую видно, какой пользователь в какой поход идет и был ли этот поход оплачен.

Таблица trip содержит информацию о том, когда начинается и заканчивается пеший поход.

Таблица type-of-halt является справочником, в котором хранятся все типа существующих привалов.

  1. наполнить таблицы данными в количестве, необходимом для поверки корректности запросов;

Таблица chat-user:

Таблица chats:

Таблица costumers:

Таблица equipment:

Таблица halts:

Таблица instructors:

Таблица qualification-of-instructor:

Таблица rent:

Таблица route-halt:

Таблица routes:

Таблица teams:

Таблица trip:

Таблица type-of-halt:

  1. сформулировать (на естественном языке) 15-20 запросов к базе данных с учетом бизнес-правил;

  • Удаляем людей младше 18 лет

  • Добавление в таблицу оборудования

  • Добавление в таблицу маршрутов

  • Добавление в таблицу квалификации

  • Ищем маршруты, длительность которых меньше или равна 24 часам

  • Ищем имена и фамилии инструкторов, которые получили дипломы раньше 2022 года

  • Найти имя маршрута, у которых больше одного привала

  • Найти максимальное количество привалов на всех маршрутах

  • Найти минимальное количество привалов на всех маршрутах

  • Средний возраст туристов

  • Вывести название и цену самого дорогого и самого дешевого маршрута

  • Найти людей, которые ходили в поход с Егоровой Аллой Альбертовной и в каком году это было

  • Найти когда, куда и с каким инструктором ходила Егорова Алла Альбертовна

  • Вывести название маршрутов, на который сходило больше 10 человек в июне любого года и длительность которого 72 часа (3 дня)

  • Вывести данные людей, которые ходили на маршрут «The road to the Lavra»

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

  2. реализовать запросы.

  1. Изначальная таблица клиентов:

Удаляем людей младше 18 лет

DELETE FROM costumers WHERE YEAR(date_of_birth) > 2005;

Полученная таблица:

Были удалены последние 3 записи

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

  1. Добавление в таблицу оборудования:

INSERT INTO `equipment` (`equipment_id`, `title`, `amount`) VALUES (NULL, 'Sunglasses', '6'), (NULL, 'First aid kit', '8');

  1. Добавление в таблицу маршрутов:

INSERT INTO `routes` (`route_id`, `title`, `duration_in_hours`, `point_of_departure`, `price`) VALUES (NULL, 'The magical paths of Kirzhach', '72', 'Sanino railway station', '5000'), (NULL, 'Kapeshnaya sotnya (Moscow region)', '72', 'Tugolesye platform', '5850');

  1. Добавление в таблицу квалификации:

INSERT INTO `qualification-of-instructor` (`qualification_id`, `instructor`, `document`, `date_of_receipt`) VALUES ('5', '5', 'Hiking school \"The Merry Way\"', '2023-09-15');

  1. Ищем маршруты, длительность которых меньше или равна 24 часам:

Select * from routes where duration_in_hours <= 24

  1. Ищем имена и фамилии инструкторов, которые получили дипломы раньше 2022 года:

SELECT last_name, first_name

from instructors

join `qualification-of-instructor` on instructors.instructor_id = `qualification-of-instructor`.instructor

where YEAR(date_of_receipt) < 2022;

  1. Найти имя маршрута, у которых больше одного привала:

SELECT title

FROM routes

JOIN `route-halt` ON routes.route_id = `route-halt`.route

GROUP BY title

HAVING COUNT(`route-halt`.halt) > 1;

  1. Найти максимальное количество привалов на всех маршрутах:

SELECT MAX(halt_count) AS max_halts

FROM (

SELECT `route-halt`.route, COUNT(`route-halt`.halt) AS halt_count

FROM `route-halt`

GROUP BY `route-halt`.route

) AS route_halt_counts;

  1. Найти минимальное количество привалов на всех маршрутах:

SELECT MIN(halt_count) AS min_halts

FROM (

SELECT `route-halt`.route, COUNT(`route-halt`.halt) AS halt_count

FROM `route-halt`

GROUP BY `route-halt`.route

) AS route_halt_counts;

  1. Средний возраст туристов:

SELECT ROUND(AVG(YEAR(CURDATE()) - YEAR(date_of_birth) -

(DATE_FORMAT(CURDATE(), '%m%d') < DATE_FORMAT(date_of_birth, '%m%d')))) AS average_age

FROM costumers;

  1. Вывести название и цену самого дорогого и самого дешевого маршрута:

SELECT title, price

FROM routes

WHERE price = (SELECT MAX(price) FROM routes)

OR price = (SELECT MIN(price) FROM routes);

  1. Найти людей, которые ходили в поход с Егоровой Аллой Альбертовной и в каком году это было:

SELECT DISTINCT YEAR(trip.date_of_begining), costumers.last_name, costumers.first_name, costumers.middle_name FROM trip

JOIN teams AS tm1 ON trip.trip_id = tm1.trip

JOIN costumers ON costumers.user_id = tm1.user

WHERE

EXISTS (

SELECT 1

FROM costumers AS c

JOIN teams AS tm3 ON c.user_id = tm3.user

WHERE c.last_name = 'Egorova'

AND c.first_name = 'Alla'

AND c.middle_name = 'Albertovna'

AND c.user_id = tm3.user

)

AND NOT (costumers.last_name = 'Egorova'

AND costumers.first_name = 'Alla'

AND costumers.middle_name = 'Albertovna')

ORDER BY YEAR(trip.date_of_begining);

  1. Найти когда, куда и с каким инструктором ходила Егорова Алла Альбертовна:

SELECT DISTINCT routes.title, trip.date_of_begining, trip.date_of_ending, instructors.last_name, instructors.first_name, instructors.middle_name FROM trip

JOIN teams AS tm1 ON trip.trip_id = tm1.trip

JOIN instructors ON instructors.instructor_id = tm1.instructor

JOIN routes ON routes.route_id = trip.route

WHERE

EXISTS (

SELECT 1

FROM costumers AS c

JOIN teams AS tm3 ON c.user_id = tm3.user

WHERE c.last_name = 'Egorova'

AND c.first_name = 'Alla'

AND c.middle_name = 'Albertovna'

AND c.user_id = tm3.user

);

  1. Вывести название маршрутов, на который сходило больше 10 человек в июне любого года и длительность которого 72 часа (3 дня):

SELECT routes.title FROM routes

JOIN trip AS tp ON routes.route_id = tp.route

JOIN teams AS tm ON tm.trip = tp.trip_id

WHERE routes.duration_in_hours = 72 AND MONTH(tp.date_of_begining)=6

GROUP BY routes.title

HAVING COUNT(tm.user) >= 10;

  1. Вывести данные людей, которые ходили на маршрут «The road to the Lavra»

SELECT

c.last_name,

c.first_name,

c.middle_name,

c.phone_number

FROM

costumers AS c

JOIN

teams AS tm ON c.user_id = tm.user

JOIN

trip AS tp ON tm.trip = tp.trip_id

JOIN

routes AS r ON tp.route = r.route_id

WHERE

r.title = "The road to the Lavra";

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