В базе данных Airline
информация о рейсах самолётов задана в виде таблиц
Flights(
FlightId integer,
FlightTime timestamp,
PlaneId integer,
-- Дополнительные столбцы, при необходимости
)
Seats(
PlaneId integer,
SeatNo varchar(4), -- 123A
-- Дополнительные столбцы, при необходимости
)
Реализуйте запросы к базе данных Airline
с применением представлений, хранимых процедур и функций. При необходимости, вы можете создать дополнительные таблицы, представления и хранимые процедуры.
FreeSeats(FlightId)
— список мест, доступных для продажи и для бронирования.Reserve(UserId, Pass, FlightId, SeatNo)
— пытается забронировать место на трое суток начиная с момента бронирования. Возвращает истину, если удалось и ложь — в противном случае.ExtendReservation(UserId, Pass, FlightId, SeatNo)
— пытается продлить бронь места на трое суток начиная с момента продления. Возвращает истину, если удалось и ложь — в противном случае.BuyFree(FlightId, SeatNo)
— пытается купить свободное место. Возвращает истину, если удалось и ложь — в противном случае.BuyReserved(UserId, Pass, FlightId, SeatNo)
— пытается выкупить забронированное место (пользователи должны совпадать). Возвращает истину, если удалось и ложь — в противном случае.FlightsStatistics(UserId, Pass)
— статистика по рейсам: возможность бронирования и покупки, число свободных, забронированных и проданных мест.FlightStat(UserId, Pass, FlightId)
— статистика по рейсу: возможность бронирования и покупки, число свободных, забронированных и проданных мест.CompressSeats(FlightId)
— оптимизирует занятость мест в самолете. В результате оптимизации, в начале самолета должны быть купленные места, затем — забронированные, а в конце — свободные. Примечание: клиенты, которые уже выкупили билеты также должны быть пересажены.