M.3. Описание схемы

Основной сущностью является бронирование (bookings).

В одно бронирование можно включить несколько пассажиров, каждому из которых выписывается отдельный билет (tickets) для перелёта в одну сторону и отдельный обратный билет, если билеты приобретаются «туда-обратно». Билет имеет уникальный номер и содержит информацию о пассажире. Для пассажира не предусмотрено отдельной сущности, однако номер документа является уникальным идентификатором пассажира.

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

Каждый маршрут (routes) проложен от одного аэропорта (airports) к другому. Рейсы (flights) с одинаковым номером маршрута имеют одинаковые точки отправления и назначения, но отличаются датой отправления. Маршрутная сеть обновляется ежемесячно, таким образом рейсы и маршруты связаны темпоральным внешним ключом. При выполнении соединений учитывайте не только номер маршрута, но и дату отправления — она должна находиться в рамках периода действия маршрута. Для упрощения запросов используйте представление timetable, где такое соединение скрыто.

Все перелёты считаются стыковочными: при регистрации на первый рейс пассажиру выдаются посадочные талоны (boarding_passes) на все рейсы в билете, в котором указано место в самолёте и время посадки. Пассажир может зарегистрироваться только на тот рейс, который есть у него в билете. Комбинация рейса и места в самолёте уникальна, чтобы не допустить выдачу двух посадочных талонов на одно место.

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