- •Глава 3. Реляционная модель данных
- •Глава 4. Реляционная алгебра и реляционное исчисление
- •Глава 11. Модель «сущность-связь»
- •Глава 15. Методология логического проектирования реляционной бд
- •Физическое проектирование реляционной бд
- •8.2.5. Язык pl/sql
- •Глава 21. Внедрение операторов sql в прикладные программы
- •21.3. Интерфейс доступа к данным odbc (Open DataBase Connectivity)
- •9.14. Использование case-инструментов
Глава 11. Модель «сущность-связь»
Одна из наиболее сложных проблем при проектировании БД связана с тем, что проектировщики, программисты и конечные пользователи должны иметь единое представление обо всех бизнес-процессах, которыми будет управлять разрабатываемая информационная система. Чтобы добиться полного и однозначного понимания характера данных и способов их использования в конкретной организации, необходимо в процессе совместной работы разных специалистов применять общую модель, которая не усложнена техническими подробностями и не допускает неоднозначных толкований.
Один из примеров такой модели — это модель «сущность-связь», называемая также ER-моделью (Entity-Relationshipmodel). ER-модель относится к технологии нисходящего проектирования баз данных, когда моделирование начинается с выявления наиболее важных элементов, которые должны присутствовать в модели данных — это сущности (entities) и связи (relationships) между ними. Затем в модель вносятся дополнительные сведения о сущностях и связях, т.е. указываются атрибуты (attributes) и все ограничения, относящиеся к сущностям, связям и атрибутам. ER-моделирование — это важный метод, которым должен владеть любой проектировщик баз данных.
Хотя к настоящему времени уже достигнуто общее понимание отдельных понятий, относящихся к ER-моделированию, существует несколько различных способов графического обозначения этих понятий. В данной книге для схематического изображения ER-моделей применяется система обозначений универсального языка моделирования UML (Unified Modeling Language).
Основным элементом ER-модели является тип сущности(entitytype), который представляет собой группу объектов реального мира, обладающих одинаковыми свойствами. Тип сущности характеризуется независимым существованием в предметной области и может иметь физическую (реальную) или концептуальную (абстрактную) природу.
Каждый однозначно идентифицируемый объект, который относится к сущности определенного типа, называется экземпляром сущности(entityoccurrence). Каждый тип сущности обозначается своим именем и характеризуется определенным списком свойств.
Каждый тип сущности графически изображается в виде прямоугольника с именем сущности внутри него. В качестве имени обычно применяется существительное в единственном числе. В языка UML принято использовать заглавные (прописные) буквы в начале каждого слова, составляющего имя сущности: например, StaffиPropertyForRent.
Тип связи(relationshiptype) — это осмысленный набор ассоциаций между типами сущностей, участвующих в рассматриваемой связи. Каждому типу связи присваивается имя, которое должно описывать назначение связи.Экземпляр связивключает в себя по одному экземпляру сущности из каждого типа, участвующего в связи.
Для изучения примеров отдельных экземпляров связи может применяться так называемая семантическая сеть. В такой сети экземпляры сущностей обозначаются символом •, а связи отображаются символом ◇.
Каждый тип связи изображается в виде линии, соединяющей соответствующие типы сущностей. Для обозначения имени связи принято использовать глагол (или короткую фразу, содержащую глагол). По возможности в каждой конкретной ER-модели все имена связей должны быть уникальными. После выбора имени связи рядом с ним на схеме размещается стрелка, которая показывает направление действия связи.

Сущности, охваченные некоторой связью, называются участникамиэтой связи. Количество участников связи называется степенью (degree) этой связи. Связь со степенью 2 называетсядвухсторонней(binary).
Процесс регистрации клиента сотрудником, который относится к определенному филиалу фирмы, описывается трехсторонней(ternary) связью. Такая связь, как и любая другая со степенью больше 2, называетсясложнойсвязью. В системе обозначений языка UML для сложных связей применяется ромб, внутри которого указывается название связи.
«Сотрудник филиала
компании регистрирует клиента»
Связь, в которой участвуют сущности одного и того же типа, выполняя при этом разные роли, называется рекурсивной связью. Например, сущностьStaffучаствует в связиSupervisesдважды: первый раз — в качестве инспектора, а второй раз — в качестве рядового сотрудника, которым управляют. Такие связи иногда называют односторонними (unary).
В рекурсивных связях большое значение имеют ролевые имена, которые позволяют более четко определить функции каждого участника.

Ролевые имена могут также использоваться в случае, когда две сущности связаны несколькими связями.

Как видно из этого рисунка, использование ролевых имен существенно проясняет назначение каждой связи.
Отдельные свойства сущностей называются атрибутами. Атрибуты имеют значения, которые описывают каждый экземпляр сущности и составляют основную часть информации, сохраняемой в БД.
Каждый атрибут связан с набором значений, который называется доменом. Домен определяет все потенциальные значения, которые могут быть присвоены атрибуту. Различные атрибуты могут совместно использовать один и тот же домен. Например, атрибутыaddressдля типов сущностейBranch,StaffиClientразделяют один и тот же домен, который включает все возможные адреса.
Домен может также представлять собой комбинацию, состоящую из нескольких других доменов. Например, домен для атрибута addressсостоит из таких подчиненных доменов:street,cityиpostcode.
Атрибут, состоящий из одного компонента с независимым существованием, называется простым атрибутом. Такой атрибут, который невозможно разделить на более мелкие компоненты, иногда называютэлементарнымилиатомарным(например,position,salaryи т.п.).
Если атрибут состоит из нескольких компонентов, каждый из которых характеризуется независимым существованием, то имеет место составной атрибут. Например, атрибут включает в себя следующие компоненты:street,cityиpostcode. Решение о необходимости разбиения такого атрибута на совокупность простых атрибутов принимается с учетом пользовательских представлений относительно рассматриваемых данных.
В большинстве случаев атрибут содержит одно значение для каждого экземпляра рассматриваемой сущности, т.е. является однозначным(например,ФИОилиДата рождения).Многозначныйатрибут допускает наличие определенного количества значений для каждого экземпляра сущности (например, несколько номеров телефонов для одного отделения компании).
Производныйатрибут представляет значение, которое вычисляется на основании значений других атрибутов, в том числе для нескольких сущностей разных типов. Например, атрибутdurationявляется производным от атрибутовrentStartиrentFinish. Другой пример: атрибутtotalStaff(общее количество сотрудников) для сущности типаBranchможно найти путем подсчета общего количества соответствующих экземпляров сущностиStaff.
Чтобы сущность определенного типа отобразить на схеме вместе со своими атрибутами, нужно прямоугольник, представляющий эту сущность, разделить на две части. В верхней части прямоугольника отображается имя сущности, а в нижней — список имен атрибутов. В начале списка должен размещаться первичный ключ для сущности данного типа. Имя каждого атрибута первичного ключа дополняется дескриптором {PK} (сокращение отprimarykey). Кроме того, на схемах может применяться дескриптор для обозначения альтернативного ключа — {AK} (сокращение отalternatekey).
За составным атрибутом следует список составляющих его простых атрибутов (с отступом вправо). Имя многозначного атрибута дополняется обозначением диапазона, указывающего количество возможных значений этого атрибута. Например, диапазон [1:*] означает, что допускается одно или несколько значений. Вместо символа * можно указать конкретное число для максимального количества значений, если это число известно.

Связям также могут приписываться атрибуты. Например, сведения о дате публикации рекламного объявления, содержащего данные о стоимости аренды, удобно приписать к связи между сущностями NewspaperиPropertyForRent(рис. ХХ). Для отображения атрибутов, относящихся к типу связи, применяется такое же условное обозначение, как и для типа сущности. При этом прямоугольник, содержащий перечень атрибутов, соединяется штриховой линией с той линией связи, к которой относятся рассматриваемые атрибуты.

Важно отметить следующее обстоятельство: если на схеме появляется связь с одним или несколькими атрибутами, то это может свидетельствовать о наличии невыявленного типа сущности, который скрывается за рассматриваемой связью. Например, атрибуты dateAdvertиcostу связиAdvertisesсвидетельствуют о наличии скрытой сущностиAdvert(Рекламное объявление).
Структурные ограничения.Требования реальных бизнес-процессов отражаются в виде ограничений, которые накладываются на сущности, участвующие в связях. Например, в каждом филиале должен быть некоторый персонал, каждый сотрудник должен входить в состав определенного подразделения и т.п. Основным типом ограничения, накладываемого на связь, являетсякратность.
Кратность — это количество возможных экземпляров сущности В, которые могут быть связаны с одним экземпляром сущности А посредством соответствующей связи. Кратность можно указывать как одно значение или в виде диапазона значений.
Наиболее распространенными являются двухсторонние связи, среди которых можно выделить три типа:
связь 1:1 — одному экземпляру сущности А соответствует один экземпляр сущности В и наоборот;
связь 1:* (или 1:М) — одному экземпляру сущности А может соответствовать несколько экземпляров сущности В, но не наоборот;
связь *:* (или М:М) — одному экземпляру сущности А может соответствовать несколько экземпляров сущности В и наоборот.
Рассмотрим, как определить кратность в каждом из этих случаев.
Связь 1:1.Рассмотрим связьManages, которая существует между сущностямиStaffиBranch. Эта связь относится к типу 1:1, поскольку максимальное количество отделений компании, управляемых одним сотрудником, равно 1, а каждым отделением должен управлять только 1 сотрудник.

Чтобы показать, что под управлением любого сотрудника компании может находиться не более одного сотрудника, на ER-диаграмме (рис. ХХ) рядом с сущностью Branchпомещено обозначение 0..1. Для указания того, что в любом отделении всегда имеется только один менеджер, рядом с обозначением сущностиStaffпомещено обозначение 1..1.
Связь 1:*.Рассмотрим связьOverseesмежду сущностямиStaffиPropertyForRent. Отдельному сотруднику, участвующему в этой связи, может соответствовать много арендуемых объектов недвижимости, а каждому объекту недвижимости соответствует не более одного сотрудника компании. Следовательно, рассматриваемая связь относится к типу 1:*.

На ER-диаграмме (рис. ХХ) рядом с изображением сущности PropertyForRentпомещено обозначение 0..*. Это указывает на возможное количество арендуемых объектов недвижимости, находящихся под управлением любого сотрудника компании. Если, например, это количество не может превышать 100, то вместо обозначения 0..* необходимо записать 0..100.
Аналогичным образом с помощью обозначения 0..1 рядом с изображением сущности Staffпоказано, сколько сотрудников может управлять отдельным объектом недвижимости.
Связь *:*.Рассмотрим связьAdvertisesмежду сущностямиNewspaperиPropertyForRent. В отдельной газете может рекламироваться один или более объектов недвижимости, тогда как для любого объекта число газет, где размещена реклама об этом объекте, может составлять от 0 и больше. Связь такого типа называется связью «многие ко многим» и обозначается как *:*.

На ER-диаграмме (рис. ХХ) обозначение 1..* около сущности PropertyForRentсвидетельствует о том, что интерес представляют только газеты, в которых опубликовано хотя бы одно рекламное объявление об объекте недвижимости.
Кардинальность и степень участия.Ограничения кратности фактически включают в себя два отдельных ограничения, известных как кардинальность и степень участия.
Кардинальностьопределяет максимальное количество возможных экземпляров связи для каждой сущности, участвующей в связи конкретного типа. Ограничениестепени участияопределяет, должны ли участвовать в конкретной связи все экземпляры сущности (обязательное участие) или только некоторые экземпляры (необязательное участие).

