
4. Основные понятия er-модели
Одной из наиболее популярных семантических моделей данных на этапе инфологического проектирования является неформальная модель "Сущность-Связь" (Entity-Relationship - ER-модель). Моделирование предметной области базируется на использовании графических диаграмм, включающих небольшое число разнородных компонентов. В связи с наглядностью представления концептуальных схем баз данных (и не только их) ER-модели получили широкое распространение в CASE-системах.
Основными конструктивными понятиями инфологических моделей в терминах ER-модели являются: сущность, экземпляр сущности, связь между сущностями, свойства (атрибуты) сущности, домен и ключ сущности.
Сущность – это различимый класс однотипных объектов предметной области (класс объектов, который мы можем отличить от другого класса объектов), информация о которых должна быть учтена в модели, а затем храниться в базе данных.
Каждая сущность должна иметь наименование. Сущностями, например, могут быть люди, места, самолеты, рейсы, вкус, цвет, студент, накладная и т.д.
Экземпляр сущности – это конкретный представитель данной сущности. Например, представителем сущности «Студент» может быть «Петров И.И.». Экземпляры сущностей должны быть различимы, то есть сущности должны иметь некоторые свойства, уникальные для каждого экземпляра этой сущности.
Таким образом, необходимо различать такие понятия, как класс (тип) сущности и экземпляр сущности. Понятие тип сущности относится к набору однородных личностей, предметов, событий или идей, выступающих как целое. Экземпляр сущности относится к конкретной вещи в наборе. Например, типом сущности может быть ГОРОД, а экземпляром – Москва, Киев и т.д.
Атрибут сущности – это именованная характеристика сущности, являющаяся (определяющая) некоторым свойством сущности и принимающая значения из некоторого множества значений. Его наименование должно быть уникальным для конкретного типа сущности, но может быть одинаковым для различного типа сущностей. Например, ЦВЕТ может быть определен для многих сущностей: СОБАКА, АВТОМОБИЛЬ, ДЫМ и т.д. Атрибуты используются для определения того, какая информация должна быть собрана о сущности. Примерами атрибутов для сущности АВТОМОБИЛЬ являются ТИП, МАРКА, НОМЕРНОЙ ЗНАК, ЦВЕТ и т.д. Здесь также существует различие между типом и экземпляром. Тип атрибута ЦВЕТ имеет много экземпляров или значений: Красный, Синий, Банановый, Белая ночь и т.д., однако каждому экземпляру сущности присваивается только одно значение атрибута.
Домен – это диапазон допустимых значений, которые может принимать атрибут.
Ключ сущности – это не избыточный (минимальный) набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать сущность по оставшимся атрибутам, то есть нарушает его уникальность. Например, для сущности «СОТРУДНИК» ключом является атрибут «Табельный номер» или набор: «Фамилия», «Имя», «Отчество», «Должность». Необходимо отметить, что сущность может иметь несколько различных ключей.
Связь – это некоторая ассоциация между двумя сущностями, представляющая собой абстракцию набора отношений, которые систематически возникают между различными видами предметов в реальном мире. Одна сущность может быть связана с другой сущностью или сама с собой. Связи позволяют по одной сущности находить другие сущности, связанные с ней.
Если бы назначением базы данных было только хранение отдельных, не связанных между собой данных, то ее структура могла бы быть очень простой. Однако одно из основных требований к организации базы данных – это обеспечение возможности отыскания одних сущностей по значениям других, для чего необходимо установить между ними определенные связи. А так как в реальных базах данных нередко содержатся сотни или даже тысячи сущностей, то теоретически между ними может быть установлено более миллиона связей. Наличие такого множества связей и определяет сложность инфологических моделей.
Например, связь между сущностями может выражаться следующей фразой – «каждый студент обязан числиться ровно в одной группе».
При построении инфологических моделей в качестве инструмента моделирования будем использовать язык ER-диаграмм. В данном пособии сущности будем изображать прямоугольниками с наименованиями (Рис. 3.), атрибуты изображать в пределах прямоугольника, определяющего сущность (Рис. 4.), причем ключевые атрибуты будем подчеркивать (Рис. 5.), связи – линией, соединяющие сущности (Рис. 6.).
Рис. 3. Рис. 4.
Рис. 5 Рис. 6.
Каждая связь имеет два конца и одно или два наименования. Наименование обычно выражается в неопределенной глагольной форме: "иметь", "принадлежать" и т.п. Каждое из наименований относится к своему концу связи. Обычно наименования не пишутся ввиду их очевидности.
Каждая связь может иметь один из следующих типов связи:
Рис. 7.
Связь типа один-к-одному (1:1) означает, что один экземпляр первой сущности (левой) связан с одним экземпляром второй сущности (правой). Связь один-к-одному чаще всего свидетельствует о том, что на самом деле мы имеем всего одну сущность, неправильно разделенную на две.
Рис. 8.
На Рис. 8. связь R1 - традиционный брак: каждый муж имеет одну жену и каждая жена имеет одного мужа.
Рис. 9.
Связь один ко многим (1:M) означает, что один экземпляр одной сущности (левой) связан с одним или более экземпляром другой сущности (правой) и каждый экземпляр второй сущности связан только с одним экземпляром первой сущности.
Это наиболее часто используемый тип связи. Левая сущность (со стороны "один") называется родительской, правая (со стороны "много") - дочерней. Характерный пример такой связи приведен на Рис. 10.
Рис. 10.
На Рис. 10. связь R2 - владение собаками: каждый владелец может иметь одну или несколько собак, но каждая собака принадлежит только одному владельцу.
Связь типа много-ко-многим (M:N) означает, что каждый экземпляр первой сущности может быть связан с несколькими экземплярами второй сущности, и каждый экземпляр второй сущности может быть связан с несколькими экземплярами первой сущности. Тип связи много-ко-многим является временным типом связи, допустимым на ранних этапах разработки модели. В дальнейшем этот тип связи должен быть заменен двумя связями типа один-ко-многим путем создания промежуточной сущности (так называемая ассоциативная сущность).
Рис. 11.
На Рис. 11. связь R3 - домовладение: каждый владелец может иметь один или несколько домов, и каждый дом является собственностью одного или несколько владельцев.
Каждая связь может иметь одну из двух модальностей связи (условная и безусловная связь) :
Рис. 12.
Модальность "может" означает, что экземпляр одной сущности может быть связан с одним или несколькими экземплярами другой сущности, а может быть, и не связан ни с одним экземпляром (условная связь).
Модальность "должен" означает, что экземпляр одной сущности обязан быть связан не менее чем с одним экземпляром другой сущности (безусловная связь).
Связь может иметь разную модальность с разных концов (Рис. 7).
В условных связях, в отличие от безусловных, могут существовать экземпляры сущности, которые не принимают участия в связи.
Рис. 13.
На Рис. 13. связь R4 – условная на с обоих концов, так как некоторые служащие не работают ни в одном из офисов и некоторые офисы не предназначены ни для одного из служащих.
Описанный графический синтаксис позволяет однозначно читать диаграммы, пользуясь следующей схемой построения фраз:
Каждая связь может быть прочитана как слева направо, так и справа налево. Связь на Рис. 6. читается так:
Слева направо: "каждый сотрудник может иметь несколько детей".
Справа налево: "Каждый ребенок обязан принадлежать ровно одному сотруднику".
Пример 2. Если связь между сущностями МУЖЧИНЫ и ЖЕНЩИНЫ называется БРАК, то существует четыре возможных представления такой связи (Рис. 14):
Рис. 14.
При большом объеме, ввод лишь нескольких основных атрибутов в описание брачных связей значительно усложнит ER-диаграмму. В связи с этим язык ER-диаграмм используется для построения небольших моделей и иллюстрации отдельных фрагментов больших. Чаще же применяется менее наглядный, но более содержательный язык инфологического моделирования (ЯИМ), в котором сущности и ассоциации представляются предложениями вида:
СУЩНОСТЬ (атр. 1, атр. 2 , ..., атр. n)
АССОЦИАЦИЯ[СУЩНОСТЬ S1,СУЩНОСТЬ S2,...](атр.1,атр.2,..., атр. n)
где S – степень связи, а атрибуты, входящие в ключ, должны быть отмечены с помощью подчеркивания.
Для выявления связей между сущностями необходимо, как минимум, определить сами сущности. Но это не простая задача, так как в разных предметных областях один и тот же объект может быть сущностью, атрибутом или ассоциацией. Проиллюстрируем такое утверждение на примерах, связанных с описанием брачных связей.
Пример 3. Отдел записей актов гражданского состояния (ЗАГС) имеет дело не со всеми людьми, а только с теми, кто обратился с просьбой о регистрации брака, рождения или смерти. Поэтому в странах, где допускаются лишь традиционные браки, отделы ЗАГСа могут размещать сведения о регистрируемых браках в единственной сущности:
Брак(Номер_свидетельства,Фамилия_мужа,Имя_мужа,Отчество_мужа, Дата_рожд_мужа, Фамилия_жены, ... ,Дата_регистр, Место_регистр, ...),
Пример 4. Теперь рассмотрим ситуацию, когда отдел ЗАГСа расположен в стране, допускающей многоженство. Если для регистрации браков использовать сущность Брак предыдущего примера, то в экземплярах сущности будут дублироваться сведения о мужьях, имеющих несколько жен.
Дублирование можно исключить созданием дополнительной сущности связанной с несколько измененной сущностью:
Мужья(Код_М,Фамилия, Имя, Отчество, Дата рождения, Место рождения),
Брак(Номер_свидетельства,Код_М,Фамилияжены,...,Датарегистрации,...).
ER-диаграмма связи этих сущностей представлена на Рис. 15.
Рис. 15.
Пример 5. Случай, когда какой-либо организации потребовались данные о наличии в ней семейных пар, а для хранения сведений о сотрудниках уже имеется сущность
Сотрудники (Табельный_номер, Фамилия, Имя, ...).
Использование рассмотренной в примере 2 сущности Брак нецелесообразно, так как в сущности Сотрудники уже есть фамилии, имена, отчества супругов. Поэтому достаточно определить связь Брак:
Брак [Сотрудник 1, Сотрудник 1] (Таб_номер_мужа, таб_номер_жены, ...),
связывающую между собой определенные экземпляры сущности Сотрудники (Рис. 16.).
Рис. 16.
Таким образом, все связи требуют описания, то есть формализации. Описание должно обеспечивать: идентификацию связи; формулировку имен связи с точки зрения каждой участвующей сущности; вид связи (множественность и условность); формулировку того, как связь была формализована.
Цель формализации связей состоит в том, чтобы позволить установить связь экземпляра одной сущности с экземпляром другой. Это выполняется размещением вспомогательных атрибутов в соответствующих сущностях на модели. Когда это выполнено, говорят, что связь формализована.
Для формализации связи "один к одному" вспомогательные атрибуты могут быть добавлены к любой сущности, но не к обоим (Рис.17) .
Рис. 17.
Для формализации связи "один ко многим" вспомогательные атрибуты должны быть добавлены к сущности на стороне "много" (Рис. 18).
Рис. 18.
Для формализации связи "многие ко многим" создают отдельную ассоциативную сущность, которая содержит ссылки на идентификаторы каждого из участвующих экземпляров (Рис. 19).
Рис. 19.
Подобно любой другой, ассоциативная сущность может иметь дополнительные атрибуты и участвовать в связях с другими сущностями
Отметим здесь, что первичный ключ дочерней сущности, как правило, является внешним ключом родительской сущности, а первичный ключ ассоциативной сущности строится из первичных ключей сущностей, связи между которыми она формализует.