- •Часть II
- •Содержание
- •Введение
- •Функциональные возможности AllFusion eRwin dm 7.2
- •Инструментальная среда AllFusion eRwin dm Интерфейс AllFusion eRwin dm 7.2
- •Уровни отображения модели (Display Level)
- •Подмодели (Subject Area).
- •Хранимые отображения (Stored Display)
- •Навигатор модели (Model Explorer)
- •Журнал изменений модели (Action Log)
- •Русификация eRwin dm
- •Поддерживаемые методологии: idef1x, ie, dm Краткая характеристика методологий
- •Особенности методологий idef1x и ie
- •Панель инструментов для добавления объектов в модель данных
- •Разработка и поддержка баз данных с eRwin dm Начало создания модели в AllFusion eRwin dm
- •Уровни модели данных
- •Создание логического уровня модели
- •Сущности
- •Атрибуты
- •Связи идентифицирующие и неидентифицирующие
- •Связь "многие ко многим"
- •Типы зависимых сущностей
- •Иерархия категорий (иерархия наследования).
- •Нормализация и денормализация
- •Создание физического уровня модели
- •Выбор сервера
- •Колонки
- •Представления (View)
- •Материализованные представления (materialized view)
- •Правила валидации и значения по умолчанию
- •Индексы
- •Задание объектов физической памяти
- •Триггеры и хранимые процедуры
- •Скрипты «до и после генерации»
- •Прямая генерация
- •Обратная генерация
- •Сравнение и синхронизация с Complete Compare
- •Уровни проектирования
- •Трансформация
- •Документирование моделей данных в eRwin dm
- •Создание отчетов с помощью Report Template Builder
- •Создание отчетов с помощью Data Browser
- •Практическая работа с eRwin Data Modeler
- •1. Создание концептуальной модели данных
- •2. Порождение новой модели из концептуальной
- •3. Проработка модели на уровне первичных ключей
- •4. Автотрансформация связей «многие ко многим»
- •5. Доработка модели до полно атрибутивной модели
- •6. Проработка физического уровня модели
- •7. Генерация каталога базы данных из модели данных
- •8. Обратная генерация каталога базы данных в модель
- •9. Сравнение и синхронизация каталога базы данных и модели
- •10. Документирование модели данных
- •Опись созданных файлов
- •Задание для самостоятельной работы
- •Литература и источники
- •Часть II.
- •101990, Москва, Малый Златоустинский пер.,7
Связь "многие ко многим"
Связь "многие ко многим" может быть создана только на уровне логической модели. На рис. 55 показан пример связи "многие ко многим". Врач может принимать много пациентов, пациент может лечиться у нескольких врачей. Такая связь обозначается сплошной линией с двумя точками на концах
Рис. 55. Пример связи «многие ко многим».
Для внесения связи следует установить курсор на кнопке на панели инструментов ERwin, щелкнуть по одной, затем по другой сущности.
Связь "многие ко многим" должна именоваться двумя фразами - в обе стороны (в примере "лечит/лечится у"). Это облегчает чтение диаграммы. Связь на рис. 55 следует читать так: Врач <лечит> Пациента, Пациент <лечится у> Врача.
На физическом уровне связь "многие ко многим" должна быть преобразована. По умолчанию при переходе к физическому уровню ERwin DM автоматически не преобразует связь "многие ко многим", и на физическом уровне диаграмма выглядит так же, как и на логическом (рис. 55). Однако при генерации схемы такая связь игнорируется.
Для преобразования связи "многие ко многим" необходимо щелкнуть по связи правой кнопкой мыши и выбрать пункт меню Create Association Table или выбрать связь и щелкнуть по инструменту на панели трансформаций ERwin Transform Toolbar (см. табл. 5). (Подробнее операции преобразования будут рассмотрены разделе «Трансформации».) Появляется Мастер трансформаций - Many-To-Many Transform Wizard, состоящий из 4 шагов-диалогов. Для перехода к следующему шагу надо щелкнуть по кнопке Next (Далее). На втором и третьем шаге следует задать имя вновь создаваемой таблицы и имя преобразования. Преобразование связи включает создание новой таблицы и двух новых связей "один ко многим" от старых к новой таблице (рис.56). При этом имя новой таблице присваивается как Имя1_Имя2.
Рис. 56. Пример автотрансформации связи «многие ко многим».
Описанного выше решения проблемы связи «многие ко многим» не всегда оказывается достаточно. В примере таблица Врач_Пациент имеет смысл визита к врачу, поэтому ее следует переименовать согласно бизнес-логике в Посещение. Один и тот же пациент может много раз посещать врача, поэтому для того, чтобы идентифицировать визит, необходимо в состав первичного ключа таблицы Посещение добавить дополнительную колонку, например дату-время посещения (ДатаВремяПосещения, рис. 57).
Следует заметить, что после переименования таблицы на физическом уровне на логическом уровне представление модели не изменится, диаграмма будет выглядеть так, как на рис. 56.
Рис. 57. Пример дополнения физического уровня модели после трансформации связи «многие ко многим».
Типы зависимых сущностей
Как было указано выше, связи определяют, является ли сущность независимой или зависимой. Различают несколько типов зависимых сущностей.
Характеристическая - зависимая дочерняя сущность (рис.58), которая связана только с одной родительской и по смыслу хранит информацию о характеристиках родительской сущности.
Рис. 58. Пример характеристической сущности «Хобби».
Ассоциативная - сущность, связанная с несколькими родительскими сущностями. Такая сущность содержит информацию о связях сущностей. Примером ассоциативной сущности является Посещение на рис. 57.
Именующая - частный случай ассоциативной сущности, не имеющей собственных атрибутов (только атрибуты родительских сущностей, мигрировавших в качестве внешнего ключа). Примером именующей сущности является Врач_Пациент на рис. 56.
Категориальная - дочерняя сущность в иерархии наследования (см. ниже).