
- •Финансовый университет при правительстве российской федерации
- •Ббк 32.973.202я73
- •Занятие № 1. Знакомство с case-средством eRwin
- •1. Использование eRwin для составления моделей бд
- •1.1. Область применения
- •1.2. Уровни представления и отображение модели данных
- •1.3. Документирование модели
- •1.4. Масштабирование модели
- •1.5. Этапы построения информационной модели
- •2. Подключение учебного примера
- •2.1. Запуск eRwin
- •2.2. Отключение ModelMart
- •2.3. Подключение файла учебной модели
- •3. Инструментарий eRwin
- •3.1. Окно модели
- •3.2. Панели инструментов
- •3.3. Панель инструментов Стандартная
- •4. Методология idef1x
- •4. 1. Логические модели
- •4.2. Физические модели
- •5. Логический и физический уровни модели данных
- •6. Переключение нотаций
- •7. Режимы отображения модели
- •8. Задания
- •9. Контрольные вопросы
- •Занятие № 2. Создание логической модели простой базы данных
- •Создать логическую модель простой базы данных:
- •1. Предварительная подготовка
- •2. Логическое моделирование
- •3. Erd-диаграммы
- •4. Режимы отображения модели
- •5. Порядок выполнения работы
- •5.1. Создание модели
- •5.2. Создание сущностей Сущности (Entity) в eRwin
- •4.3. Определение атрибутов сущностей Атрибуты (Attribute) в eRwin
- •4.4. Создание первичных ключей Ключи в eRwin
- •4.5. Создание логических связей Связи в eRwin
- •4.6. Создание внешних ключей Внешние ключи в eRwin
- •4.7. Задание типа данных для атрибутов Типы данных атрибутов
- •5. Задания
- •5. Контрольные вопросы
- •Занятие № 3. Создание логической модели сложной базы данных
- •Создать логичекую модель сложнойбазы данных:
- •1. Порядок выполнения работы
- •2. Модели сложных бд
- •2. Выравнивание и группировка объектов
- •3. Хранимые изображения
- •Для отображения Атрибуты
- •4. Цветовое и шрифтовое оформление компонентов модели
- •5. Графическое оформление компонентов модели
- •6. Задания
- •7. Контрольные вопросы
- •Занятие № 4. Создание физической модели базы данных
- •1. Уровни физической модели
- •2. Прямое проектирование
- •3. Создание физической модели
- •4. Панели инструментов для работы с бд
- •5. Порядок выполнения работы
- •6. Задания
- •7. Контрольные вопросы
- •Занятие № 5. Построение модели данных на основе базы данных
- •1. Обратное проектирование
- •2. Порядок выполнения работы
- •Для того, чтобы продолжить нормализацию данных, приведем данные ко второй нормальной форме (2нф).
- •3. Задания
- •4. Контрольные вопросы
- •Занятие № 6. Синхронизация модели данных и базы данных
- •1. Синхронизация модели данных и базы данных
- •2. Порядок выполнения работы
- •2.1. Прямая синхронизация
- •2.2. Обратная синхронизация
- •5. Задания
- •6. Контрольные вопросы
- •Занятие № 7. Формирование отчетов
- •1. Отчеты
- •2. Порядок выполнения работы
- •2.1. Построитель шаблонов отчетов (Report Template Builder)
- •Вариант 1. Использование готовых шаблонов отчетов
- •Column Report - Physical Only Model: OtpuskTovarov2 April 04, 2008
- •Вариант 2. Создание своего шаблона отчета
- •Запуск созданного шаблона на выполнение
- •Применение созданного шаблона для другой модели
- •2.2. Генератор отчетов Data Browser
- •Запуск и инструменты генератора отчетов
- •Создание отчета
- •Генерация (выполнение) отчета
- •Редактирования отчета
- •Использование отчетов для проверки правильности построения модели
- •Экспорт отчетов
- •Атрибуты
- •Форматы экспорта
- •3. Задания
- •4. Контрольные вопросы
- •Литература
- •Словарь терминов
- •Оглавление
- •Кузнецов Лонгин Константинович программная инженерия
4.5. Создание логических связей Связи в eRwin
Связь (relationship) – это функциональная зависимость между двумя сущностями (в частности, возможна связь сущности с самой собой). Например, важно знать фамилию сотрудника, и не менее важно знать, в каком отделе он работает. Таким образом, между сущностями отдел и сотрудник существует связь состоит из (отдел состоит из сотрудников). Связь – это понятие логического уровня, которому соответствует внешний ключ на физическом уровне.
Связь является логическим соотношением между сущностями. Каждая связь должна именоваться глаголом (или глагольной фразой), показывающим, как одна сущность соотносится к другой (рис. 31).
Рис. 31. Связи между сущностями
Имя связи выражает некоторое ограничение или бизнес-правило и облегчает чтение модели, например:
Каждый Клиент <Вносит/Снимает> средства со счета.
Связь показывает, какие именно действия делает клиент. По умолчанию имя связи на диаграмме не показывается. Для отображения имени связи на модели необходимо в меню Format/Relationship Display включить режим Verb Phrase.
В ERwin связи представлены пятью основными элементами информации:
тип связи (идентифицирующая, неидентифицирующая, полная/неполная категория, неспецифическая связь);
родительская сущность;
дочерняя (зависимая) сущность;
мощность связи (cardinality);
допустимость пустых (null) значений.
В IDEF1X различают зависимые и независимые сущности. Тип сущности определяется ее связью с другими сущностями.
Связь называется идентифицирующей, если экземпляр дочерней (зависимой) сущности идентифицируется через ее отношение с родительской (независимой) сущностью. Когда рисуется идентифицирующая связь ERwin автоматически преобразует дочернюю сущность в зависимую, а атрибуты, составляющие первичный ключ родительской сущности, автоматически переносятся в первичный ключ дочерней сущности. Эта операция дополнения атрибутов дочерней сущности при создании связи называется миграцией атрибутов. В дочерней сущности новые атрибуты помечаются как внешний ключ – (FK). Зависимая сущность изображается прямоугольником со скругленными углами (рис. 32). В дальнейшем, при генерации схемы БД, атрибуты первичного ключа получат признак NOT NULL, что означает невозможность внесения записи в таблицу заказов без информации о номере клиента. Идентифицирующая связь показывается на модели сплошной линией с жирной точкой на дочернем конце связи.
Рис. 32. Пример идентифицирующей связи один-ко-мнoгим
Связь называется не идентифицирующей, если экземпляр дочерней сущности остается независимым, а атрибуты первичного ключа родительской сущности мигрируют в состав неключевых компонентов родительской сущности. Неидентифицирующая связь (рис. 33) служит для связывания независимых сущностей. Неидентифицирующая связь показывается на модели пунктирной линией с жирной точкой на дочернем конце связи.
На логическом уровне в ERwin можно установить идентифицирующую связь один-ко-многим, связь многие-ко-многим и неидентифицирующую связь один-ко-многим.
Рис. 33. Пример неидентифицирующей связи один-ко-мнoгим
Связь один-ко-мнoгим означает, что экземпляр первой сущности взаимодействует с несколькими экземплярами другой сущности. Взаимосвязи отображаются линиями, соединяющими две сущности с точкой на одном конце и глаголом, располагаемым над линией. Примеры таких взаимосвязей:
команда включает много игроков;
самолет перевозит много пассажиров;
продавец продает много продуктов.
На уровне логической модели наряду со связью один-ко-многим допустима связь многие-ко-многим. Этот тип связи описывает ситуацию, при которой экземпляры сущностей могут взаимодействовать с несколькими экземплярами других сущностей. Связь многие-ко-многим используют на первоначальных стадиях проектирования. Этот тип взаимосвязи отображается сплошной линией с точками на обоих концах (рис. 34). Связь многие-ко-многим должна именоваться двумя фразами (рис. 34) – в обе стороны. Это облегчает чтение модели.
Рис. 34. Пример связи многие-ко-мнoгим
Связь многие-ко-многим может не учитывать определенные ограничения системы, поэтому при переходе к физическому уровню ERwin автоматически преобразует связь многие-ко-многим, добавляя новую сущность и устанавливая две новые связи один-ко-многим от старых сущностей к новой сущности. При этом имя новой сущности автоматически присваивается как Имя1_Имя2, например, Товар_Заказ.
13. Создайте связи.
13.1. При помощи панели инструментов Стандартная перейдите в режим (уровень) отображения сущностей (рис. 35).
Рис. 35. Вид модели в режиме отображения сущностей
13.2. Включите режим отображения связей на дугах связей между сущностями, включив для этого режим Verb Phrases (Показ глагольной фразы) в меню Format/Relationship Display.
13.3. Для установления связей используются кнопки связей на панели Инструменты (рис. 5).
13.4. Установите связь М:М между сущностями Товар и Заказ (рис. 35). Порядок задания связи следующий: щелкните мышью по кнопке Many-to-many relationship на панели Инструменты, а затем сделайте щелчок мышью сначала по родительской сущности Товар, а затем по дочерней сущности Заказ. Для отключения режима задания связей щелкните мышью по кнопке Выбор (Select).
13.5. Установите связь 1:М между сущностями Клиент и Заказ (рис. 35). Порядок задания связи следующий: щелкните мышью по кнопке Non-identifying reletionship на панели Инструменты, а затем сделайте щелчок мышью сначала по родительской сущности Клиент, а затем по дочерней сущности Заказ. Для отключения режима задания связей щелкните мышью по кнопке Выбор (Select).
После выполнения пунктов 13.3 и 13.4 на модели появятся линии связи между сущностями с дежурными именами связей R/1 и R/2 (рис. 36).
Рис. 36. Вид модели с установленными связями сущностей
14. Задайте имена связям.
14.1. Проверьте выполнение пункта 13.2.
14.2. Для задания имен связям между сущностями Товар и Заказ сделайте двойной щелчок мышью по связи R/1 (рис. 36).
14.3. В появившемся окне Reletionship (рис. 37) выберите вкладку General.
Рассмотрим назначение вкладок в окне задания связей Reletionship (рис. 37).
Рис. 37. Окно Reletionship
На вкладке General диалога можно задать мощность, имя и тип связи.
Мощность связи (Cardinality) –обозначает отношение числа экземпляров родительской сущности к числу экземпляров дочерней. ERwin, в соответствии с методологией IDEF1X, позволяет задать четыре типа мощности:
Zero, One or More. Общий случай, когда одному экземпляру родительской сущности соответствуют 0, 1 или много экземпляров дочерней сущности, не помечается каким-либо символом;
One or More. Символом P помечается случай, когда одному экземпляру родительской сущности соответствуют 1 или много экземпляров дочерней сущности (исключено нулевое значение);
Zero or One. Символом Z помечается случай, когда одному экземпляру родительской сущности соответствуют 0 или 1 экземпляр дочерней сущности (исключены множественные значения);
Exactly. Конкретным числом, например, 5 помечается случай точного соответствия, когда одному экземпляру родительской сущности соответствует заранее заданное число экземпляров дочерней сущности.
По умолчанию символ, обозначающий мощность связи, не показывается на модели. Для отображения имени следует меню Format/Relationship Display включить режим Cardinality. Мощность отображается дополнительным символом у дочерней сущности (рис. 38).
|
|
0, 1 или много | |
|
|
1 или много | |
|
P |
|
|
|
|
0 или 1 | |
|
Z |
|
|
|
|
точно N (5) | |
|
5 |
|
|
Рис. 38. Обозначение мощности связи на моделях
Имя связи (Verb Phrase) – фраза, характеризующая отношение между родительской и дочерней сущностями. Для связи один-ко-многим идентифицирующей или неидентифицирующей достаточно указать имя связи, характеризующее отношение родительской к дочерней сущности (Parent-to-Child). Для связи многие-ко-многим следует указывать имена связей между сущностями в обоих направленииях: как Parent-to-Child так и Child-to-Parent (отношение дочерней к родительской).
Допустимость пустых (Nulls) значений в не идентифицирующих связях задается выбором режима Nulls Allowed в разделе Nulls. В модели этот режим изображается пустым ромбиком на дуге со стороны родительской сущности.
Тип связи (идентифицирующая/неидентифицирующая). Для неидентифицирующей связи можно указать обязательность (Nulls). В случае обязательной связи (No Nulls) при генерации схемы БД атрибут внешнего ключа получит признак NOT NULL, несмотря на то, что внешний ключ не войдет в состав первичного ключа дочерней сущности. В случае необязательной связи (Nulls Allowed) внешний ключ может принимать значение NULL. Необязательная неидентифицирующая связь помечается прозрачным ромбом со стороны родительской сущности.
В закладке Definition можно дать более полное определение связи для того, чтобы в дальнейшем иметь возможность на него ссылаться.
В закладке Rolename можно задать имя роли.
В закладке RI Actions правила ссылочной целостности.
Имя роли (Rolename) – это функциональное имя синоним атрибута внешнего ключа, который показывает, какую роль играет атрибут в дочерней сущности. По умолчанию в списке атрибутов показывается только имя роли. Для отображения полного имени атрибута (как функционального имени, так и имени роли) следует в контекстном меню, которое появляется, если щелкнуть левой кнопкой мыши по любому месту модели, не занятому объектами модели, выбрать пункт Entities Display и затем включить режим Rolename/Attribute. Полное имя показывается как функциональное имя и базовое имя, разделенные точкой.
Обязательным является применение имен ролей в том случае, когда два или более атрибутов одной сущности определены по одной и той же области, т. е. они имеют одинаковую область значений, но разный смысл. Например, сущность посредническая сделка имеет атрибут код предприятия-продавца и код предприятия-покупателя. В данном случае первичный ключ сущности предприятие (код предприятия) имеет две роли в дочерней сущности. На физическом уровне имя роли – это имя колонки внешнего ключа в дочерней таблице.
Другим примером обязательности присвоения имен ролей являются рекурсивные связи (иногда их называют рыболовный крючок – fish hook), когда одна и та же сущность является и родительской и дочерней одновременно. При задании рекурсивной связи атрибут должен мигрировать в качестве внешнего ключа в состав неключевых атрибутов той же сущности. Атрибут не может появиться дважды в одной сущности под одним именем, поэтому обязательно должен получить имя роли. Рекурсивная связь может быть только неидентифицирующей.
Вид рекурсивной связи, называющийся иерархической рекурсией, задает связь, когда экземпляр родительской сущности может иметь множество экземпляров дочерней сущности, но экземпляр дочерней сущности может иметь только один экземпляр родительской сущности.
Другим видом рекурсии является сетевая рекурсия, когда экземпляр родительской сущности может иметь множество экземпляров дочерней сущности и, наоборот, экземпляр дочерней сущности может иметь множество экземпляров родительской сущности. Сетевая рекурсия задает паутину отношений между экземплярами родительской и дочерней сущностей. Это случай, когда сущность находится сама с собой в связи многие-ко-многим. Для разрешения связи многие-ко-многим необходимо создать новую сущность.
Рис. 39. Окно Triggers
Если атрибут мигрирует в качестве внешнего ключа более, чем на один уровень, то на первом уровне отображается полное имя внешнего ключа (имя роли + базовое имя атрибута), на втором и более – только имя роли.
Правила ссылочной целостности (Referential Integrity (RI)) – логические конструкции, которые выражают бизнес-правила использования данных и представляют собой правила вставки, замены и удаления. При генерации схемы БД на основе опций логической модели, задаваемых в закладке RI Actions, будут сгенерированы правила декларативной ссылочной целостности, которые должны быть предписаны для каждой связи, и триггеры, обеспечивающие ссылочную целостность. Триггеры представляют собой программы, выполняемые всякий раз при выполнении команд вставки, замены или удаления (INSERT, UPDATE или DELETE).
Рис. 40. Задание имен связей между сущностями Товар иЗаказ
Правила удаления управляют тем, что будет происходить в БД при удалении строки. Аналогично правила вставки и обновления управляют тем, что будет происходить с БД, если строки изменяются или добавляются.
Erwin автоматически присваивает каждой связи значение ссылочной целостности, устанавливаемой по умолчанию, прежде чем добавить ее в модель. Режимы RI, присваиваемые Erwin по умолчанию, могут быть изменены в окне Triggers, которое вызывается с помощью меню Database/RI Triggers/Table Triggers… (рис. 39).
14.4. В окне Reletionship (рис. 37) в разделе Parent-to-Child введите Входит, а в разделе Child-to-Parent – Включает (рис. 40).
14.5. Аналогично для задания имени связи между сущностями Клиент и Заказ сделайте двойной щелчок мышью по связи R/2 (рис. 36) и в появившемся окне Reletionship (рис. 37) в разделе Parent-to-Child введите Делает (рис. 41).
Рис. 41. Задание имен связей между сущностями Клиент иЗаказ
14.5. В результате выполнения пунктов 14.1-14.5 модель примет вид, показанный на рис. 42.
Замечание: В нашей модели, представленной на рис 41, символы мощности связи у дочерних сущностей отсутствуют, так как выбран тип мощности Zero, One or More .
Рис. 42. Вид модели с указанием связей между сущностями