Идентифицирующая связь erwin. Общие принципы работы в erwin




Создание сущностей и информации о них - это только часть картины. Связями называются логические соединения или ассоциации между двумя сущностями. Если Вы не знакомы с типами связей, которые поддерживаются в ER

win , обратитесь к руководству по методам ER win Methods Guide .

В этой главе Вы узнаете, как:

Создавать новую связь Переносить внешние ключи на зависимые сущности Входить в редактор Relationship Входить в редактор Relationship Definition Корректировать расположение "изгиба" связи

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

Что такое связь Как входить в нужные редакторы Какие инструменты из toolbox Вам понадобятся

Анатомия связи

Данные, относящиеся к связям, очень важны и часто являются критическими данными, которые мы используем в повседневном бизнесе. Например, важно знать о каком-то типе инструмента, но знание того, к кому относится конкретный инструмент (связь между человеком и инструментом) может иметь критическую важность. Связь - это соотношение либо между двумя сущностями, либо между сущностью и этой же сущностью. Связь - "логический" объект, представленный одним или несколькими атрибутами - внешними ключами. Связь в ER

win обычно содержит пять типов информации: тип связи, родительский конец связи, дочерний конец связи, знак "обязательности" связи и кардинальность связи.

Как показать на экране меню Editor

поставляется со строкой меню, в которой отсутствует меню Editor. Вы всегда можете войти в меню Display и Editor нажатием правой кнопки мыши. Указывая стрелкой курсора на диаграмму, вы вызываете на экран меню Display, а указывая курсором на объект, вызываете меню, содержащее все редакторы, связанные с этим объектом. Вместе с тем Вы можете показать меню Editor в строке меню или убрать его оттуда.

1. Дайте команду переключателя "Show Editor Menu" в меню Option для того, чтобы показать меню Editor в строке меню.

2. Для того, чтобы убрать меню Editor из строки меню, повторите эту команду.

Поддержка связей в Toolbox

win Toolbox есть пять типов связей: идентифицирующая, неидентифицирующая, полный кластер подтипов, неполный кластер подтипов, неопределенная (связь"многие-ко-многим"). Идентифицирующая связь - такая связь, при которой экземпляр дочерней сущности идентифицируется через свою ассоциацию с родительской сущностью. Атрибуты первичного ключа родительской сущности становятся атрибутами первичного ключа дочерней. Неидентифицирующая связь - это такая связь, при которой экземпляр дочерней сущности не идентифицируется через свою ассоциацию с родительсой сущностью. Атрибуты первичного ключа родительской сущности становятся неключевыми атрибутами дочерней. См. также гл. 9, Связи: возможности повышенного уровня сложности, разд. "Задание неидентифицирующих связей" и "Создание связей подтипов".

1. Установите курсор на тот инструмент, который Вам нужен, и нажмите левую кнопку мыши.

идентифицирующая связь неидентифицирующая связь

2. Щелкните по родительской, а затем по дочерней сущности для создания связи.

Использование pop-up меню Editor для связей

содержит специальную сокращенную версию меню Editor для связей. Если Вы щелкнете правой кнопкой мыши по связи, находящейся в окне диаграммы, то ER win выведет на экран сокращенный, контекстно-чувствительный вариант меню Editor, которое содержит только редакторы, ориентированные на связи.
См. гл. 3, Сущности и атрибуты в
ERwin , разд. "Использование редакторов ER win ".

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

Создание связи

Создать связь в ER

win легко. В этом разделе описывается, как создать связь и ввести необходимые данные по ней.

Как создать связь

1. На Toolbox выберите инструмент, соответствующий нужному типу связи (идентифицирующая связь - простая линия с одной точкой на конце, неидентифицирующая связь - пунктирная линия, у которой может быть (но не обязательно) ромбик на одном конце и точка на другом).

2. Нарисуйте связь: щелкните сначала по родительской, а затем по дочерней сущности.

Когда Вы сформируете связь, то ключ родительской сущности автоматически появится в качестве части ключа дочерней (для идентифицирующей связи) или в качестве неключевого атрибута дочерней сущности (для неидентифицирующей связи), причем рядом с ним будет стоять (FK), то есть внешний ключ, Foreign Key. Эта операция изменения дочерней сущности вследствие создания связи называется миграцией ключа

.

Поскольку ERwin автоматически производит миграцию ключей, Вам не нужно вводить внешние ключи. Если Вы это сделаете, то получите повторяющиеся атрибуты и колонки, что приведет к конфликтной ситуации в Вашем проекте.

Работа в редакторе Relationship

Связи, как и сущности, могут иметь имена и метки. Эти метки называются глагольными фразами, они должны описывать, каким образом родительская сущность связана с дочерней. Редактор Relationship позволяет Вам задать глагольную фразу, кардинальность и отношение к нулевым значениям для связи.

Вы можете также задать в редакторе Relationship имя роли для атрибута - внешнего ключа. См. также гл. 8, Сущности и атрибуты: возможности повышенного уровня сложности, разд. "Использование имен ролей атрибутов".

Как открыть редактор Relationship

1. Дайте команду "Relationship" в меню Editor.

2. Дважды щелкните по линии той связи, которую Вы хотите редактировать. Вы войдете в редактор Relatio

nship.

Установите курсор на линию связи и щелкните правой кнопкой мыши. Вы войдете в pop-up меню Editor. Дайте в нем команду "Relationship".

Как пользоваться редактором Relationship

1. Введите имя, которое идентифицирует связь, в окно "Verb Phrase".

Обычно именем связи служит глагольная фраза (verb phrase). Старайтесь, чтобы имена связей как можно более полно их описывали! Редактор Relationship показывает первые четыре строки глагольной фразы и позволяет Вам вводить и просматривать даже большее число строк.

Для перехода на новую строку используйте клавишу "Возврат каретки". ER

win изображает глагольную фразу на диаграмме в то самое время, когда Вы вводите ее в редакторе.

2. Рядом с областью для ввода глагольной фразы находится список "Foreign Keys", который содержит все внешние ключи, которые возникли в результате миграции при задании текущей связи.

3. Если тип связи еще не задан, задайте его нажатием на кнопку выбора: "Identifying" или "Non-Identifying".

4. Нажмите нужные кнопки выбора в окнах "Cardinality" и "Nulls" для задания кардинальности и режима нулевых значений для текущей связи.

5. Если Вы хотите связать имя роли с внешним ключом, щелкните по атрибуту в окне-списке "Foreign Key" и введите имя роли в текстовое окно "Role Name".

См. гл. 8, Сущности и атрибуты: возможности повышенного уровня сложности, разд. "Использование имен ролей атрибутов".

Как просматривать окно VERb Phrase

Вы можете пользоваться стрелками для прокручивания текста в окне "Verb Phrase" для того, чтобы просмотреть весь текст длинной глагольной фразы.

Задание кардинальности связи

Кардинальность связи

служит для обозначения отношения числа экземпляров родительской сущности к числу экземпляров дочерней. Родительская сущность может связываться с дочерней одним из четырех способов. В IDEF1X кардинальность бинарных отношений равна 1:n, где n может принимать значения: 0, 1 или более - обозначается "пустым местом"
Каждая родительская сущность связана с 0, 1 или более экземпляров дочерней.
1 или более - обозначается буквой "Р"
Каждая родительская сущность связана с 1 или более экземпляров дочерней.
0 или 1 - обозначается буквой "Z"
Каждая родительская сущность связана с 0 или 1 экземпляром дочерней.
ровно n, где "n" - некоторое число
Каждая родительская сущность связана с ровно n экземплярами дочерней.

Редактор Relationship также позволяет Вам задавать кардинальность связи.

1. Находясь в редакторе Relationship, нажмите кнопку выбора, обозначающую нужную Вам кардинальность.

2. Если Вы нажали кнопку "Exactly", то необходимо ввести число.

Если Вы задали этот режим и не ввели число, то ER

win не даст Вам выйти из окна-диалога.

Как показать кардинальность связи

позволяет Вам показать кардинальность связи на диаграмме.

Как показать или убрать кардинальность связи

1. Дайте команду "Cardinality" в меню Display.

2. Для того, чтобы убрать информацию о кардинальности, повторите эту команду.

См. также гл. 11, Документирование правил (Business Rules), разд. "Использование кардинальности связи для выражения правил".

Задание режима Null (нулевых значений)

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

Как задать "обязательную" или
"необязательную" связь

1. Находясь в редакторе Relationship, нажмите кнопку "No Nulls" для задания "обязательной" связи (ромбик на родительском конце отсутствует), или нажмите кнопку "Nulls Allowed" для задания "необязательной" связи (с ромбиком на родительском конце).

Работа в редакторе Relationship Definition

Вы можете также захотеть дать более полное определение Вашей связи для того, чтобы в дальнейшем иметь возможность на него ссылаться. Это делается в редакторе Relanship Definition.

1. Дайте команду "Relationship Definition" в меню Editor, если Вы еще ее не давали.

2. Дважды щелкните по той связи, которую Вы хотите отредактировать.

Установите курсор на ту связь, которую Вы хотите отредактировать, и нажмите правую кнопку мыши. Дайте команду "Relationship Definition" в меню Editor.

Если при попытке дважды щелкнуть по связи Вы получили сообщение "Select an Object First", это значит, что Вы щелкнули не точно по линии связи. Нажмите кнопку "ОК" в окне сообщения, для того чтобы убрать его с экрана, и попробуйте снова. Постарайтесь щелкнуть точно по линии.

Как пользоваться редактором Relationship Definition

1. Имя связи, если оно есть, находится в окне "Verb Phrase". Если хотите, можете его отредактировать.

2. Отредактируйте, как нужно, физическое имя связи "Relationship Physical Name".

3. Введите определение в окно "Rel

ationship Definition".

4. После того, как Вы закончите работу, нажмите кнопку "ОК" для того, чтобы сохранить информацию и выйти из редактора. Для выхода из редактора без сохранения изменений нажмите кнопку "Cancel".

Коррекция связей

Если Вам не нравится форма линии связи, ее можно изменить. Для этого Вам нужно захватывать мышью углы линии связи и переносить их с места на место, пока линия не начнет выглядеть лучше.

Как откорректировать связь

1. Щелкните по той связи, которую Вы хотите отредактировать. На экране появится "рычаг" связи (темный квадрат) . Он определяет место на линии связи, которое можно переносить.

2. Щелкните по любому месту того сегмента линии связи, где изображен рычаг.

3. Не отпуская левой кнопки мыши, измените расположение линии связи в соответствии с Вашим вкусом и затем отпустите кнопку мыши.

Никогда не забывайте регулярно сохранять изменения, которые Вы вносите в диаграмму.

Краткое повторение главы 4

Как показать или убрать меню Editor

Дайте команду "Show Editor Menu" в меню Option для того, чтобы показать меню Editor в строке меню. Для того, чтобы убрать меню Editor из строки меню, повторите эту команду.

Как пользоваться инструментами, ориентированными на связь

Установите курсор на нужный Вам инструмент и щелкните левой кнопкой мыши.

Как создать новую связь

Щелкните по одной из пиктограмм на Toolbox, обозначающих связь, а затем щелкните сначала по родительской сущности, затем - по дочерней.

Как произвести миграцию внешних ключей в зависимые сущности

Ничего не делайте. ERwin автоматически производит миграцию внешних ключей при создании связи. Никогда не вводите внешние ключи самостоятельно.

Как войти в редактор Relationship

Убедитесь, что режим "Relationship" активен в меню Editor, а затем дважды щелкните по той связи, которую Вы хотите отредактировать.

Как задать кардинальность связи

Находясь в редакторе Relationship, нажмите одну из кнопок выбора в окне "Cardinality" для того, чтобы задать кардинальность связи. Если Вы нажали кнопку "Exactly", то необходимо ввести точное значение кардинальности в текстовое окно, расположенное рядом с названием кнопки.

Как войти в редактор Relationship Definition

Убедитесь, что режим "Relationship Definition" активен в меню Editor, а затем дважды щелкните по той связи, которую Вы хотите отредактировать.

Как откорректировать форму линии связи

Щелкните по одному из углов на линии и двигайте его, пока линия не станет более красивой.

6. Моделирование в ERwin

Место ERwin в информационном моделировании
Процесс построения информационной модели состоит из следующих шагов:

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

ERwin создает визуальное представление (модель данных) для решаемой задачи. Это представление может использоваться для детального анализа, уточнения и распространения как части документации, необходимой в цикле разработки. Однако ERwin далеко не только инструмент для рисования. ERwin автоматически создает базу данных (таблицы, индексы, хранимые процедуры, триггеры для обеспечения ссылочной целостности и другие объекты, необходимые для управления данными).

Отображение логического и физического уровня модели данных в ERwin

В ERwin существуют два уровня представления и моделирования - логический и физический. Логический уровень означает прямое отображение фактов из реальной жизни. Например, люди, столы, отделы, собаки и компьютеры являются реальными объектами. Они именуются на естественном языке, с любыми разделителями слов (пробелы, запятые и т.д.). На логическом уровне не рассматривается использование конкретной СУБД, не определяются типы данных (например, целое или вещественное число) и не определяются индексы для таблиц.
Целевая СУБД, имена объектов и типы данных, индексы составляют второй (физический) уровень модели ERwin.
ERwin предоставляет возможности создавать и управлять этими двумя различными уровнями представления одной диаграммы (модели), равно как и иметь много вариантов отображения на каждом уровне.

Компоненты диаграммы ERwin и основные виды представлений диаграммы

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

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

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

Инструменты для создания модели в ERwin

Основные инструменты создания модели доступны как из меню, так и через окно инструментов. С их помощью создаются независимые и зависимые сущности, идентифицирующие и неидентифицирующие связи, полные и неполные категории, неспецифические связи и текстовые элементы.
Нажатием мыши над сущностью производится вход в один из многочисленных редакторов ERwin:

  • редакторы, связанные с сущностью в целом (определение сущности, дополнительная информация, триггеры, индексы, характеристики таблицы, хранимые процедуры, связанные с таблицей);
  • редакторы атрибутов (определение атрибутов, колонки таблицы в физическом представлении модели, репозитарий средства 4GL, например, расширенные атрибуты в PowerBuilder).

Идентификация сущностей. Сущности в ERwin

На диаграмме сущность изображается прямоугольником. В зависимости от режима представления диаграммы прямоугольник может содержать имя сущности, ее описание, список ее атрибутов и другие сведения.
Горизонтальная линия прямоугольника разделяет атрибуты сущности на два набора - атрибуты, составляющие первичный ключ в верхней части и прочие (не входящие в первичных ключ) в нижней части.
Сущность представляет собой множество реальных или абстрактных объектов, например, люди, места, события, факты, которые имеют общие характеристики. Сущность - это логическое понятие. Сущности соответствует таблица в реальной СУБД. В ERwin сущность визуально представляет три основных вида информации:

  • атрибуты, составляющие первичный ключ;
  • неключевые атрибуты;
  • тип сущности (независимая/зависимая).

Первичный ключ - это атрибут или набор атрибутов, уникально идентифицирующий экземпляр сущности. Если несколько наборов атрибутов могут уникально идентифицировать сущность, то выбор одного из них осуществляется разработчиком на основании анализа предметной области.
Для каждого первичного ключа ERwin создает при генерации структуры БД уникальный индекс.
Экземпляры независимой сущности могут быть уникально идентифицированы без определения ее связей с другими сущностями; зависимая сущность, наоборот, не может быть уникально идентифицирована без определения ее связей с другими сущностями. Зависимая сущность отображается в ERwin прямоугольником с закругленными углами.

Связи (relationships) в ERwin

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

  • тип связи (идентифицирующая, неидентифицирующая, полная/неполная категория, неспецифическая связь);
  • родительская сущность;
  • дочерняя (зависимая) сущность;
  • мощность связи (cardinality);
  • допустимость пустых (null) значений.

Связь называется идентифицирующей, если экземпляр дочерней сущности идентифицируется через ее связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в первичный ключ дочерней сущности. Дочерняя сущность при идентифицирующей связи всегда является зависимой.
Связь называется неидентифицирующей, если экземпляр дочерней сущности идентифицируется иначе, чем через связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в состав неключевых атрибутов дочерней сущности.
Для определения связей ERwin выбирается тип связи, затем мышью указывается родительская и дочерняя сущность. Идентифицирующая связь изображается сплошной линией; неидентифицирующая - пунктирной линией. Линии заканчиваются точкой со стороны дочерней сущности.
При определении связи происходит миграция атрибутов первичного ключа родительской сущности в соответствующую область атрибутов дочерней сущности. Поэтому такие атрибуты не вводятся вручную.
Атрибуты первичного ключа родительской сущности по умолчанию мигрируют со своими именами. ERwin позволяет ввести для них роли, т.е. новые имена, под которыми мигрирующие атрибуты будут представлены в дочерней сущности. В случае неоднократной миграции атрибута такое переименование необходимо. Например, сущность "посредническая сделка" имеет атрибут "код предприятия-продавца" и "код предприятия-покупателя". В данном случае первичный ключ сущности "предприятие" ("код предприятия") имеет две роли в дочерней сущности.
На физическом уровне имя роли - это имя колонки внешнего ключа в дочерней таблице.
Мощность связи представляет собой отношение количества экземпляров родительской сущности к соответствующему количеству экземпляров дочерней сущности. Для любой связи, кроме неспецифической, эта связь записывается как 1:n.
ERwin в соответствии с методологией IDEF1X предоставляет 4 варианта для n, которые изображаются дополнительным символом у дочерней сущности: ноль, один или больше (по умолчанию); ноль или один; ровно N, где N - конкретное число.
Допустимость пустых (NULL) значений в неидентифицирующих связей ERwin изображает пустым ромбиком на дуге связи со стороны родительской сущности.
Обозначения мощности соответственно ноль, один или больше, один или больше, ноль или один в нотации IE приведены на рис. 1.

Рис.1. Обозначения мощности связи в нотации IE

Имя связи на логическом уровне представляет собой "глагол", связывающий сущности. Физическое имя связи (которое может отличаться от логического) для ERwin означает имя ограничения (constraint) или индекса.

Графическое редактирование модели

Для установления связей между сущностями и создания внешних ключей ERWin предоставляет возможность разделения типов связей на несколько вариантов:

  • идентифицирующая связь - связь, определяющая однозначное соответствие экземпляра одной сущности единственному экземпляру связанной сущности и, как правило, описывает связь 1:1, но при реализации сцепленного первичного ключа может реализовывать связь один - ко - многим (1:JV);
  • неидентифицирующая связь - связь, реализующая тип связи один - ко - многим (1 :N), представляя внешний ключ в связанной сущности в качестве простого атрибута, на который могут быть наложены определенные дополнительные ограничения по сравнению с обычными информационными атрибутами;
  • множественная связь - связь, реализующая тип связи многие - ко - многим (Л Г:М), представляется только на уровне логической модели, иллюстрируя соединение между сущностями, но не создавая внешних ключей в связанных сущностей;
  • категоризационная - связь, обеспечивающая связывание сущности- общности с сущностями-категориями типом связи один - к - одному (1:1) и одновременно создающая внешний первичный ключ в сущностях-категориях, связанный с первичным ключом сущности-общности.

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

Инструментальное средство ERWin, при установлении связей между сущностями, определяет два вида сущностей:

  • родительская (Parent) - является базовой сущностью, первичный ключ которой может мигрировать в связанную сущность;
  • дочерняя (Child) - определяется сущностью, которая при установлении связи получает внешний ключ, формируемый из мигрирующего первичного ключа родительской сущности.

Такое разделение выглядит вполне логичным, поскольку, исходя из особенностей выстраивания связей и логики предметной области, сведения, описываемые родительской сущностью, являются агрегирующими в отношении к данным, описываемым дочерней сущностью. Например, рассматривая связь между сущностями "Клиент" и "Заказ", конкретный клиент, представляемый экземпляром сущности "Клиент", объединяет (агрегирует) множество заказов, которые он создал в электронном мага-

зине. В результате, сущность "Заказ" по отношению к сущности "Клиент" можно рассматривать в качестве дочерней, а сущность "Клиент" - родительской.

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

Рис. 3.15. Базовое описание связи в ERWin


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

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

Три важнейшие базовые характеристики связи (рис. 3.16), формирующие основную суть связи, описываются в первой закладке "General" и представляют тип связи, наименование связи, кардинальность (мощность). Эти параметры связи всегда обязательно должны быть определены и правильным образом описаны. Кроме наименования связи, остальные характеристики будут перенесены при соответствующей трансформации в физическую модель, а потом и в базу данных.

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

Рис. 3.16. Основные характеристики связи в РЖ Win


Обычно, при установлении не идентифицирующей связи параметр "Null Option" устанавливается в значение "Nulls Not Allowed" (NULL недопустим). Это определяется особенностями работы с данными, в соответствии с которыми дочерний экземпляр данных должен быть связан с родительским экземпляром. Но иногда бывают случаи, когда это не соблюдается. Как правило, такая ситуация возникает, когда объекты предметной области, объединяемые этой связью, являются равнозначными и невозможно однозначно определить первоочередность появления экземпляра той или иной сущности. Тогда устанавливается значение "Null Allowed" (NULL допускается), как это показано в примере (см. рис. 3.17).


Поскольку связи один - к - одному и один - ко - многим являются родственными и различия в них заключаются только в мощности и некоторых более жестких требованиях, то переключение между этими типами связей можно осуществлять в рамках диалогового окна настройки связи, переводя связь из типа "Не идентифицирующая" в тип "Идентифицирующая". В этом случае параметр "Null Option" будет недоступен

для настройки. Объясняется это тем, что при установке идентифицирующей связи получаемый в дочерней сущности внешний ключ одновременно является первичным ключом, а правилами построения базы данных первичный ключ не может хранить пустого значения. Поэтому для полученного внешнего ключа устанавливается параметр "Null Not Allowed" (NULL недопустим).

Другой характеристикой, которая дает возможность переходить от связи один - к - одному к связи один - ко - многим и наоборот, является кардинальность. Установление кардинальности (мощности) связи в рамках свойств "Cardinality" и "Cardinality Value" задает правила наполнения экземплярами дочерней сущности (рис. 3.18). Предусматривается четыре варианта кардинальности, определяемые средством ERWin:

  • Zero, One or More (ноль, один или много) - для дочерней сущности возможно любое количество экземпляров, связанных с одним экземпляром родительской сущности, включая вариант отсутствия экземпляров;
  • (Р) One or More (один или много) - количество экземпляров дочерней сущности, связанных с одним экземпляром родительской сущности, может быть любым, но при создании экземпляра в родительской сущности в дочерней сущности экземпляры уже должны существовать, что требует установления параметра "Null Option" в значение "Nulls Allowed", разрешая хранение пустого значения "NULL" во внешнем ключе, полученном при установлении связи;
  • (Z) Zero or One (ноль или один) - определяется связь один - к - одному, разрешая существование не более одного экземпляра данных в дочерней сущности;
  • Cardinality Value (значение кардинальности) - указывает точное количество связанных экземпляров в дочерней сущности, что может быть реализовано только при варианте параметра "Null Option" в значении "Nulls Allowed", первичном создании экземпляров в дочерней сущности и последующим их увязыванием с экземпляром в родительской сущности.

В результате указания кардинальности (мощности) связи на модели в диаграмме будет отображено ее буквенно-цифровое обозначение. Если выбирается вариант кардинальности (мощности) в варианте "Один или много", то будет отображена литера "Р", в случае кардинальности "Ноль или один" - литера "Z", в случае указания точного числового значения - указанное значение, в других вариантах не будет отображаться никаких обозначений на модели.

Еще одна характеристика связи описывается в качестве основной - смысловое наполнение связи (рис. 3.19), обозначаемое глагольной формой.

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


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


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

  • Migrated Attribute (мигрирующий атрибут) - показывает атрибут родительской сущности, который представляется внешним ключом в связанной дочерней сущности (изменению не подлежит);
  • Role Name (имя роли) - обозначает новое значение названия атрибута внешнего ключа, которое должно использоваться вместо имени мигрирующего атрибута.

Указание нужного названия атрибута в колонке "Role Name" приведет к переименованию атрибута внешнего ключа и последующего использования нового имени атрибута во всех элементах модели базы данных, где это будет необходимо.

Определение правил ссылочной целостности (рис. 3.21) является этапом физического моделирования базы данных. Связано это с тем, что отдельные правила для некоторых СУБД могут быть недоступны. Тем не менее, ERWin на этапе логического моделирования предоставляет возможность указать правила ссылочной целостности для формируемых связей. На этом этапе разработчику предлагается максимальный набор правил :

  • None (отсутствует) - правило, предполагающее любые действия пользователя без влияния на другие элементы базы данных;
  • No Action (без действия) - правило, предполагающее определенные разработчиком действия;
  • Restrict (запретить) правило, запрещающее выполнение операции над данными, если проверочное условие выполняется;
  • Cascade (каскадно) - правило, выполняющее последовательные действия над связанными данными в соответствии с действием, выполняемым над данными, к которым определено данное правило;
  • Set Null (установить NULL) - правило, устанавливающее значение NULL внешнему ключу для связанных экземпляров;
  • Set Default (установить умолчание) - правило, устанавливающее значение по умолчанию, определенное для внешнего ключа связанного экземпляра.

Правила ссылочной целостности направлены на обеспечение корректности операций с данными при их модификации. Таким образом, эти правила должны выполняться, если в базе данных реализуются операции, но добавлению, изменению и удалению данных. ERWin реализует операции ограничений ссылочной целостности в максимальном варианте, рассматривая выполнение соответствующих операций не только по основным вариантам, влияющим на изменения в базе данных, но и по операциям, которые не должны оказывать существенного изменения в базе данных. В итоге разработчику предлагается указать правила ссылочной целостности при выполнении действий над данными при модификации данных экземпляров как в родительской, так и в дочерней сущностях. Впоследствии все эти действия, если они не предусмотрены в СУБД, будут преобразованы в программные модули автоматического выполнения (триггеры) и ассоциируются с действиями, выполняемыми над данными. В случае наличия в СУБД указанных действий ссылочной целостности они будут заявлены соответствующими правилами при описании таблиц данных.


При формировании связи многие - ко - многим разработчику предоставляет возможность указания минимального набора характеристик связи, включающих в себя определение смысловой нагрузки. Никакие другие правила и характеристики для данного типа связи не устанавливаются, поскольку при переходе к физической модели такая связь должна быть нормализована и представлена связями один - ко - многим (рис. 3.22).


  • при первом указании связи выбрать пиктограмму связи и последовательно выбрать сущность-общность и одну из сущностей-категорий;
  • остальные сущности-категории с помощью той же пиктограммы связи категоризации соединять путем последовательного выбора графического элемента и очередной сущности-категории.

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

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




Для самой связи категоризации никакие прочие характеристики не определяются, и разработчику предоставляется только возможность просмотра структуры связи категоризации (рис. 3.24). Это описание дает возможность увидеть, какие сущности-категории определены подтипами (subtypes), а какая сущность-общность представлена надтипом (supertype).

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

Рис. 3.24. Описание связи категоризации в ЕИЧп

  • Подробное рассмотрение правил ссылочной целостности рассматривается в параграфе 3.2.

Нам понадобится понятие аномалии - несоответствия между ограничениями целостности концептуальной и логической (а также физической) схем данных. Цель нормализации - это как раз устранение аномалий, проявляющихся при включении, обновлении и удалении данных.

Четыре первые нормальные формы (точнее первая, вторая, третья и Бойса-Кодда) объединяются в одну группу потому, что их определения основаны на классическом понятии функции, заданной на схеме отношения, и на теореме Хиса.

Еще две нормальные формы (четвертая и пятая) используют модифицированные функциональные зависимости . Последняя нормальная форма - домен- ключ - знаменует возвращение к истокам - логическому подходу к реляционной теории.

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

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

мы воспользуемся уже известным вам отображением реляционной модели в модель " сущность-связь " и в ER-модели будем изучать нормализацию. Это позволит привлечь семантику, необходимую для работы с аномалиями.

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

5.1 Связи и внешние ключи

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

Семантика связей достаточно развита. Кроме мощности концов, используются такие свойства как обязательность, свойство идентифицируемости. В реляционной модели выразить их напрямую нельзя (нет таких слов). Поэтому первые нормальные формы будем рассматривать в рамках модели "сущность-связь".

Связи между отношениями/сущностями и в реляционной модели и в ER-диаграммах образуются ссылочным ограничением целостности, которое называется "внешний ключ" ("Foreign Key" - сокращенно FK).

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

Обговорим общий подход к анализу структур, которые будут разбираться в дальнейшем на примере двух связанных сущностей "Сотрудник" и "Отдел", проиллюстрированном на рисунке 5.1 . Слева вариант с идентифицирующей связью, справа с неидентифицирующей.


Рис. 5.1. Пример связей "один-ко-многим"

Хочу еще раз напомнить о том, что примеры мы договорились рассматривать такими, как они описаны в тексте, а не так, как бывает или может быть в жизни. Это ограничение необходимо, чтобы информация воспринималась всеми и всегда одинаково.

В обоих вариантах схемы каждый сотрудник причисляется к одному из отделов. Имеем связь ("ко-многим" на стороне отношения "Сотрудник"). В отношении "Сотрудник" нельзя выбрать номер отдела deptno, несуществующий в списке отделов (сущность "Отдел"). В одном отделе может быть ни одного, один, два и более сотрудников.

Мы отметили по поводу похожего примера (раздел 2.2.7), что образуется парадоксальная ситуация. Директор причислен к какому-то отделу, а начальник этого отдела и подчинен директору и одновременно будет его же начальником. Но может быть отделы - это центры затрат, и зарплату директора решили относить на расходы одного из отделов. В наших учебных примерах не стоит заниматься такими деталями, если, конечно, не оговорено противное. Вы должны с самого начала привыкать в числе прочего думать о стороне бизнеса, но при решении учебных задач не следует расширять задания до анализа возможных вариантов.

В чем же разница между схемами на рисунке 5.1 ? Идентифицирующая связь заставляет думать о сотруднике в первую очередь как о работнике отдела. Неидентифицирующая связь означает, что принадлежность к отделу отмечается как нечто второстепенное.

5.2 Типы связи. Идентифицирующие и неидентифицирующие, обязательные и необязательные связи

Типы связи идентифицирующая и неидентифицирующая (см. рисунок 5.1) относится не к теории реляционных баз данных, а к стандарту моделирования IDEF1X, на котором основан ERwin (он же AllFusion Data Modeller).

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

Неидентифицирующая связь используется для соединения двух сильных сущностей. Она передает ключ в область неключевых атрибутов.

Для неидентифицирующей связи можно указать обязательность (всей связи, а не ее конца). Если связь обязательна (в ERwin это задание признака No Nulls), то атрибуты внешнего ключа получат признак NOT NULL, означающий недопустимость неопределенных значений. Для необязательной связи (признак Nulls Allowed) внешний ключ может принимать значение NULL .

После того, как в "Язык SQL" мы познакомимся с языком SQL, используя прямой инжиниринг, можно будет генерировать скрипт SQL создающий фрагмент схемы базы. Но и сейчас, если вы уже хотя бы немного знакомы с SQL, то, пройдя путь Tools > Forward Engineer/Schema Generation, а затем нажав кнопку Preview, просмотрите сгенерированный текст.

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

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