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

       

Модель для билета с открытой датой вылета


Если вы посмотрите на билет с открытой датой вылета, вы заметите, что отсутствие даты является единственным его отличием от обычного билета. В нем точно так же указывается пассажир и номер рейса. Таким образом, у нас есть билеты, которые связаны с конкретным рейсом (на конкретную дату) или имеют открытую дату на конкретный маршрут. Запомните, что открытым является купон, а не билет, мы несколько нарушили терминологию.

Рисунок 6-3. Использование исключающей дуги для ситуации "либо-либо"

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

Каждый КУПОН должен либо оформляться на один и только один РЕЙС, либо быть открытым для одного и только одного АВИАМАРШРУТА.

Использование подтипов

Рейсы можно разделить на два различных типа:

Рисунок 6-4. Подтипы сущности

Вложенные блоки обозначают подтипы, которые должны взаимно исключать друг друга. Они могут иметь свои собственные атрибуты и связи, но в то же время автоматически наследуют и атрибуты и связи, присущие супертипу - блоку, в который они вложены.

В нашем примере мы будем предполагать и впоследствии согласуем это с пользователем, что рейсы вне расписания выполняются между двумя аэропортами и нас будут интересовать только исходный пункт и место назначения. Регулярные рейсы, в свою очередь, осуществляются по стандартному авиамаршруту с известными пунктами отправления и назначения. Таким образом, мы получили следующую структуру:

Рисунок 6-5. Дополнительные связи между подтипами и другими сущностями



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

Специальные билеты

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


БИЛЕТ

  • дата выписки


  • полная стоимость


  • скидка


  • денежная единица


  • принадлежность пассажира к штату


  • Обратите внимание на то, что мы включили в состав атрибутов как полную стоимость, так и размер скидки, на основании которых мы сможем легко вычислить сумму, фактически уплаченную за билет. Мы получаем возможность анализировать уровни скидок, предоставляемых различными организациями, и коррелировать их с реальным доходом. Впоследствии мы можем заменить или добавить некоторые атрибуты, позволяющие руководству проводить анализ расходования своей прибыли.

    Однако, как же мы можем установить принадлежность пассажира к экипажу и рабочую нагрузку члена экипажа?

    Нам придется отказаться от понятия "пассажиры". То есть от соответствующей сущности на нашей схеме. Вместо этого уясним себе, что члены экипажа, агенты, командиры, стюардессы и т.п. - все это разные роли или занятия личности, и что личность выступает пассажиром (или потенциальным пассажиром) только в связи с оформлением билета или посадочного талона. Таким образом, понятие "пассажир" исчезает и заменяется на множество связей с сущностью ЛИЧНОСТЬ, как показано на следующей схеме:

    Рисунок 6-6. Связи сущности ЛИЧНОСТЬ



    Обратите внимание на то, что купон, оформление мест и посадочный талон не связаны друг с другом непосредственно, но все имеют связи как с личностью, так и с рейсом. Располагая этой информацией, можно легко найти на каждом конкретном рейсе людей, которые:

  • имеют купоны, но не имеют посадочного талона;


  • прошли оформление места, но не имеют купонов, а также


  • выбрать допустимый уровень заполнения мест.


  • Такой метод контроля модели широко используется и отражается на схеме с помощью ряда идентичных параллельных связей.

    Информация о назначении личности в экипаж на конкретные рейсы и ее накопление за период времени дает нам возможность идентифицировать каждую личность по участию в рейсах не только в качестве пассажира, но и в качестве члена экипажа. Мы можем также проанализировать распределение обязанностей внутри экипажей, и если нас интересует стандартный экипаж, соответствующий минимальным стандартам, принятым для самолета или маршрута, нам понадобятся следующие дополнительные компоненты:



    Рисунок 6-7. Стандартные экипажи



    Для того, чтобы составлять экипажи на самолет, нам необходимо знать численность экипажей и распределение обязанностей (ролей) внутри них.

    Прежде чем определить состав стандартного экипажа, нам нужно узнать тип самолета и маршрут. При этом возникает одна из следующих двух ситуаций:

    1. Для определения состава экипажа мы можем использовать тип самолета.

    Каждый ТИП САМОЛЕТА может определять одну и более ДОЛЖНОСТЕЙ В СТАНДАРТНОМ ЭКИПАЖЕ, каждая из которых выполняет определенную РОЛЬ В ЭКИПАЖЕ: например, пять членов экипажа выполняют роль стюарда (стюардессы).

    2. Если авиамаршрут предъявляет к членам экипажа особые требования, например при большой продолжительности полета, его следует учитывать наряду с типом самолета.

    Реализация этих связей нами уже рассматривалась ранее при разборе состава экипажа.

    На следующей схеме вновь появляется сущность НАЗНАЧЕНИЕ В ЭКИПАЖ, благодаря чему схема превращается в модель, отражающую все данные по составлению экипажа.

    Рисунок 6-8




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