Установление связей между сущностями. Логическая и физическая модели в erwin data modeler Задание списка допустимых значений

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

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

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

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

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

мы воспользуемся уже известным вам отображением реляционной модели в модель " сущность-связь " и в 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, просмотрите сгенерированный текст.

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

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

Создание современных информационных систем представляет собой сложнейшую задачу, решение которой требует применения специальных методик и инструментов. Неудивительно, что в последнее время среди системных аналитиков и разработчиков значительно вырос интерес к CASE (Computer-Aided Software/System Engineering) - технологиям и инструментальным CASE-средствам, позволяющим максимально систематизировать и автоматизировать все этапы разработки программного обеспечения.

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

Книга написана на основе личного опыта автора, полученного при разработке информационных систем, чтении лекций и проведении практических занятий по CASE-технологиям и CASE-средствам в Учебном центре компании "Интерфейс Ltd." Она адресована специалистам в области информационных технологий: системным аналитикам, руководителям проектов, разработчикам - и может быть также полезна для студентов и аспирантов, изучающих основы системного анализа и проектирования информационных систем.

Книга:

Связь является логическим соотношением между сущностями. Каждая связь должна именоваться глаголом или глагольной фразой (Relationship Verb Phrases) (рис. 2.20). Имя связи выражает некоторое ограничение или бизнес-правило и облегчает чтение диаграммы, например:

Каждый КЛИЕНТ <размещает> ЗАКАЗы;

Каждый ЗАКАЗ <выполняется> СОТРУДНИКом.

Рис. 2.20. Имя связи - Relationship Verb Phrases

Связь показывает, какие именно заказы разместил клиент и какой именно сотрудник выполняет заказ. По умолчанию имя связи на диаграмме не показывается. Для отображения имени следует в контекстном меню, которое появляется, если щелкнуть левой кнопкой мыши по любому месту диаграммы, не занятому объектами модели, выбрать пункт Display Options/Relationship и затем включить опцию Verb Phrase.

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

В IDEF1X различают зависимые и независимые сущности. Тип сущности определяется ее связью с другими сущностями. Идентифицирующая связь устанавливается между независимой (родительский конец связи) и зависимой (дочерний конец связи) сущностями. Когда рисуется идентифицирующая связь, ERwin автоматически преобразует дочернюю сущность в зависимую. Зависимая сущность изображается прямоугольником со скругленными углами (сущность Заказ на рис. 2.21). Экземпляр зависимой сущности определяется только через отношение к родительской сущности, т. е. в структуре на рис. 2.21 информация о заказе не может быть внесена и не имеет смысла без информации о клиенте, который его размещает. При установлении идентифицирующей связи атрибуты первичного ключа родительской сущности автоматически переносятся в состав первичного ключа дочерней сущности. Эта операция дополнения атрибутов дочерней сущности при создании связи называется миграцией атрибутов. В дочерней сущности новые атрибуты помечаются как внешний ключ - (FK).

Рис. 2.21. Идентифицирующая связь между независимой и зависимой таблицей

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

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

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

Экземпляр сущности Сотрудник может существовать безотносительно к какому-либо экземпляру сущности Отдел, т. е. сотрудник может работать в организации, не числясь в каком-либо отделе.

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

Для создания новой связи следует:

установить курсор на нужной кнопке в палитре инструментов (идентифицирующая или неидентифицирующая связь) и нажать левую кнопку мыши (рис. 2.2);

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

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

В палитре инструментов кнопка

Соответствует идентифицирующей связи, кнопка

Связи многие-ко-многим и кнопка

Соответствуют неидентифицирующей связи.

Для редактирования свойств связи следует "кликнуть" правой кнопкой мыши по связи и выбрать на контекстном меню пункт Relationship Editor.

В закладке General появившегося диалога можно задать мощность, имя и тип связи (рис. 2.23).

Мощность связи (Cardinality) - служит для обозначения отношения числа экземпляров родительской сущности к числу экземпляров дочерней.

Различают четыре типа мощности (рис. 2.24):

общий случай, когда одному экземпляру родительской сущности соответствуют 0, 1 или много экземпляров дочерней сущности не помечается каким-либо символом;

символом Р помечается случай, когда одному экземпляру родительской сущности соответствуют 1 или много экземпляров дочерней сущности (исключено нулевое значение);

символом Z помечается случай, когда одному экземпляру родительской сущности соответствуют 0 или 1 экземпляр дочерней сущности (исключены множественные значения);

цифрой помечается случай точного соответствия, когда одному экземпляру родительской сущности соответствует заранее заданное число экземпляров дочерней сущности.

Рис. 2.23. Диалог Relationship Editor

По умолчанию символ, обозначающий мощность связи, не показывается на диаграмме. Для отображения имени следует в контекстном меню, которое появляется, если щелкнуть левой кнопкой мыши по любому месту диаграммы, не занятому объектами модели, выбрать пункт Display Options/Relationship и затем включить опцию Cardinality.

Имя связи (Verb Phrase) - фраза, характеризующая отношение между родительской и дочерней сущностями. Для связи один-ко-многим идентифицирующей или неидентифицирующей достаточно указать имя, характеризующее отношение от родительской к дочерней сущности (Parent-to-Child). Для связи многие-ко-многим следует указывать имена как Parent-to-Child так и Child-to-Parent.

Рис. 2.24. Обозначения мощности

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

Рис. 2.25. Закладка Rolename/RI Actions диалога Relationship Editor

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

В закладке Rolename/RI Actions можно задать имя роли и правила ссылочной целостности.

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

Рис. 2.26. Имена ролей внешних ключей

В примере, приведенном на рис. 2.26, в сущности Сотрудник внешний ключ Номер отдела имеет функциональное имя "Где работает", которое показывает, какую роль играет этот атрибут в сущности. По умолчанию в списке атрибутов показывается только имя роли. Для отображения полного имени атрибута (как функционального имени, так и имени роли) следует в контекстном меню, которое появляется, если щелкнуть левой кнопкой мыши по любому месту диаграммы, не занятому объектами модели, выбрать пункт Display Options/Entities и затем включить опцию Rolename/Attribute (рис. 2.25). Полное имя показывается как функциональное имя и базовое имя, разделенные точкой (см. рис. 2.26).

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

Рис. 2.27. Случай обязательности имен ролей

Другим примером обязательности присвоения имен ролей являются рекурсивные связи (иногда их называют "рыболовный крючок" - fish hook), когда одна и та же сущность является и родительской и дочерней одновременно. При задании рекурсивной связи атрибут должен мигрировать в качестве внешнего ключа в состав неключевых атрибутов той же сущности. Атрибут не может появиться дважды в одной сущности под одним именем, поэтому обязательно должен получить имя роли. На рис. 2.26 сущность Сотрудник содержит атрибут первичного ключа Табельный номер. Информация о руководителе сотрудника содержится в той же сущности, поскольку руководитель работает в той же организации. Чтобы сослаться на руководителя сотрудника следует создать рекурсивную связь (на рис. 2.26 связь руководит/подчиняется) и присвоить имя роли ("Руководитель"). Заметим, что рекурсивная связь может быть только неидентифицирующей. В противном случае внешний ключ должен был бы войти в состав первичного ключа и получить при генерации схемы признак NOT NULL. Это сделало бы невозможным построение иерархии - у дерева подчиненности должен быть корень - сотрудник, который никому не подчиняется в рамках данной организации.

Связь руководит/подчиняется на рис. 2.26 позволяет хранить древовидную иерархию подчиненности сотрудников. Такой вид рекурсивной связи называется иерархической рекурсией (hierarchical recursion) и задает связь, когда руководитель (экземпляр родительской сущности) может иметь множество подчиненных (экземпляров дочерней сущности), но подчиненный имеет только одного руководителя (рис. 2.28).

Иерархическая рекурсия Сетевая рекурсия


Рис. 2.28. Подчиненность экземпляров сущности в иерархической и сетевой рекурсии

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

Рис. 2.29. Пример реализации сетевой рекурсии

На рис. 2.29 рассмотрен пример реализации сетевой рекурсии. Структура моделирует родственные отношения между членами семьи любой сложности. Атрибут Тип отношения может принимать значения "отец-сын", "мать-дочь", "дед-внук", "свекровь-невестка", "тесть-зять" и т. д. Поскольку родственное отношение связывает всегда двух людей, от сущности Родственник к. сущности Родственное отношение установлены две идентифицирующие связи с именами ролей "Старший" и "Младший". Каждый член семьи может быть в родственных отношениях с любым другим членом семьи, более того, одну и ту же пару родственников могут связывать разные типы родственных отношений.

Если атрибут мигрирует в качестве внешнего ключа более чем на один уровень, то на первом уровне отображается полное имя внешнего ключа (имя роли + базовое имя атрибута), на втором и более - только имя роли. На рис. 2.30 изображена структура данных, которая содержит сущность Команда, сущность Игрок, в которой хранится информация об игроках каждой команды, и сущность Гол, содержащая информацию и голах, которые забивает каждый игрок. Атрибут внешнего ключа Номер команды сущности Игрок имеет имя роли "В какой команде играет".

Рис. 2.30. Миграция имен ролей

На следующем уровне, в сущности Гол, отображается только имя роли соответствующего атрибута внешнего ключа (В какой команде играет).

Правила ссылочной целостности (referential integrity, RI) - логические конструкции, которые выражают бизнес-правила использования данных и представляют собой правила вставки, замены и удаления. При генерации схемы БД на основе опций логической модели, задаваемых в закладке Rolename/RI Actions, будут сгенерированы правила декларативной ссылочной целостности, которые должны быть предписаны для каждой связи, и триггеры, обеспечивающие ссылочную целостность. Триггеры представляют собой программы, выполняемые всякий раз при выполнении команд вставки, замены или удаления (INSERT, UPDATE или DELETE). На рис. 2.30 существует идентифицирующая связь между сущностями Команда и Игрок. Что будет, если удалить команду? Экземпляр сущности Игрок не может существовать без команды (атрибут первичного ключа В какой команде играет. Номер команды не может принимать значение NULL), следовательно, нужно либо запретить удаление команды, пока в ней числится хотя бы один игрок (для удаления команды сначала нужно удалить всех игроков), либо сразу удалять вместе с командой всех ее игроков. Такие правила удаления называются "ограничение" и "каскад" (Parent RESTRICT и Parent CASCADE, см. рис. 2.25). Заметим, что сущности Игрок и Гол, в свою очередь, тоже связаны идентифицирующей связью и в случае удаления каскадом команды будут удалены все игроки команды и все голы, которые они забивали. Выполнение команды на удаление одной строки реально может привести к удалению тысячи строк в БД, поэтому использовать правило удаления каскадом следует с осторожностью. В том случае, если установлено правило ограничения удаления, при попытке выполнить удаление команды, в которой есть хотя бы один игрок, сервер реляционной СУБД возвратит ошибку.

На рис. 2.26 установлена необязательная неидентифицирующая связь между сущностями Отдел и Сотрудник. Экземпляр сущности Сотрудник может существовать без ссылки на отдел (атрибут внешнего ключа Где работает. Номер отдела может принимать значение NULL). В этом случае возможно установление правила установки в нуль - SET NULL. При удалении отдела атрибут внешнего ключа сущности Сотрудник - Где работает. Номер отдела примет значение NULL. Это означает, что при удалении отдела сотрудник остается работать в организации не будучи приписан к какому-либо отделу и информация о нем сохраняется.

Возможна установка еще двух правил удаления (если таковые поддерживаются СУБД):

SET DEFAULT - при удалении атрибуту внешнего ключа присваивается значение по умолчанию. Например, при удалении команды игроки могут быть переведены в другую команду.

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

Правила удаления управляют тем, что будет происходить в БД при удалении строки. Аналогично правила вставки и обновления управляют тем, что будет происходить с БД, если строки изменяются или добавляются. Например, можно установить правило, которое разрешает вносить новую команду только в том случае, когда в нее зачислен хотя бы один игрок. Желаемое поведение может быть достигнуто следующими действиями:

Задать мощность связи между сущностями Команда и Игрок, равную "One or more" - 1 или более (тип Р). Предполагается, что установлена идентифицирующая связь.

Присвоить действие RI-триггера "Parent Insert-CASCADE" для того, чтобы при создании новой строки в таблице Команда автоматически создавалась хотя бы одна строка в дочерней таблице Игрок.

Присвоить связи действие RI-триггера "Parent Delete-CASCADE" для того, чтобы при удалении строки из таблицы Команда соответствующая строка или строки из таблицы Игрок тоже удалялись.

ERwin автоматически присваивает каждой связи значение ссылочной целостности, устанавливаемой по умолчанию, прежде чем добавить ее в диаграмму. Режимы RI, присваиваемые ERwin по умолчанию (приведены в табл. 2.4), могут быть изменены в редакторе Referential Integrity Default, который вызывается, если щелкнуть по кнопке RI Defaults диалога Target Server (меню Server/Target Server).

Таблица 2.4. Значения RI, присваиваемые в ERwin no умолчанию, а также возможные оежимы для каждого типа связи

Идентифицирующая связь Неидентифицирующая связь (Nulls Allowed) Неидентифицирующая связь (No Nulls) Категориальная связь
Child Delete Возможные режимы RESTRICT, CASCADE, NONE RESTRICT, CASCADE, NONE, SET NULL, SET DEFAULT RESTRICT, CASCADE,
NONE
Child Delete Режимы по умолчанию NONE NONE NONE NONE
Child Insert Возможные режимы RESTRICT, CASCADE, RESTRICT, CASCADE, NONE, SET DEFAULT RESTRICT, CASCADE,
NONE NONE
Child Insert Режимы по умолчанию RESTRICT SET NULL RESTRICT RESTRICT
Child Update Возможные режимы RESTRICT, CASCADE, NONE RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT RESTRICT, CASCADE, NONE, SET DEFAULT RESTRICT, CASCADE, NONE
Child Update Режимы по умолчанию RESTRICT SET NULL RESTRICT RESTRICT
Parent Delete Возможные режимы RESTRICT, CASCADE, NONE RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT RESTRICT, CASCADE, NONE, SET DEFAULT RESTRICT, CASCADE,
NONE
Parent Delete Режимы по умолчанию RESTRICT SET NULL RESTRICT CASCADE
Parent Insert Возможные режимы RESTRICT, CASCADE, NONE RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT RESTRICT, CASCADE, NONE, SET DEFAULT RESTRICT, CASCADE, NONE
Parent Insert Режимы по умолчанию NONE NONE NONE NONE
Parent Update Возможные режимы RESTRICT, CASCADE, NONE RESTRICT, CASCADE, NONE, SET NULL,SET DEFAULT RESTRICT, CASCADE, NONE, SET DEFAULT RESTRICT, CASCADE, NONE
Parent Update Режимы по умолчанию RESTRICT SET NULL RESTRICT CASCADE

Связь многие-ко-многим возможна только на уровне логической модели данных. На рис. 2.31 вверху показан пример связи многие-ко-многим. Врач может принимать много пациентов, пациент может лечиться у нескольких врачей. Такая связь обозначается сплошной линией с двумя точками на концах.

1. Учебные вопросы

  1. Разработка реляционной модели данных в ERwin .
  2. Нормализация физической модели данных в ERwin .

2. План занятия

  1. Контроль знаний путем тестирования (тест ИСЭ005).
  2. Импорт сущностей в ERwin.
  3. Разработка логической и физической моделей данных в ERwin с использованием методологии IDEF1Х.
  4. Нормализация физической модели данных в ERwin.
  1. Выполнить импорт сущностей в ER win, используя файл Данные _ИС_Имя. bpх, и на основании полученного множества сущностей разработать логическую модель данных.

Замечание: Если имена сущностей и атрибутов были созданы на кириллице (по-русски), следует их переписать латинскими символами.

  1. Создать логическую и физическую модели данных, используя инструменты ERwin.

  2. в своей папке ИСЭ .
  3. Нормализацию физической модели следует проводить путем разрешения связей МНОГИЕ-КО-МНОГИМ с помощью кнопки Many to Many Transform панели инструментов ER win Transform Toolbar.
  4. Результаты работы сохранить в файле
    Модель_данных_ИС_Имя_IDEF1Х.er1 в своей папке ИСЭ .

ПРИМЕР логической модели, а также нормализованной физической модели данных, выполненной в IDEF1X-технологии приведен в .

4. Технологический процесс выполнения заданий

4.1. Технологический процесс создания моделей данных

4.1.1. Методология создания моделей (методология IDEF1X)

Методология IDEF1X используется CASE-средством ERwin для построения логической и физической моделей данных информационной системы.

ERwin имеет простой и понятный пользовательский интерфейс для построения логической и физической моделей данных, обрабатываемых системой. В логической модели допустимо создавать связи МНОГИЕ-КО-МНОГИМ между сущностями, причем имя атрибута (Attribute Name ) будет именем атрибута в логической модели, а имя столбца (Column Name ), если оно задано, будет именем атрибута в физической модели.

В любой из этих моделей можно автоматически преобразовать связь МНОГИЕ-КО-МНОГИМ к связи ОДИН-КО-МНОГИМ.

В результате будет создана подчиненная таблица, развязывающая связь МНОГИЕ-КО-МНОГИМ. Эта таблица будет содержать внедренный составной ключ (FK) с внедренными из главных таблиц атрибутами и соответствующими им типами данных. Если нужно изменить тип данных, это следует делать вручную.

Процесс создания модели предполагает следующие этапы:

  1. Создание новой модели можно производить из окна Computer Associates ERwin или нажать кнопку создания модели. В обоих случаях на экран будет выведено диалоговое окно Create Model – Select Template (рис. 5.1).
  1. В окне Create Model - Select Template следует выбрать опцию, определяющую возможности создавать модели данных определенного типа: Logical (можно создавать только Логическую модель ), Physical (можно создавать только Физическую модель ) или Logical/Physical (можно параллельно создавать обе модели: и Логическую , и Физическую ). Чтобы иметь больше возможностей, целесообразно выбрать последний вариант – Logical/Physical .
  2. В группе Target Database из списка, предложенного в поле Database , выбрать систему управления базами данных (СУБД) – SQL Server , а в поле Version нужную версию – 2000 .
  3. В появившемся окне < Main Subject Area > / Display] выбрать из списка тип создаваемой модели: Logical или Physical (рис. 5.2).

В панели инструментов ERwin Toolbox содержатся кнопки, позволяющие добавлять в модель данных и редактировать ее отдельные фрагменты:

Select (редактирование выбранного объекта модели),

Entity (добавление сущности),

Many - to - many Relationship (связь Многие-ко-Многим),

Identifying Relationship (идентифицирующая связь),

Non-identifying Relationship (неидентифицирующая связь).

4.1.2. Технологический процесс создания логической модели данных

В процессе создания модели сущности могут быть внедрены путем импорта из словаря сущностей, разработанного в BPwin, или путем создания с помощью кнопки Entity на панели инструментов.

Импорт сущностей в ERwin

Замечания

  • Экспорт и импорт сущностей можно производить только один раз.
  • После проведения импорта сущностей из BPwin флажки Exchange with ERwin и кнопки Update и Delete в диалоговом окне Entity and Attribute Dictionary Editor становятся тусклыми. Это происходит потому, что нельзя изменять сущности и атрибуты, которые BPwin использует совместно c ERwin.

  1. Создание новых сущностей.
    • Нажать кнопку добавления сущностей Entity и щелкнуть мышью в пределах окна модели.
    • Вписать имя сущности и нажать Enter, после чего вписать имя атрибута сущности.
    • Для выбора нужного шрифта выполнить п.п. 1.9–1.12.
  2. Добавление новых атрибутов.
    • В контекстном меню сущности выбрать команду Attributes … и в появившемся окне (рис. 5.4) нажать кнопку New.
    • В окне New Attributes (рис. 5.6) вписать имя атрибута в поле Attribute Name .
    • Установить тип данных каждого атрибута для каждой сущности: Текстовый (String), Числовой (Number), Дата/время (Datetime) или поле МЕМО (B inary L arge Ob ject, Blob) (рис. 5.5 или рис. 5.6) .
    • Определить ключевые атрибуты, установив флажок Primary Key в окне Attributes (рис. 5.5) после выделения нужного атрибута в поле Attribute.

Установка связей между сущностями

  1. Установка связи МНОГИЕ-КО-МНОГИМ:
    • В панели инструментов Erwin Toolbox нажать кнопку Many-to-many Relationship .
    • Последовательно щелкнуть левой клавишей мыши на именах сущностей, между которыми требуется создать связь (рис. 5.7).

  1. Установка идентифицирующей связи ОДИН-КО-МНОГИМ:
    • В панели инструментов Erwin Toolbox нажать кнопку Identifying Relationship.
    • ключевого ключевого атрибута подчиненной сущности (FK) , находящейся на стороне МНОГО (рис. 5.8).
    • В подчиненной сущности формируется составной ключ.

  1. Установка неидентифицирующей связи ОДИН-КО-МНОГИМ:
    • В панели инструментов Erwin Toolbox нажать кнопку Non-identifying Relationship .
    • Последовательно щелкнуть левой клавишей мыши на именах сущностей, между которыми требуется создать связь. Результатом создания связи будет внедрение ключевого атрибута главной сущности в качестве неключевого атрибута подчиненной сущности (FK) , находящейся на стороне МНОГО (рис. 5.9).

4.1.3. Технологический процесс создания физической модели данных

Результатом выполнения команды будет автоматически созданная физическая модель, в которой вместо сущностей будут представлены таблицы, а вместо атрибутов сущностей – поля таблиц.

  1. В физической модели проверить типы данных и установленные между таблицами связи.

4.2. Технологический процесс нормализации физической модели данных (методология IDEF1X)

  1. В окне Computer Associates ERwin – }