Б3 Методология инфологического проектирования IDEF1X
Методология IDEF1X была разработана для ВВС США и теперь используется, в частности, в правительственных, аэрокосмических и финансовых учреждениях, а также в большом числе частных компаний.
В декабре 1993 года Лаборатория Компьютерных Систем НациональногоИнститута Стандартов определила IDEF1X как стандарт Моделирования Данных.
Методология IDEF1X определяет стандарты терминологии, используемой при информационном моделировании, и графического изображения типовых элементов на диаграммах.
Основные элементы IDEF1X-диаграммы
IDEF1X-диаграмма строится из трех основных блоков - сущностей, атрибутов и связей. Если рассматривать диаграмму как графическое представление правил предметной области, то сущности являются существительными, а связи - глаголами.
Сущность - это, например, человек, место, вещь, событие, концепция, о которых хранится информация. Сущности именуются обычно существительными, такими как "покупатель", "компьютер", "служащий", "продажа".
Более точно, сущность – это множество индивидуальных объектов-экземпляров, причем все эти объекты являются различными.
Связь – это функциональная зависимость между сущностями. Например, СЛУЖАЩИЙ совершает ПРОДАЖИ.
Каждая сущность обладает атрибутами. Атрибут – это свойство объекта, характеризующее его экземпляр. Сущность СЛУЖАЩИЙ может иметь атрибуты Имя, Дата рождения и т.д.
Построение инфологической модели
Процесс построения инфологической модели состоит из следующих шагов:
- определение сущностей;
- определение зависимостей между сущностями;
- задание первичных и альтернативных ключей;
- определение атрибутов сущностей;
- приведение модели к требуемому уровню нормальной формы.
Определение сущностей
Первый шаг моделирования – извлечение информации из интервью и выделение сущностей.
Каждая сущность должна обладать уникальным идентификатором. Каждый экземпляр сущности должен однозначно идентифицироваться и отличаться от всех других экземпляров данного типа сущности. Каждая сущность должна обладать некоторыми свойствами:
- каждая сущность должна иметь уникальное имя, и к одному и тому же имени должна всегда применяться одна и таже интерпретация. Одна и та же интерпретация не можен применяться к различным именам, если только они не являются псевдонимами;
- сущность обладает одним или несколькими артибутами, которые либо принадлежат сущности, либо наследуются через связь;
- сущность обладает одним или несколькими атрибутами, которые однозночно идентифицируют каждый экземпляр сущности;
- каждая сущность может обладать любым количеством связей с другими сущностями модели.
На диаграмме сущность изображается прямоугольником(рисунок Б3.1). Прямоугольник может содержать имя сущности, ее описание, список ее атрибутов и другие сведения.
Каждой сущност присваивается уникальное имя и номер, разделяемые косой чертой "/" и помещаемые над блоком.
Рисунок Б3.1 - Пример изображения сущности
Следующим шагом моделирования является идентификация атрибутов.
Атрибут – любая характеристика сущности, значимая для рассматриваемой предметной области и предназначенная для квалификации, идентификации, классификации, количественной характеристики или выражения состояния сущности
Горизонтальная линия прямоугольника разделяет атрибуты сущности на два набора - атрибуты, составляющие первичный ключ в верхней части, и прочие (не входящие в первичных ключ) - в нижней части.
Каждая сущность должна обладать хотя бы одним возможным ключом.
Возможный ключ сущности – это один или несколько атрибутов, чьи значения однозначно определяют каждый экземпляр сущности. При существовании нескольких возможных ключей один из них обозначается в качестве первичного ключа, а остальные – как альтернативные ключи.
Первичный ключ - это атрибут или набор атрибутов, уникально идентифицирующий экземпляр сущности.
Помимо того факта, что ключ обязан однозначно идентифицировать сущность, все атрибуты ключа должны удовлетворять однозначной идентификации ( Правило Наименьшего ключа ). Таким образом, при определении, должен ли наследуемый атрибут быть частью ключа, вопросом является – необходим ли этот атрибут для однозначной идентификации. Однозначной идентификации родителя при этом недостаточно.
Существуют два правила зависимости: Правило Полной Функциональной Зависимости, утверждающее, что первичный ключ состоит из множества атрибутов, все неключевые атрибуты должны функционально зависеть от всего первичного ключа.
Правило Нетранзитивной Зависимости, утверждающее, что каждый неключевой атрибут должен функционально зависеть только от ключевых атрибутов.
Кроме того, ни одна из частей ключа не может быть NULL, не заполненной или отсутствующей.
Если несколько наборов атрибутов могут уникально идентифицировать сущность, то выбор одного из них осуществляется разработчиком на основании анализа предметной области.
Правила, по которым вы выбираете первичный ключ из списка предполагаемых ключей, могут быть следующими:
- уникальным образом идентифицировать экземпляр сущности;
- не использовать null значений;
- не изменяться со временем. Экземпляр идентифицируется с помощью ключа. При изменении ключа соответственно меняется экземпляр;
- быть как можно более короткими для использования индексирования и получения данных. Если вам нужно использовать ключ, являющимся комбинацией ключей из других сущностей, убедитесь в том, что каждая из частей ключа соответствует правилам.
Сущности, как правило, соответствует таблица в реальной СУБД.
Сущность является независимой, если каждый экземпляр сущности может быть однозначно идентифицирован без определения его отношений с другими сущностями (сущность Служащий на рисунке Б3.2).
Сущность называется зависимой, если однозначная идентификация экземпляра сущности зависит от его отношения к другой сущности (сущность Дети на рисунке Б3.2).
Рисунок Б3.2 - Пример зависимой и независимой сущности
Экземпляры независимой сущности могут быть уникально идентифицированы без определения ее связей с другими сущностями.
Зависимая сущность, наоборот, не может быть уникально идентифицирована без определения ее связей с другими сущностями.
Зависимая сущность отображается прямоугольником с закругленными углами.
Определение зависимостей между сущностями (связи)
Следующим шагом моделирования является идентификация связей.
Связь – это ассоциация между сущностями, при которой, как правило, каждый экземпляр одной сущности, называемой родительской сущностью, ассоциирован с произвольным ( в том числе нулевым) количеством экземпляров второй сущности, называемой сущностью-потомком, а каждый экземпляр
Связи может даваться имя, выражаемое грамматическим оборотом глагола и помещаемое возле линии связи. Имя каждой связи между двумя сущностями должно быть уникальным, но имена связей в модели не обязаны быть уникальными.
Имя связи всегда формируется с точки зрения родителя, так что предложение может быть образовано соединением имени сущности-родителя, имени связи, выражения степени и имени сущности-потомка.
Например, важно знать фамилию сотрудника, и не менее важно знать, в каком отделе он работает. Таким образом, между сущностями ОТДЕЛ и СОТРУДНИК существует связь Состоит из (отдел состоит из сотрудников).
Связь – это понятие логического уровня, которому соответствует внешний ключна физическом уровне.
Связь называется идентифицирующей, если экземпляр дочерней сущности идентифицируется через ее связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в первичный ключ дочерней сущности. Дочерняя сущность при идентифицирующей связи всегда является зависимой.
Идентифицирующая связь изображается сплошной линией. Линии заканчиваются точкой со стороны дочерней сущности. Связь "является родителем" (рисунок Б3.2) между сущностями Служащийи Дети является идентифицирующей
Связь называется неидентифицирующей, если экземпляр дочерней сущности идентифицируется иначе, чем через связь с родительской сущностью (рисунок Б3.3). Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в состав неключевых атрибутов дочерней сущности.
Неидентифицирующая связь изображается пунктирной линией. Линии заканчиваются точкой со стороны дочерней сущности.
При определении связи происходит миграция атрибутов первичного ключа родительской сущности в соответствующую область атрибутов дочерней сущности. Поэтому такие атрибуты не вводятся вручную.
Рисунок Б3.3 – Пример неидентифицирующей связи
Отношение дополнительно определяется с помощью указания мощности, определяющей, какое количество экземпляров сущности-потомка может существовать для каждого экземпляра сущности-родителя.
В IDEF1X могут быть выражены следующие мощности связей:
- каждый экземпляр сущности-родителя может иметь нуль, один или более связанных с ним экземпляров сущности-потомка;
- каждый экземпляр сущности-родителя должен иметь не менее одного связанного с ним экземпляра сущности-потомка;
- каждый экземпляр сущности-родителя должен иметь не более одного связанного с ним экземпляра сущности-потомка;
- каждый экземпляр сущности-родителя связан с некоторым фиксированным числом экземпляров сущности-потомка.
Допустимые варианты указания мощности приведены на рисунке Б3.4.
Рисунок Б3.4 – Допустимые варианты указания мощности связей
Определение альтернативных ключей
Альтернативный ключ – это атрибут (или группа атрибутов), несовпадающий с первичным ключом и уникально идентифицирующий экземпляр сущности.
Например, для сущности ГРУППА каждый из атрибутов ФИО_старосты и ФИО_куратора может являться альтернативным ключом.
Для альтернативного ключа, как и для первичного должны создаваться индексы при генерации БД.
Связи категоризации
Некоторые сущности определяют целую категорию объектов одного типа. В IDEF1X в таком случае создается сущность для определения категории и для каждого элемента категории, а затем вводится для них связь категоризации. Родительская сущность категории называется супертипом, а дочерние - подтипом(рисунок Б3.5).
Например, сущность СОТРУДНИК может содержать данные как о преподавателях, так и об инженерах. Первые и вторые имеют различные, частично пересекающиеся наборы атрибутов (минимальное пересечение подтипов составляет первичный ключ). Общая часть этих атрибутов (табельный номер, ФИО, адрес, телефон, дата рождения), включая первичный ключ, помещается в сущность-супертип СОТРУДНИК. Различная часть (например, стаж преподавания для преподавателя и стаж работы для инженера и т.п.) помещается в сущности-подтипы.
Рисунок Б3.5 – Пример связи неполной категоризации
В сущности-супертипе вводится атрибут-дискриминатор(например, Тип_служащего), позволяющий различать конкретные экземпляры сущности-подтипа.
В зависимости от того, все ли возможные сущности-подтипы включены в модель, категорийная связь является полной или неполной.
Рассмотренная на рисунке Б3..5 связь является связью неполной категоризации.
Если же супертип СЛУЖАЩИЙ содержит данные об прочих служащих, то эта связь полной категоризации (рисунок Б3.6).
Полная категория изображается окружностью с двумя подчеркиваниями, а неполная - окружностью с одним подчеркиванием.
Рисунок Б3.6 – Пример связи полной категоризации