Рис.
4 Пример типа сущности с атрибутами
Следует отметить, что при определении атрибута отношения допускается использование имен атрибутов, совпадающих с именами сущностей (это два разных пространства имен, и наличие одинаковых имен у атрибутов и сущностей не вызывает коллизий).
Как отмечалось выше, при определении типа сущности необходимо гарантировать, что каждый экземпляр сущности является отличимым от любого другого экземпляра той же сущности. Поскольку сущность является абстракцией реального или представляемого объекта внешнего мира, это требование нужно иметь в виду уже при выборе кандидата в типы сущности. Например, предположим, что проектируется база данных для поддержки работы книжного склада. На складе могут храниться произвольные части тиража любого издания любой книги. Может ли в этом случае индивидуальная книга являться прообразом типа сущности? Утверждается, что нет, поскольку отсутствует возможность различения книг одного издания. Для книжного склада прообразом типа сущности будет набор одноименных книг одного автора, вышедших в одном издании. Одним из атрибутов этого типа сущности будет число книг в наборе. Но когда книга поступает в библиотеку и ей присваивается уникальный библиотечный номер, она становится разумным прообразом типа сущности.
Но при проектировании базы данных мало того, чтобы проектировщик убедился в правильном выборе типов сущности, гарантирующем различие экземпляров каждого типа сущности. Необходимо сообщить системе автоматизации проектирования БД, каким образом будут различаться эти экземпляры, т. е. сообщить, как конструируются уникальные идентификаторы экземпляров каждого типа сущности. В ER-модели у экземпляра типа сущности не может быть назначаемого пользователем имени или назначаемого системой внешнего уникального идентификатора. Экземпляр типа сущности может идентифицироваться только своими индивидуальными характеристиками, а они представляются значениями атрибутов и экземплярами типов связи, связывающими данный экземпляр типа сущности с экземплярами других типов сущности или этого же типа сущности. Поэтому уникальным идентификатором сущности может быть атрибут, комбинация атрибутов, связь, комбинация связей или комбинация связей и атрибутов, уникально отличающая любой экземпляр сущности от других экземпляров сущности того же типа.
На рис. 5 показан тип сущности КНИГА, пригодный для использования в базе данных книжного склада. При издании любой книги в любом издательстве (кроме пиратских, которыми мы для простоты пренебрежем) ей присваивается уникальный номер – ISBN. Понятно, что значение атрибута isbn будет уникально идентифицировать партию книг на складе. Кроме того, конечно, в качестве уникального идентификатора годится и комбинация атрибутов <автор, название, номер издания, издательство, год издания>.
Рис.
5 Тип сущности, экземпляры которого
идентифицируются атрибутами
На рис. 6 диаграмма включает два связанных типа сущности. У каждого взрослого человека имеется один и только один паспорт (мы снова не берем в расчет особый случай, когда у одного человека имеется несколько паспортов), и каждый паспорт может принадлежать только одному взрослому человеку (некоторые уже готовые паспорта могут быть еще никому не выданы). Тогда связь человека с его паспортом (конец связи ИМЕЕТ) уникально идентифицирует взрослого человека, т. е., грубо говоря, паспорт определяет взрослого человека. Поскольку могут существовать паспорта, еще не выданные какому-либо человеку, эта связь не является уникальным идентификатором сущности ПАСПОРТ.
Рис.
6 Тип сущности, экземпляры которого
идентифицируются связью
На рис. 7 диаграмма включает три связанных типа сущности. Профессора обладают знаниями в нескольких учебных дисциплинах. Преподавание каждой дисциплины доступно нескольким профессорам. Другими словами, между сущностями ПРОФЕССОР и ДИСЦИПЛИНА определена связь «многие ко многим». Каждый профессор может готовить курсы по любой доступной ему дисциплине. Каждой дисциплине может быть посвящено несколько учебных курсов. Но каждый профессор может готовить только один курс по любой доступной ему дисциплине, и каждый курс может быть посвящен только одной дисциплине. Тем самым, каждый экземпляр типа сущности КУРС уникально идентифицируется экземпляром сущности ПРОФЕССОР и экземпляром сущности ДИСЦИПЛИНА, т. е. парой связей с именами концов ГОТОВИТСЯ и ПОСВЯЩЕН на стороне сущности КУРС. Заметим, что сущности ПРОФЕССОР и ДИСЦИПЛИНА связями не идентифицируются.
На рис. 8 приведен пример типа сущности, уникальный идентификатор которого является комбинацией атрибутов и связей. Это несколько уточненный вариант сущности с рекурсивной связью. У каждого человека могут быть дети, и у каждого человека имеется отец. Тогда, если предположить, что близнецам, появившимся на свет одновременно, не дают одинаковых имен, то уникальным идентификатором типа сущности ЧЕЛОВЕК может быть комбинация атрибутов <дата рождения, ФИО> и связь с именем конца РЕБЕНОК.
Рис.
7 Тип сущности, экземпляры которого
идентифицируются комбинацией связей
Рис.
8 Тип сущности, экземпляры которого
идентифицируются комбинацией атрибутов
и связей
2.6 Построение модели.
Разработка ERD включает следующие основные этапы:
1. Идентификация сущностей, их атрибутов, а также первичных и альтернативных ключей
2. Идентификация отношений между сущностями и указание типов отношений
3. Разрешение неспецифических отношений (отношений n*m - "многие ко многим")
Этап 1 является определяющим при построении модели Его исходной информацией служит содержимое хранилищ данных, определяемое входящими и выходящими в/из него потоками данных. Первоначально осуществляется анализ хранилища, включающий равнение содержимого входных и выходных потоков и создание на основе этого сравнения варианта схемы хранилища.
Следующий шаг - упрощение схемы при помощи нормализации.
В первой нормальной форме ER-диаграммы устраняются атрибуты, содержащие множественные значения, т. е. производится выявление неявных сущностей, «замаскированных» под атрибуты.
Во второй нормальной форме устраняются атрибуты, зависящие только от части уникального идентификатора. Эта часть уникального идентификатора определяет отдельную сущность.
В третьей нормальной форме устраняются атрибуты, зависящие от атрибутов, не входящих в уникальный идентификатор. Эти атрибуты являются основой отдельной сущности.
Рис. 9 Алгоритм приведения ненормализованной схемы в 3НФ.
На практике отношения 1НФ и 2НФ имеют тенденцию возникать при попытке описать несколько реальный сущностей в одной схеме (заказ, книга, проект и сотрудник).
Этап 2 служит для выявления и определения отношений между сущностями, а также для идентификации типов отношений. На данном этапе некоторые отношения могут быть неспецифическими (n*m - многие ко многим). Такие отношения потребуют дальнейшей детализации на этапе 3.
Определение отношений включает выявление связей, для этого отношение должно быть проверено в обоих направлениях следующим образом: выбирается экземпляр одной из сущностей и определяется, сколько различных экземпляров второй сущности может быть с ним связано, и наоборот.
Этап 3 предназначен для разрешения неспецифических (многие ко многим) отношений. Для этого каждое неспецифическое отношение преобразуется в два специфических отношения с введением новых (а именно, ассоциативных) сущностей. Например, неспецифическое отношение на рис. 10 указывает, что СТУДЕНТ может изучать много ПРЕДМЕТОВ, а ПРЕДМЕТ может изучаться многими СТУДЕНТАМИ. Однако мы не можем определить, какой СТУДЕНТ изучает какой ПРЕДМЕТ, пока не введем для разрешения этого неспецифического отношения третью (ассоциативную) сущность ИЗУЧЕНИЕ_ПРЕДМЕТА, которая будет содержать уникальные идентификаторы сущности СТУДЕНТ и сущности ПРЕДМЕТ. Каждый экземпляр введенной сущности связан с одним СТУДЕНТОМ и с одним ПРЕДМЕТОМ.
2.7 Построение моделей в ERwin
Возможны две точки зрения на информационную модель и, соответственно, два уровня модели. Первый - логический уровень (точка зрения пользователя) означает прямое отображение фактов из реальной жизни. Например, люди, столы, отделы, собаки и компьютеры являются реальными объектами. Они именуются на естественном языке, с любыми разделителями слов (пробелы, запятые и т.д.). На физическом уровне модели рассматривается использование конкретной СУБД, определяются типы данных (например, целое или вещественное число), индексы для таблиц. ERwin предоставляет возможности создавать и управлять этими двумя различными уровнями представления одной диаграммы (модели), равно как и иметь много вариантов отображения на каждом уровне. Термин "логический уровень" в ERwin соответствует концептуальной модели.
Этапы построения информационной модели:
определение сущностей;
определение зависимостей между сущностями;
задание первичных и альтернативных ключей;
определение атрибутов сущностей;
приведение модели к требуемому уровню нормальной формы;
переход к физическому описанию модели: назначение соответствий имя сущности - имя таблицы, атрибут сущности - атрибут таблицы;
задание триггеров, процедур и ограничений;
генерация базы данных.
Erwin создает визуальное представление (модель данных) для решаемой задачи. Это представление может использоваться для детального анализа, уточнения и распространения документации, необходимой в цикле разработки. Однако ERwin далеко не только инструмент для рисования. ERwin автоматически создает базу данных (таблицы, индексы, хранимые процедуры, триггеры для обеспечения ссылочной целостности и другие объекты, необходимые для управления данными).
2.7.1 Создание сущности.
Для
внесения сущности в модель необходимо
щелкнуть по кнопке сущности на панели
инструментов (Erwin Toolbox)
,
затем - по тому месту на диаграмме, где
необходимо расположить новую сущность.
Щелкнув правой кнопкой мыши по сущности
и выбрав из всплывающего меню пункт
Entity Editor, можно вызвать диалог Entity Editor,
в котором определяются имя, описание и
комментарии сущности.
Каждая сущность
должна быть полностью определена с
помощью текстового описания в закладке
Definition. Эти определения полезны как на
логическом уровне, поскольку позволяют
понять, что это за объект, так и на
физическом уровне, поскольку их можно
экспортировать как часть схемы и
использовать в реальной БД (CREATE COMMENT on
entity_name). Закладки Note, Note2, Note3, UDP (User Defined
Properties - Свойства, определенные
пользователем) служат для внесения
дополнительных комментариев и определений
к сущности. В закладке Icon каждой сущности
можно поставить в соответствие
изображение, которое будет отображаться
в режиме просмотра модели на уровне
иконок и изображение, которое будет
отображаться на всех других уровнях.
Закладка UDP диалога Entity Editor служит
для определения свойств, определяемых
пользователем (User - Defined Properties). При
нажатии на кнопку
этой закладки вызывается диалог User -
Defined Property Editor (также вызывается из меню
Edit/UDPs). В нем необходимо указать вид
объекта, для которого заводится UDP
(диаграмма в целом, сущность, атрибут и
т.д.) и тип данных. Для внесения нового
свойства следует щелкнуть в таблице по
кнопке
и внести имя, тип данных, значение по
умолчанию и определение.
2.7.2 Создание атрибутов.
Для описания атрибутов следует, щелкнув правой кнопкой по сущности, выбрать в появившемся меню пункт Attribute Editor. Появится диалог Attribute Editor. Если щелкнуть по кнопке New, то в появившемся диалоге New Attribute можно указать имя атрибута, имя соответствующей ему в физической модели колонки и домен. Домен атрибута будет использоваться при определении типа колонки на уровне физической модели.
Для
атрибутов первичного ключа в закладке
General диалога Attribute Editor необходимо сделать
пометку в окне выбора Primary Key. Закладки
Definition, Note и UDP несут те же функции, что и
при определении сущности, но на уровне
атрибутов. Для большей наглядности
диаграммы каждый атрибут можно связать
с иконкой. Это можно сделать при помощи
списка выбора Icon в закладке General. Очень
важно дать атрибуту правильное имя.
Атрибуты должны именоваться в единственном
числе и иметь четкое смысловое значение.
Согласно синтаксису IDEF1X, имя атрибута
должно быть уникальным в рамках модели
(а не только в рамках сущности!). По
умолчанию при попытке внесения уже
существующего имени атрибута ERwin
переименовывает его. Например, если
атрибут Комментарий уже существует в
модели, другой атрибут (в другой сущности)
будет назван Комментарий/2, затем
Комментарий/3 и т.д.
При переносе
атрибутов внутри и между сущностями
можно воспользоваться техникой drag&drop,
выбрав кнопку
в палитре инструментов.
2.7.3 Создание связи.
Для
создания новой связи следует выбрать
идентифицирующую или неидентифицирующую
связь в палитре инструментов (ERwin
Toolbox), щелкнуть сначала по родительской,
а затем по дочерней сущности. В палитре
инструментов кнопка
соответствует идентифицирующей связи,
кнопка
связи многие-ко-многим и кнопка
соответствует неидентифицирующей связи
.
Для редактирования свойств связи следует
щелкнуть правой кнопкой мыши по связи
и выбрать на контекстном меню пункт
Relationship Editor.
В закладке General появившегося диалога можно задать мощность, имя и тип связи. Мощность связи (Cardinality) - служит для обозначения отношения числа экземпляров родительской сущности к числу экземпляров дочерней. Различают четыре типа мощности:
общий случай, когда одному экземпляру родительской сущности соответствуют 0, 1 или много экземпляров дочерней сущности, не помечается каким-либо символом;
символом P помечается случай, когда одному экземпляру родительской сущности соответствуют 1 или много экземпляров дочерней сущности (исключено нулевое значение);
символом Z помечается случай, когда одному экземпляру родительской сущности соответствуют 0 или 1 экземпляр дочерней сущности (исключены множественные значения);
цифрой помечается случай, когда одному экземпляру родительской сущности соответствует заранее заданное число экземпляров дочерней сущности.
По умолчанию символ, обозначающий мощность связи, не показывается на диаграмме. Для отображения имени следует в контекстном меню, которое появляется, если щелкнуть правой кнопкой мыши по любому месту диаграммы, не занятому объектами модели, выбрать пункт Display Options/Relationship и затем включить опцию Cardinality.
Тип связи (идентифицирующая/неидентифицирующая). В IDEF1X различают зависимые и независимые сущности. Тип сущности определяется ее связью с другими сущностями. Идентифицирующая связь устанавливается между независимой (родительский конец связи) и зависимой (дочерний конец связи) сущностями. Когда рисуется идентифицирующая связь, ERwin автоматически преобразует дочернюю связь в зависимую. Зависимая сущность изображается прямоугольником со скругленными углами.