Построение SADT-модели начинается с представления всей системы в виде простейшей компоненты - одного блока и дуг, изображающих интерфейсы с функциями вне системы. Поскольку единственный блок представляет всю систему как единое целое, имя, указанное в блоке, является общим. Это верно и для интерфейсных дуг - они также представляют полный набор внешних интерфейсов системы в целом.
Затем блок, который представляет систему в качестве единого модуля, детализируется на другой диаграмме с помощью нескольких блоков, соединенных интерфейсными дугами. Эти блоки представляют основные подфункции исходной функции. Данная декомпозиция выявляет полный набор подфункций, каждая из которых представлена как блок, границы которого определены интерфейсными дугами. Каждая из этих подфункций может быть декомпозирована подобным образом для более детального представления.
Во всех случаях каждая подфункция может содержать только те элементы, которые входят в исходную функцию. Кроме того, модель не может опустить какие-либо элементы, т.е., как уже отмечалось, родительский блок и его интерфейсы обеспечивают контекст. К нему нельзя ничего добавить, и из него не может быть ничего удалено.
Дуги, входящие в блок и выходящие из него на диаграмме верхнего уровня, являются точно теми же самыми, что и дуги, входящие в диаграмму нижнего уровня и выходящие из нее, потому что блок и диаграмма представляют одну и ту же часть системы.
Каждый блок на диаграмме имеет свой номер. Блок любой диаграммы может быть далее описан диаграммой нижнего уровня, которая, в свою очередь, может быть далее детализирована с помощью необходимого числа диаграмм. Таким образом, формируется иерархия диаграмм.
Для того, чтобы указать положение любой диаграммы или блока в иерархии, используются номера диаграмм. Например, А21 является диаграммой, которая детализирует блок 1 на диаграмме А2. Аналогично, А2 детализирует блок 2 на диаграмме А0, которая является самой верхней диаграммой модели. На рисунке показано типичное дерево диаграмм.
Главным овеществленным понятием, которое нас будет интересовать в путешествиях по воздуху, выступает в данном примере авиабилет, подтверждающий перелет из, ну скажем, Атлантии – столицы архипелага Атлантис - в Париж. Если посмотреть внимательно, можно заметить, что авиабилет состоит из купонов (отрывных талонов),каждый из которых соответствует перелету между двумя аэропортами.
Билет состоит из двух купонов - один для перелета из Атлантии в Лодон, другой для перелета из Лондона в Париж. Третий лист содержит описание всего маршрута путешествия.
Начнем рассмотрение информационной области с выполняющего полет самолета.
Каждый самолет, как правило, за день выполняет несколько рейсов, однозначно определяемых датой и временем вылета, номером рейса и аэропортом отправления. Из номера рейса можно почерпнуть два указания:
на авиакомпанию, обслуживающую полет (так "AIF" соответствует авиакомпании "Atlantis Island Flights")
на маршрут, по которому выполняется полет.
Отсюда нас будет интересовать, какими самолетами выполняются полеты, сколько продано билетов, какие рейсы получили подтверждение и какие места выделены для пассажиров.
Ядром такой системы выступает купон. Он означает примерно тоже, что и наименьший общий делитель в математике, и ему присущи такие информационные характеристики, как класс и статус. Купон может существовать только при наличии (в контексте) авиабилета, от которого он наследует дату выписки и стоимость.
Каждый из блоков заключает в себе сущность,а линия, соединяющая между собой блоки, соответствует связи между сущностями. Разветвляющееся окончание такой линии у левого блока и одинарное окончание у правого говорят о том, что у одного билета может быть много купонов; мы имеем дело со связью типа "многиек одному". Непрерывная линия говорит о том, что связь обязательная. Связь может читаться слева направо:
Каждый КУПОН должен входить в один и только один БИЛЕТ
и справа налево:
Каждый БИЛЕТ должен состоять из одного или более КУПОНОВ.
Следует отметить, что выражение "должен" свидетельствует обобязательном характере связи.
Теперь мы можем взглянуть на тот же купон, но уже по отношению к рейсу. Прочитаем связь между ними слева направо:
Каждый КУПОН должен оформляться для одного и только одного РЕЙСА
и в обратном направлении:
Каждый РЕЙС может быть основанием для оформления одного и более КУПОНОВ.
Заметьте, что рейс может и не быть основанием для оформления купонов вообще! (Это видно из прерывистого характера соединяющей эти сущности линии, свидетельствующего о необязательности существующей между ними связи.) Причиной такого положения может быть,например, то,что рейс только что включен в расписание, или то, что купоны просто не поступали в продажу. В любом случае, связь между этими сущностями дает нам некоторую полезную информацию.
Теперь мы получили строгую связь между билетом и рейсом - через купон. Связь эта относится к типу "многие ко многим", что видно из следующего:
Каждый БИЛЕТ должен состоять из одного или более КУПОНОВ,каждый из которых оформляется на свой РЕЙС, и наоборот, каждый РЕЙС может быть основанием для оформления одного и более КУПОНОВ, каждый из которых должен входить в свой БИЛЕТ.
Другая полезная информация приводится внутри самих блоков,в виде атрибутов. Эти атрибуты как бы дополняют описание сущностей и интерпретируются следующим образом: Каждый БИЛЕТ имеет дату выписки и стоимость.
Напоминание: Cвязь, изображаемая сплошной линией, читается как "должен" (обязательная связь), а пунктирной - как "может" (необязательная связь).
Модель содержит уже достаточно информации для того, чтобы стать моделью авиабилета. Обратите внимание на то, что мы уже изобразили в виде блоков все объекты, упомянутые на билете. Нами добавлены блоки, соответствующие сущностям ПАССАЖИР, АЭРОПОРТ, АВИАЛИНИЯ и, пожалуй, наиболее сложной для понимания сущности АВИАМАРШРУТ.
Авиамаршрут однозначно идентифицируется номером рейса и курирующей его авиалинией. На билете ему соответствует составной код AIF213 или AIF217.
У нас появилась возможность прочитать всю схему относительно сущности АВИАЛИНИЯ:
Каждая АВИАЛИНИЯ может курировать один и более АВИАМАРШРУТОВ, каждый из которых может планироваться как один и более РЕЙСОВ, описываемых датой и временем вылета. В соответствии со схемой, каждый рейс должен выполняться по АВИАМАРШРУТУ (заранее определенному) и должен следовать из одного АЭРОПОРТА в другой.
На приведенное утверждение можно посмотреть с двух разных углов.
Угол 1: Какие рейсы выполняются из аэропорта Атлантии любой из авиалиний ?
Эта информация обычно в первую очередь интересует вылетающих пассажиров.
Другими словами, современные авиалинии должны иметь систему (автоматическую или неавтоматическую) для регистрации, выдачи и контроля информации, представленной на схеме.
Механизм создания схемы
-----------------------
В каждом случае, когда информация на билете или купоне ссылается на нечто из реального мира, мы создаем сущность, соответствующую этому нечто, оформляем ее в виде блока, записываем в нем заглавными буквами название, а строчными - атрибуты. Так, например, сущность АВИАЛИНИЯ имеет атрибут "код". При обнаружении связи между двумя сущностями мы соединяем их линией и делаем надписи, характеризующие степень участия сущности в этой связи.
В реальном мире для обозначения связей часто используются коды и названия. Так, например, на изображении купона к билету код AIF указан в столбце, озаглавленном "Трансагентство", для обозначения связи с авиалинией "Atlantis IslandFlights". На нашей схеме, однако, эта косвенная связь показана линиями, соединяющими сущности КУПОН, РЕЙС, АВИАМАРШРУТ и АВИАЛИНИЯ, а "AIF" - только значение атрибута "код" сущности АВИАЛИНИЯ.
Однако, на схеме еще пока отсутствует информация о самолете, подтверждении полета и выделении мест. Схема с этой информацией
представлена на Рисунке 2-8.
Рассмотрим же информацию под тем углом, как она соотносится с сущнстью САМОЛЕТ.
Каждый САМОЛЕТ может назначаться на один и более РЕЙСОВ с датой и временем вылета и
Каждый РЕЙС должен выполняться по стандартному АВИАМАРШРУТУ из одного АЭРОПОРТА в другой.
(В модели допускаются даже авиамаршруты, где аэропорт отправления совпадает с аэропортом назначения ! Это может пригодиться для тех пассажиров, кто получает удовольствие просто от двухчасового пребывания на борту Конкорда.)
При выделении мест каждый пассажир должен быть обеспечен местом на борту самолета. Эта задача решается с помощью посадочного талона, выписываемого на основании купона и могущего рассматриваться в качестве его синонима или второго наименования.
Каждый САМОЛЕТ может иметь одно и более МЕСТ, каждое из которых может выделяться на основании одного и более КУПОНОВ (или ПОСАДОЧНЫХ ТАЛОНОВ) на РЕЙС с определенной датой и временем вылета.
Обратите внимание на то, что мы связали билет с пассажиром и разрешили пассажиру иметь более одного билета одновременно.
Каждый билет должен предназначаться для одного и только одного ПАССАЖИРА, который, в свою очередь, может быть указан на одном и более БИЛЕТАХ.
Сущность ПАССАЖИР может пригодиться нам в дальнейшем, если мы захотим помочь авиалинии индивидуализировать свои услуги, т.е. учитывать предпочтения пассажира на занятие тех или иных мест.
В надежной системе необходимо обеспечить уникальность выписываемых посадочных талонов для каждого рейса, хотя до закрепления мест за пассажирами некоторое превышение количества продаваемых билетов считается нормой.
На основании посадочных талонов мы можем получить список пассажиров, принятых на борт самолета, что может пригодиться в каких-нибудь чрезвычайных обстоятельствах.
за несколько минут до вылета пассажир еще не попал на борт. Можно представить в графическом виде, как эта информация будет отображаться в реальной системе.
На рисунке представлен вариант экранной формы для настольной системы распределения мест на самолет. Она представляет собой как бы внутренний план самолета в графической форме – иллюстрацию взаимосвязи между местом и самолетом типа "многие к одному". Для отнесения места к типу "для курящих" или "для некурящих" используется штриховка; на нашей модели взаимосвязей между сущностями ей соответствует атрибут "признак разрешения курения" сущности МЕСТО. В нашем случае место D4 выбрано с помощью манипулятора "мышь"; в появившемся окне разрешен ввод или подтверждение сведений о пассажире. После заполнения полей окна можно нажатием клавиши "OK" закончить работу с ним.
Реализация в базе данных (Реляционная база данных)
Рассмотрим, как модель для сущностей КУПОН,МЕСТО и САМОЛЕТ может быть организована с помощью различных баз данных.
В реляционной БД каждая сущность становится таблицей, а ее атрибуты - столбцами в таблице.
Столбцы с отметкой "**" используются для реализации связей между таблицами. Так, например, регистрационный номер самолета, включенный в таблицу SEAT, реализует связь между сущностями МЕСТО и САМОЛЕТ. Такой столбец именуют внешним ключом.
Выражение "not null" соответствует либо обязательной связи (которая на модели обозначается сплошной линией), либо обязательному атрибуту. Выражение "null" используется для обозначения либо необязательной связи (пунктирная линия), либо необязательного атрибута - "null" означает "значение может отсутствовать".