1.4 Описание предметной области и учебной базы данных
Чтобы показать все основные возможности языка SQL, нам потребуется база данных.
Эта база данных не должна быть слишком сложной, чтобы ее изучение не потребова-
ло слишком много времени. Но, вместе с тем, она должна быть достаточно разнооб-
разной, чтобы запросы к ней выглядели бы правдоподобными, почти такими же, как
и в реальной работе.
В качестве предметной области выберем пассажирские авиаперевозки. Ее ориги-
нальное описание и описание базы данных «Авиаперевозки» можно найти по ад-
ресам
https://postgrespro.ru/education/demodb
и
https://postgrespro.
ru/docs/postgrespro/current/demodb-bookings.html
. Надеемся, что эта об-
ласть знакома многим читателям нашего учебного пособия. Конечно, в учебных це-
лях реальная ситуация намеренно упрощена, но все принципиальные вещи сохране-
ны.
Итак, некая российская авиакомпания выполняет пассажирские авиаперевозки. Она
обладает своим парком самолетов различных моделей. Каждая модель самолета име-
ет определенный код, который присваивает Международная ассоциация авиапере-
возчиков (IATA). При этом будем считать, что самолеты одной модели имеют оди-
наковые компоновки салонов, т. е. порядок размещения кресел и нумерацию мест
в салонах бизнес-класса и экономического класса. Например, если это модель Sukhoi
SuperJet-100, то место 2A относится к бизнес-классу, а место 20D — к экономическому
классу. Бизнес-класс и экономический класс — это разновидности так называемого
класса обслуживания.
Наша авиакомпания выполняет полеты между аэропортами России. Каждому аэро-
порту присвоен уникальный трехбуквенный код, при этом используются только за-
главные буквы латинского алфавита. Эти коды присваивает не сама авиакомпания,
а специальные организации, управляющие пассажирскими авиаперевозками. Зача-
стую название аэропорта не совпадает с названием того города, которому этот аэро-
порт принадлежит. Например, в городе Новосибирске аэропорт называется Толмаче-
во, в городе Екатеринбурге — Кольцово, а в Санкт-Петербурге — Пулково. К тому же
некоторые города имеют более одного аэропорта. Сразу в качестве примера вспоми-
нается Москва с ее аэропортами Домодедово, Шереметьево и Внуково. Добавим еще
одну важную деталь: каждый аэропорт характеризуется географическими координа-
тами — долготой и широтой, а также часовым поясом.
Формируются маршруты перелетов между городами. Конечно, каждый такой марш-
рут требует указания не только города, но и аэропорта, поскольку, как мы уже сказа-
ли, в городе может быть и более одного аэропорта. В качестве упрощения реальности
мы решим, что маршруты не будут иметь промежуточных посадок, т. е. у них будет
только аэропорт отправления и аэропорт назначения. Каждый маршрут имеет ше-
стизначный номер, включающий цифры и буквы латинского алфавита.
На основе перечня маршрутов формируется расписание полетов (или рейсов). В рас-
писании указывается плановое время отправления и плановое время прибытия, а
также тип самолета, выполняющего этот рейс.
При фактическом выполнении рейса возникает необходимость в учете дополнитель-
ных сведений, а именно: фактического времени отправления и фактического време-
ни прибытия, а также статуса рейса. Статус рейса может принимать ряд значений:
14
– Scheduled (за месяц открывается возможность бронирования);
– On Time (за сутки открывается регистрация);
– Delayed (рейс задержан);
– Departed (вылетел);
– Arrived (прибыл);
– Cancelled (отменен).
Теперь обратимся к пассажирам. Полет начинается с бронирования авиабилета. В на-
стоящее время общепринятой практикой является оформление электронных биле-
тов. Каждый такой билет имеет уникальный номер, состоящий из 13 цифр. В рамках
одной процедуры бронирования может быть оформлено несколько билетов, но каж-
дая такая процедура имеет уникальный шестизначный номер (шифр) бронирования,
состоящий из заглавных букв латинского алфавита и цифр. Кроме того, для каждой
процедуры бронирования записывается дата бронирования и рассчитывается общая
стоимость оформленных билетов.
В каждый билет, кроме его тринадцатизначного номера, записывается идентифика-
тор пассажира, а также его имя и фамилия (в латинской транскрипции) и контактные
данные. В качестве идентификатора пассажира используется номер документа, удо-
стоверяющего личность. Конечно, пассажир может сменить свой документ, а иной
раз даже фамилию и имя, за время, прошедшее между бронированием билетов в раз-
ные дни, поэтому невозможно наверняка сказать, что какие-то конкретные билеты
были оформлены на одного и того же пассажира.
В каждый электронный билет может быть вписано более одного перелета. Специа-
листы называют эти записи о перелетах сегментами. В качестве примера наличия
нескольких сегментов можно привести такой: Красноярск — Москва, Москва — Ана-
па, Анапа — Москва, Москва — Красноярск. При этом возможно в рамках одного бро-
нирования оформить несколько билетов на различных пассажиров. Для каждого пе-
релета указывается номер рейса, аэропорты отправления и назначения, время вы-
лета и время прибытия, а также стоимость перелета. Кроме того, указывается и так
называемый класс обслуживания: экономический, бизнес и др.
Когда пассажир прибывает в аэропорт отправления и проходит регистрацию билета,
оформляется так называемый посадочный талон. Этот талон связан с авиабилетом: в
талоне указывается такой же номер, который имеет электронный авиабилет данного
пассажира. Кроме того, в талоне указывается номер рейса и номер места в самолете.
Указывается также и номер посадочного талона — последовательный номер, присва-
иваемый в процессе регистрации билетов на данный рейс.
Напомним, что каждому креслу в салоне самолета соответствует конкретный класс
обслуживания. Данная информация учитывается при регистрации билетов и оформ-
лении посадочных талонов. Если, например, пассажир приобрел билет с экономиче-
ским классом обслуживания, то в его посадочном талоне будет указан номер места в
салоне экономического класса, но не в салоне бизнес-класса.
Следуя приведенному описанию предметной области, можно спроектировать мо-
дельную базу данных, предназначенную для изучения языка SQL. Поскольку наше
учебное пособие в первую очередь предназначено для изучения языка SQL, а не для
овладения искусством проектирования баз данных, то мы приведем лишь диаграмму
15
|