Рис. 2. Сущность с заполненными атрибутами.
Экземпляры независимой сущности могут быть уникально идентифицированы без определения ее связей с другими сущностями; зависимая сущность, наоборот, не может быть уникально идентифицирована без определения ее связей с другими сущностями. Зависимая сущность отображается в ERwin прямоугольником с закругленными углами (см. рис. 3).
Рис. 3. Зависимая сущность с заполненными атрибутами.
Зависимая сущность может наследовать один и тот же внешний ключ от более чем одной родительской сущности, или от одной и той же родительской сущности через использование несколько связей. Если не введены различные роли для такого множественного наследования, ERwin считает, что в зависимой сущности атрибуты внешнего ключа появляются только один раз.
В зависимости от того, все ли возможные сущности-подтипы включены в модель, категорийная связь является полной или неполной. Например, если супертип может содержать данные об уволенных сотрудниках, то эта связь - неполной категоризации, так как для него не существует записи в сущностях - подтипах. В ERwin полная категория изображается окружностью с двумя подчеркиваниями, а неполная - окружностью с одним подчеркиванием.
Атрибут - поименованная характеристика сущности. Его наименование должно быть уникальным для конкретного типа сущности, но может быть одинаковым для различного типа сущностей (например, <цвет> может быть определен для многих сущностей: <собака>,
<автомобиль>, <дым> и т. д.). Атрибуты используются для определения того, какая информация должна быть собрана о сущности. Примерами атрибутов для сущности <автомобиль> являются <тип>, <марка>, <номерной знак>, <цвет> и т. д. Здесь также существует различие между типом и экземпляром. Тип атрибута <цвет> имеет много экземпляров или значений: <красный>, <синий>, <банановый>, <белая ночь> и т. д., однако, каждому экземпляру сущности присваивается только одно значение атрибута. Абсолютное различие между типами сущностей и атрибутами отсутствует. Атрибут является таковым только в связи с типом сущности. В другом контексте атрибут может выступать как самостоятельная сущность. Например, для автомобильного завода <цвет> - это только атрибут продукта производства, а для лакокрасочной фабрики <цвет> - тип сущности.
Атрибут выражает свойство объекта, характеризующее его экземпляр (определенное свойство объекта. С точки зрения БД (физическая модель) сущности соответствует таблица, экземпляру сущности – строка в таблице, а атрибуту – колонка таблицы. Горизонтальная линия прямоугольника разделяет атрибуты сущности на два набора: атрибуты, составляющие первичный ключ (в верхней части) и прочие, не входящие в первичный ключ (в нижней части).
Первичный ключ - это атрибут или набор атрибутов, уникально идентифицирующий экземпляр сущности. Если несколько наборов атрибутов могут уникально идентифицировать сущность, то выбор одного из них осуществляется разработчиком на основании анализа предметной области. Для каждого первичного ключа ERwin создает при генерации структуры БД уникальный индекс.
Ключ - минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать сущность по оставшимся.
Унификация - это объединение двух или более групп атрибутов внешних ключей в один внешний ключ (группу атрибутов), в предположении, что значения одноименных атрибутов в дочерней сущности всегда одинаковы. Рассмотрим пример: сущность "сотрудник" имеет первичный ключ "код сотрудника" и связан идентифицирующей связью с сущностями "супруга" и "дети". При этом происходит миграция первичного ключа в зависимые сущности. В свою очередь, сущность "супруга" связана не идентифицирующей связью с сущностью "дети". Имеются два пути миграции ключа, однако в сущности "дети" атрибут "код сотрудника" появляется один раз в качестве элемента первичного ключа. Существуют случаи, когда унификация атрибутов дает неверный с точки зрения предметной области результат. Для отмены унификации для атрибутов вводятся имена ролей.
Связь - ассоциирование двух или более сущностей. Если бы назначением базы данных было только хранение отдельных, не связанных между собой данных, то ее структура могла бы быть очень простой. Однако одно из основных требований к организации базы данных - это обеспечение возможности отыскания одних сущностей по значениям других, для чего необходимо установить между ними определенные связи. А так как в реальных базах данных нередко содержатся сотни или даже тысячи сущностей, то теоретически между ними может быть установлено более миллиона связей. Наличие такого множества связей и определяет сложность инфологических моделей.
Если между некоторыми сущностями существует связь, то факты из одной сущности ссылаются или некоторым образом связаны с фактами из другой сущности. Связь - это функциональная зависимость между сущностями. Поддержание непротиворечивости функциональных зависимостей между сущностями называется ссылочной целостностью. Поскольку связи содержатся "внутри" реляционной модели, реализация ссылочной целостности может выполняться как приложением, так и самой СУБД (с помощью механизмов декларативной ссылочной целостности, триггеров). Связь это понятие логического уровня, которому соответствует внешний ключ на физическом уровне. Связь называется идентифицирующей, если экземпляр дочерней сущности идентифицируется через ее связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в первичный ключ дочерней сущности. Дочерняя сущность при идентифицирующей связи всегда является зависимой. Связь называется не идентифицирующей, если экземпляр дочерней сущности идентифицируется иначе, чем через связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в состав не ключевых атрибутов дочерней сущности.
Стержневая сущность (стержень) - это независимая сущность, существующая как отдельное, независимое от других понятие.
Ассоциативная сущность (ассоциация) - это связь вида «многие-ко-многим» («-ко-многим» и т. д.) между двумя или более сущностями или экземплярами сущности. Ассоциации рассматриваются как полноправные сущности: они могут участвовать в других ассоциациях и обозначениях точно так же, как стержневые сущности; могут обладать свойствами, т.е. иметь не только набор ключевых атрибутов, необходимых для указания связей, но и любое число других атрибутов, характеризующих связь.
Характеристическая сущность (характеристика) - это связь вида «многие-к-одной» или «одна-к-одной»между двумя сущностями (частный случай ассоциации). Единственная цель характеристики в рамках рассматриваемой предметной области состоит в описании или уточнении некоторой другой сущности. Необходимость в них возникает в связи с тем, что сущности реального мира имеют иногда многозначные свойства. Книга может иметь несколько характеристик переиздания (исправленное, дополненное, переработанное, ... и т. д.).
Обозначающая сущность или обозначение - это связь вида «многие-к- одной» или «одна-к-одной» между двумя сущностями и отличается от характеристики тем, что не зависит от обозначаемой сущности.
Каждая связь может иметь один из следующих типов связи :
• связь типа «один-к-одному» означает, что один экземпляр первой сущности (левой) связан с одним экземпляром второй сущности (правой). Связь «один-к-одному» чаще всего свидетельствует о том, что на самом деле мы имеем всего одну сущность, неправильно разделенную на две;
• связь типа «один-ко-многим» означает, что один экземпляр первой сущности (левой) связан с несколькими экземплярами второй сущности (правой). Это наиболее часто используемый тип связи. Левая сущность (со стороны «один») называется родительской, правая (со стороны «много») - дочерней;
• связь типа «много-ко-многим» означает, что каждый экземпляр первой сущности может быть связан с несколькими экземплярами второй сущности, и каждый экземпляр второй сущности может быть связан с несколькими экземплярами первой сущности. Тип связи «много-ко- многим» является временным типом связи, допустимым на ранних этапах разработки модели. В дальнейшем этот тип связи должен быть заменен двумя связями типа «один-ко-многим» путем создания промежуточной сущности.
Каждая связь может иметь одну из двух модальностей связи:
• модальность «может» означает, что экземпляр одной сущности может быть связан с одним или несколькими экземплярами другой сущности, а, может быть, и не связан ни с одним экземпляром;
• модальность «должен» означает, что экземпляр одной сущности обязан быть связан не менее чем с одним экземпляром другой сущности.
Связь может иметь разную модальность с разных концов. Описанный графический синтаксис позволяет однозначно читать диаграммы, пользуясь следующей схемой построения фраз:
<Каждый экземпляр сущности 1> <модальность связи> <наименование связи> <тип связи> <экземпляр сущности 2>.
Каждая связь может быть прочитана как слева направо, так и справа налево. Например, для сотрудников некоторой фирмы: слева направо - «каждый сотрудник может иметь несколько детей», а справа налево - «Каждый ребенок обязан принадлежать ровно одному сотруднику».
2. Создание логической модели.
Для добавления сущности следует нажать кнопку , а затем – щелкнуть «мышью» по свободному месту диаграммы. После этого по созданному элементу следует щелкнуть два раза левой кнопкой «мыши». В открывшемся диалоговом окне Attributes (см. рис. 4) следует:
- при нажатии кнопки ввести название сущности;
- при нажатии кнопки New ввести название и тип добавляемого атрибута (список форматов возможных типов представлен в табл. 1), а при необходимости установить ему ключевой признак вводом флажка Primary Key.
Рис. 4. Окно для заполнения атрибутов сущности.
Таблица 1.
Расшифровка назначения типов атрибутов
Тип | Формат |
Unknown | Не определен |
Blob | Счетчик |
Datetime | Дата или время |
Number | Числовой |
String | Текстовый |
Для каждого атрибута имеется возможность ввода дополнительных характеристик, расположенных на вкладках окна Attributes:
- General (основные характеристики атрибута);
- Datatype (выбранный формат атрибута);
- Definition (пояснения);
- Note (комментарий для данного атрибута);
- UDP (свойства атрибутов сущности, добавляемых пользователем);
- Key Group (отношение выбранного атрибута к ключевым признакам);
- History (история возникновения атрибута).
Для связывания таблиц следует, нажав кнопку или
(идентифицирующая связь) или
(не идентифицирующая связь), щелкнуть левой кнопкой «мыши» на одной таблице, а затем щелкнуть «мышью» на другой таблице, с которой требуется выполнить связь.
Пример логической модели данных представлен на рис. 5.
Для компактного расположения модели на листе бумаги при печати следует вызвать в меню File режим Print, а в открывшемся окне Print (см. рис. 6) нажать кнопку Fit model.
Рис. 5. Пример логической модели данных
Рис. 6. Окно для настройки параметров печати.
Контрольные вопросы.
1. Диаграммы сущность-связь.
2. Создание логической модели.