Моделирование взаимосвязей между сущностями

Пример, связанный с билетами на самолет


Главным овеществленным понятием, которое нас будет интересовать в путешествиях по воздуху, выступает в данном примере авиабилет, подтверждающий перелет из, ну скажем, Атлантии - столицы архипелага Атлантис - в Париж. Если посмотреть внимательно, можно заметить, что авиабилет состоит из купонов (отрывных талонов), каждый из которых соответствует перелету между двумя аэропортами. Выглядеть такой билет будет следующим образом:

Рисунок 2-1. Авиабилет

Билет состоит из двух купонов - один для перелета из Атлантии в Лондон, другой для перелета из Лондона в Париж. Третий лист содержит описание всего маршрута путешествия.

Рисунок 2-2. Купон к авиабилету

Начнем рассмотрение информационной области с выполняющего полет самолета.

Каждый самолет, как правило, за день выполняет несколько рейсов, однозначно определяемых датой и временем вылета, номером рейса и аэропортом отправления. Из номера рейса можно почерпнуть два указания: на авиакомпанию, обслуживающую полет (так "AIF" соответствует авиакомпании "Atlantis Island Flights"), и на маршрут, по которому выполняется полет. Отсюда нас будет интересовать, какими самолетами выполняются полеты, сколько продано билетов, какие рейсы получили подтверждение и какие места выделены для пассажиров.

Рисунок 2-3. Модель взаимосвязей для сущности "Билет"

Ядром такой системы выступает купон. Он означает примерно то же, что и наименьший общий делитель в математике, и ему присущи такие информационные характеристики, как класс и статус. Купон может существовать только при наличии (в контексте) авиабилета, от которого он наследует дату выписки и стоимость.

Каждый из блоков на Рисунке 2-3 заключает в себе сущность, а линия, соединяющая между собой блоки, соответствует связи между сущностями. Разветвляющееся окончание такой линии у левого блока и одинарное окончание у правого говорят о том, что у одного билета может быть много купонов; мы имеем дело со связью типа "многие к одному". Непрерывная линия говорит о том, что связь обязательная.



Связь может читаться слева направо:
Каждый КУПОН должен входить в один и только один БИЛЕТ и справа налево:
Каждый БИЛЕТ должен состоять из одного или более КУПОНОВ. Следует отметить, что выражение "должен" свидетельствует об обязательном характере связи.
А что можно сказать о рейсе ?
Рисунок 2-4. Связь между сущностями БИЛЕТ и РЕЙС

Теперь мы можем взглянуть на тот же купон, но уже по отношению к рейсу. Прочитаем связь между ними слева направо:
Каждый КУПОН должен оформляться для одного и только одного РЕЙСА и в обратном направлении:
Каждый РЕЙС может быть основанием для оформления одного и более КУПОНОВ.
Заметьте, что рейс может и не быть основанием для оформления купонов вообще! (Это видно из прерывистого характера соединяющей эти сущности линии, свидетельствующего о необязательности существующей между ними связи.) Причиной такого положения может быть, например, то, что рейс только что включен в расписание, или то, что купоны просто не поступали в продажу. В любом случае, связь между этими сущностями дает нам некоторую полезную информацию.
Теперь мы получили строгую связь между билетом и рейсом - через купон. Связь эта относится к типу "многие ко многим", что видно из следующего:
Каждый БИЛЕТ должен состоять из одного или более КУПОНОВ, каждый из которых оформляется на свой РЕЙС, и наоборот, каждый РЕЙС может быть основанием для оформления одного и более КУПОНОВ, каждый из которых должен входить в свой БИЛЕТ.
Другая полезная информация приводится внутри самих блоков, в виде т.н. атрибутов. Эти атрибуты как бы дополняют описание сущностей и интерпретируются следующим образом:
Каждый БИЛЕТ имеет дату выписки и стоимость.
Краткое резюме
Прежде чем продолжать, попробуем обобщить все, что мы уже узнали к этому моменту об изучаемом методе. Сущность изображается в виде блока, внутри которого заглавными буквами записывается имя сущности, а строчными - ее атрибуты. Две сущности могут быть связаны между собой, и мы наблюдали две подобные связи, имеющие тип "многие к одному" и графическое изображение:



Эти связи можно "читать", используя специальный синтаксис. Полезно напомнить, что связь, изображаемая сплошной линией, читается как "должен" (обязательная связь), а пунктирной - как "может" (необязательная связь). В деталях этот синтаксис будет рассмотрен в следующей главе.
Перейдем к расширению нашей модели.
Рисунок 2-5.

Модель, изображенная на рисунке 2-5, содержит уже достаточно информации для того, чтобы стать моделью авиабилета. Обратите внимание на то, что мы уже изобразили в виде блоков все объекты, упомянутые на билете. Нами добавлены блоки, соответствующие сущностям ПАССАЖИР, АЭРОПОРТ, АВИАЛИНИЯ и, пожалуй, наиболее сложной для понимания сущности АВИАМАРШРУТ.
Авиамаршрут однозначно идентифицируется номером рейса и курирующей его авиалинией. На билете ему соответствует составной код AIF213 или AIF217.
У нас появилась возможность прочитать всю схему относительно сущности АВИАЛИНИЯ:
Каждая АВИАЛИНИЯ может курировать один и более АВИАМАРШРУТОВ, каждый из которых может планироваться как один и более РЕЙСОВ, описываемых датой и временем вылета. В соответствии со схемой, каждый рейс должен выполняться по АВИАМАРШРУТУ (заранее определенному) и должен следовать из одного АЭРОПОРТА в другой.
Это общеупотребимый и обязательный набор правил. На приведенное утверждение можно посмотреть с двух разных углов.
Угол 1: Какие рейсы выполняются из аэропорта Атлантии любой из авиалиний? Эта информация обычно в первую очередь интересует вылетающих пассажиров.
Рисунок 2-6 . Отправление рейсов по аэропортам

Отправление
Аэропорт: Атлантия
Авиалиния
Номер рейса
Отправление
Место назначения
дата
время
BA
AIF
AIF
BA
TW
962
213
004
964
51
3 Янв 89
3 Янв 89
3 Янв 89
3 Янв 89
3 Янв 89
07:30
08:00
08:15
09:00
09:15
Лондон
Лондон
Нью-Йорк
Манчестер
Чикаго

Угол 2: Какие рейсы, отправляющиеся из Атлантии, выполняются авиалинией "Atlantis Island Flights"?
Эта информация используется компанией AIF для слежения за своими рейсами.


Рисунок 2-7. Отправление рейсов по авиалиниям

Отправление
Авиалиния: Atlantia Island Flights (AIF)
Аэропорт: Атлантия
Номер рейса
Место назначения
Отправление
дата
время
213
004
009
Лондон LHR
Нью-Йорк JFK
Южный Остров AASI
3 Янв 89
3 Янв 89
3 Янв 89
08:00
08:15
09:20

Другими словами, современные авиалинии должны иметь систему (автоматическую или неавтоматическую) для регистрации, выдачи и контроля информации, представленной на схеме.
Механизм создания схемы
В каждом случае, когда информация на билете или купоне ссылается на нечто из реального мира, мы создаем сущность, соответствующую этому нечто, оформляем ее в виде блока, записываем в нем заглавными буквами название, а строчными - атрибуты. Так, например, сущность АВИАЛИНИЯ имеет атрибут "код". При обнаружении связи между двумя сущностями мы соединяем их линией и делаем надписи, характеризующие степень участия сущности в этой связи.
В реальном мире для обозначения связей часто используются коды и названия. Так, например, на изображении купона к билету (Рисунок 2-2) код AIF указан в столбце, озаглавленном "Трансагентство", для обозначения связи с авиалинией "Atlantis Island Flights". На нашей схеме, однако, эта косвенная связь показана линиями, соединяющими сущности КУПОН, РЕЙС, АВИАМАРШРУТ и АВИАЛИНИЯ, а "AIF" - только значение атрибута "код" сущности АВИАЛИНИЯ.
Однако, на схеме еще пока отсутствует информация о самолете, подтверждении полета и выделении мест. Схема с этой информацией представлена на Рисунке 2-8.
Рассмотрим же информацию под тем углом, как она соотносится с сущностью САМОЛЕТ.
Каждый САМОЛЕТ может назначаться на один и более РЕЙСОВ с датой и временем вылета и
Каждый РЕЙС должен выполняться по стандартному АВИАМАРШРУТУ из одного АЭРОПОРТА в другой.
(В модели допускаются даже авиамаршруты, где аэропорт отправления совпадает с аэропортом назначения ! Это может пригодиться для тех пассажиров, кто получает удовольствие просто от двухчасового пребывания на борту Конкорда.)


При выделении мест каждый пассажир должен быть обеспечен местом на борту самолета. Эта задача решается с помощью посадочного талона, выписываемого на основании купона и могущего рассматриваться в качестве его синонима или второго наименования.
Каждый САМОЛЕТ может иметь одно и более МЕСТ, каждое из которых может выделяться на основании одного и более КУПОНОВ (или ПОСАДОЧНЫХ ТАЛОНОВ) на РЕЙС с определенной датой и временем вылета.
Обратите внимание на то, что мы связали билет с пассажиром и разрешили пассажиру иметь более одного билета одновременно.
Каждый билет должен предназначаться для одного и только одного ПАССАЖИРА, который, в свою очередь, может быть указан на одном и более БИЛЕТАХ.
Сущность ПАССАЖИР может пригодиться нам в дальнейшем, если мы захотим помочь авиалинии индивидуализировать свои услуги, т.е. учитывать предпочтения пассажира на занятие тех или иных мест.
В надежной системе необходимо обеспечить уникальность выписываемых посадочных талонов для каждого рейса, хотя до закрепления мест за пассажирами некоторое превышение количества продаваемых билетов считается нормой.
На основании посадочных талонов мы можем получить список пассажиров, принятых на борт самолета, что может пригодиться в каких -нибудь чрезвычайных обстоятельствах, а также в том случае, если за несколько минут до вылета пассажир еще не попал на борт. Можно представить в графическом виде, как эта информация будет отображаться в реальной системе.
Рисунок 2-8. Расширенная модель

Рисунок 2-9. Схема выделения мест

На рисунке представлен вариант экранной формы для настольной системы распределения мест на самолет. Она представляет собой как бы внутренний план самолета в графической форме - иллюстрацию взаимосвязи между местом и самолетом типа "многие к одному". Для отнесения места к типу "для курящих" или "для некурящих" используется штриховка; на нашей модели взаимосвязей между сущностями ей соответствует атрибут "признак разрешения курения" сущности МЕСТО.В нашем случае место D4 выбрано с помощью манипулятора "мышь"; в появившемся окне разрешен ввод или подтверждение сведений о пассажире. После заполнения полей окна можно нажатием клавиши "OK" закончить работу с ним.

Содержание раздела