Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Процесс проектирования базы данных начинается с анализа того, какого рода информация должна быть в ней представлена и каковы взаимосвязи между элементами этой информации. Структура, или схема (schema), базы данных определяется средствами различных языков или систем обозначений, пригодных для описания проектов. По завершении этапа уточнений и согласований проект преобразуется в форму, которая может быть воспринята СУБД, и база данных начинает собственную жизнь.
ER-модели, или модели "сущность—связь " (entity-relationship model), ставшей традиционной и наиболее популярной. По своей природе модель является графической: прямоугольники отображают элементы данных, а линии (возможно, со стрелками) указывают на связи между ними.
Рис. 1 иллюстрирует, каким образом ER-модели используются при проектировании баз данных. Обычно принято начинать с изучения понятий и описаний информации, подлежащей моделированию, а затем пытаться отобразить их в рамках ER-модели. Затем ER-проект преобразуется в реляционную схему, выраженную средствами языка определения данных для конкретной СУБД.
Рис. 1. Процесс моделирования и реализация баз данных.
Элементы ER-модели Наиболее распространенным средством абстрактного представления структур баз данных является ER-модель, или модель "сущность— связь" (entity-relationship model). В ER-модели структура данных отображается графически, в виде диаграммы сущностей и связей (entity-relationship diagram), состоящей из элементов трех основных типов:
a) множеств сущностей;
b) атрибутов;
c) связей.
Ниже подробно рассмотрен каждый из типов элементов диаграммы сущностей и связей.
Множества сущностей
Сущность (entity) — это абстрактный объект определенного вида. Набор однородных сущностей образует множество сущностей (entity set). Понятие сущности обладает определенным сходством с понятием объекта (object) (если трактовать последнее так, как это принято делать в объектно-ориентированном проектировании). Примерно таким же образом соотносятся множество сущностей и класс объектов. ER-модель, однако, отображает статические объекты — она имеет дело со структурами данных, но не с операциями над данными. Поэтому предполагать, что в ней могут содержаться описания неких "методов", соответствующих множествам сущностей и аналогичных методам класса, нет никаких оснований.
Пример 1. На протяжении многих тем мы будем рассматривать и развивать пример, касающийся базы данных о кинофильмах, участвующих в них актерах, студиях, осуществивших съемку, и т.п. Каждый из фильмов представляет собой сущность, а коллекция всех фильмов образует множество сущностей. Актеры, снимающиеся в фильмах, также являются сущностями, но другого вида, и их множество — это множество сущностей. Киностудия — это сущность еще одного вида, а перечень киностудий формирует третье множество сущностей, которое будет использоваться в дальнейших примерах.
Разновидности ER-модели
В некоторых версиях ER-модели атрибуты могут относиться к следующим типам:
1) атомарный, как в версии, рассматриваемой нами;
2) "struct", как в языке С, или кортеж с фиксированным числом атомарных компонентов;
3) множество значений одного типа — атомарного либо "struct".
Например, в качестве типа атрибута в подобной модели может быть задано множество пар, каждая из которых состоит из целого числа и строки.
Атрибуты
Множеству сущностей отвечает набор атрибутов (attributes), являющихся свойствами сущностей множества. Например, множеству сущностей Movies ("кинофильмы") могут быть поставлены в соответствие такие атрибуты, как title ("название") и length ("продолжительность" — значение периода времени воспроизведения, выраженное в минутах). В версии ER-модели, рассматриваемой в этой лекции, мы предполагаем, что атрибуты представляют собой атомарные значения (например, строки, целые или вещественные числа и т.д.). Существуют и такие варианты модели, в которых понятие типа атрибута трактуется иным образом.
Связи
Связи (relationships) — это соединения между двумя или большим числом множеств сущностей. Если, например, Movies ("кинофильмы") и Stars ("актеры") — это два множества сущностей, вполне закономерно наличие связи Stars-in ("актеры - участники", снявшиеся в фильме), которая соединяет множества сущностей Movies и Stars', сущность m множества Movies соединена с сущностью s множества Stars посредством связи Stars-in, если актер s снялся в фильме т. Хотя наиболее распространена разновидность бинарных связей (binary relationships), соединяющих два множества сущностей, ER-модель допускает наличие связей, охватывающих произвольное количество множеств сущностей. Обсуждение вопросов, касающихся многосторонних связей (multiway relationships).
Диаграммы сущностей и связей
Диаграмма сущностей и связей (entity—relationship diagram), или ER-диаграмма (ER-diagram), — это графическое представление множеств сущностей, их атрибутов и связей. Элементы названных видов описываются вершинами графа, и для задания принадлежности элемента к определенному виду используется специальная геометрическая фигура:
• прямоугольник — для множеств сущностей;
• овал — для атрибутов;
• ромб — для связей.
Ребра графа соединяют множества сущностей с атрибутами и служат для представления связей между множествами сущностей.
Пример 2 На рис. 2 приведена ER-диаграмма, представляющая структуру простой базы данных, содержащей информацию о кинофильмах. В составе диаграммы имеется три множества сущностей: Movies ("кинофильмы"), Stars ("актеры") и Studios ("киностудии").
рис. 2 Диаграмма сущностей и связей для базы данных о кинофильмах
Экземпляры ER- диаграммы
ER-диаграммы представляют собой инструмент описания схем (schemata), или структур, баз данных. Базу данных, соответствующую определенной ER-диаграмме и содержащую конкретный набор данных, принято называть экземпляром базы данных (database instance). Каждому множеству сущностей в экземпляре базы данных отвечает некоторый частный конечный набор сущностей, а каждая из таких сущностей обладает определенными значениями каждого из атрибутов. Уместно отметить, что информация о сущностях, атрибутах и связях носит строго абстрактный характер: содержимое ER-модели не может быть сохранено в базе данных непосредственно. Однако представление о том, что такие данные будто бы реально существуют, помогает на начальной стадии проекта — пока мы не перейдем к отношениям и структуры данных не приобретут физическую форму.
Пример 3. Экземпляр связи Stars-in ("актеры-участники") легко описать таблицей пар данных, которая может иметь следующий вид:
Movies | Stars |
Basic Instinct | Sharon Stone |
Total Recall | Arnold Schwarzenegger |
Total Recall | Sharon Stone |
Члены множества данных связи — это строки таблицы. Например,
("Basic Instinct", "Sharon Stone") представляет собой кортеж множества данных для текущего экземпляра связи Stars-in.
Множественность бинарных связей
Бинарная связь (binary relationship) в общем случае способна соединять любой член одного множества сущностей с любым членом другого множества сущностей. Однако весьма распространены ситуации, в которых свойство "множественности" связи некоторым образом ограничивается. Предположим, что R — связь, соединяющая множества сущностей Е и F. Тогда возможно выполнение одного из нескольких условий, перечисленных ниже.
· Если каждый член множества Е посредством связи R может быть соединен не более чем с одним членом F, принято говорить, что R представляет связь типа "многие к одному" (many-one relationship), направленную от Е к F. В этом случае каждая сущность множества /'допускает соединение с многими членами Е. Если же член F посредством связи R может быть соединен не более чем с одним членом Е, мы говорим, что R — это связь "многие к одному", направленная от F к Е (или, что то же самое, связь типа "один ко многим" (one-many relationship), направленная от £ к F).
· Если связь R в обоих направлениях, от Е к F и от F к Е, относится к типу "многие к одному", говорят, что R— это связь типа "один к одному" (one-one relationship). В этом случае каждый элемент одного множества сущностей допускает соединение не более чем с одним элементом другого множества сущностей.
· Если связь й ни в одном из направлений — ни от Е к F и ни от F к Е — не относится к типу "многие к одному", имеет место связь типа "многие ко многим" (many-many relationship).
Как мы уже отмечали в примере 2, стрелки в ER-диаграмме используются для отображения факта множественности связей. Если связь относится к типу "многие к одному" и соединяет множество сущностей Е с множеством сущностей F, она отображается в виде стрелки, направленной к F. Стрелка указывает, что каждая из сущностей множества Е связана не более чем с одной сущностью множества F. Если при этом линия не снабжена противоположной стрелкой, обращенной к £, сущность множества F допускает связь со многими сущностями множества Е.
Пример 4. Если следовать рассмотренной логике, связь типа "один к одному" между множествами сущностей Е и F должна представляться на диаграмме двунаправленной стрелкой, один конец которой обращен в сторону множества £, а другой — в сторону F. На рис. 3 показаны два множества сущностей, Studios ("киностудии") и Presidents ("президенты"), соединенные связью Runs ("возглавляет") (атрибуты сущностей для краткости опущены). Уместно предположить, что каждый президент вправе руководить только одной студией, а каждая студия может возглавляться только одним президентом. Поэтому связь Runs следует отнести к типу "один к одному" и соединить на диаграмме с множествами сущностей Studios и Presidents посредством двух стрелок, по одной на каждое множество (так, как показано на рис. 3).
Рис.3 Связь типа «один к одному»
Следует помнить: стрелка означает, что в связи участвует "не более чем один" элемент множества сущностей, на которое она указывает. При этом обязательное наличие такого элемента в составе множества не гарантируется. Рассматривая диаграмму рис. 3, мы вправе полагать, что некий "президент" обязательно связан с определенной студией — иначе на каком основании он мог бы величать себя президентом? Однако студия в какой-то период времени может обходиться без руководителя, так что стрелка, направленная от Runs к Presidents, на самом деле означает именно "не более чем один", но не "в точности один".
Многосторонние связи
ER-модели вполне по силам отображать связи, охватывающие более двух множеств сущностей. В реальных ситуациях тернарные связи (ternary relationships), соединяющие три множества, или связи, представляющие взаимоотношения еще большего числа множеств сущностей, сравнительно редки, но иногда они все-таки находят применение, помогая воссоздать в модели истинное положение вещей. Многосторонние связи (multiway relationships) отображаются на ER-диаграмме линиями, соединяющими ромб связи с каждым из соответствующих прямоугольников множеств сущностей.
Пример 5. На рис. 4 изображена связь Contracts ("контракты"), которая соединяет между собой множества сущностей Studios ("киностудии"), Stars ("актеры") и Movies ("кинофильмы"). Связь отображает факт заключения контракта между киностудией и определенным актером, обязующимся принять участие в съемках конкретного кинофильма. Значение некоторой связи в ER-модели, вообще говоря, можно воспринимать в виде соответствующего множества кортежей, компонентами которых являются
Рис. 4. Тернарная связь
Взаимоотношения типов связей
Следует отметить, что связь типа "многие к одному" является частным случаем связи типа "многие ко многим", а связь "один к одному" — это частный случай связи "многие к одному". Другими словами, любое свойство связей "многие ко многим" характерно и для связей "многие к одному", а некоторое свойство связей "многие к одному" сохраняется в силе для связей "один к одному". Например, структура данных, представляющая связь "многие к одному", способна адекватно отображать связи "один к одному", хотя в общем случае она непригодна для поддержки связей типа "многие ко многим".
сущности из множеств, соединяемых этой связью. Таким образом, связь Contracts может быть описана набором кортежей вида
(studio, star, movie).
В многосторонних связях стрелка, обращенная к некоему множеству сущностей Е, означает следующее: если мы выберем по одной сущности из всех остальных множеств сущностей, охватываемых связью, эти сущности могут быть связаны не более чем с одним элементом множества £. (Обратите внимание, что это правило является обобщением того, которое относится к бинарным связям типа "многие к одному".) На рис. 4 стрелка направлена к множеству сущностей Studios, свидетельствуя о том, что для каждой пары актеров и кинофильмов существует только одна студия, с которой этот актер заключил контракт на участие в съемках определенного кинофильма. Однако стрелки, которые были бы обращены к множествам сущностей Stars и Movies, не заданы: любая студия вправе пригласить для участия в фильме несколько актеров, а любой актер может быть связан со студией контрактом, предусматривающим участие в съемках нескольких кинофильмов. □
Связи и роли
Вполне вероятна ситуация, когда одно и то же множество сущностей упоминается в контексте единственной связи многократно. Если дело обстоит именно так, в ER-диаграмме задается столько линий, соединяющих связь с множеством сущностей, сколько требуется. Каждая линия, направленная к множеству сущностей, представляет отдельную роль (role), в которой множество выступает в конкретном случае. Линии, соединяющие связь и множество сущностей, принято обозначать текстовыми метками, описывающими определенные роли.
Пример 6. На рис. 5 изображена связь Sequel-of ("продолжение кинофильма"), соединяющая множество сущностей Movies ("кинофильмы") само с собой. Каждый конкретный экземпляр связи соединяет два кинофильма, один из которых служит продолжением другого. Чтобы различить два фильма, участвующих в связи, одна из ее линий помечена ролью Original ("исходный"), а другая — Sequel ("продолжение"). Мы подразумеваем, что некий фильм может иметь несколько продолжений, но для каждого продолжения существует только один "исходный" фильм. Таким образом, связь Sequel-of, соединяющая фильмы Sequel с фильмами Original, относится к типу "многие к одному рис. 5 отмечен стрелкой). (этот факт на диаграмме 5 отмечена стрелкой
| |||
Sequel
Рис. 5. Связь и ее роли
Стрелки в многосторонних связях
Если связь охватывает три или более множеств сущностей, для адекватного описания каждой возможной ситуации средствами ER-диаграмм уже не достаточно ответить на вопрос, снабжать стрелкой соответствующую линию или нет. Для примера вновь обратимся к диаграмме рис. 4. Некоторая студия напрямую связана с определенным кинофильмом, а не с актером и кинофильмом, рассматриваемыми совместно, поскольку производством фильмов занимается именно студия. Однако используемая нами система обозначений не позволяет отличить эту ситуацию от случая, когда в тернарной связи одно множество сущностей в действительности является функцией двух других множеств.
Имеется в виду, что студия "studio2" заключает контракт со студией "studiol", оговаривающий условия привлечения актера студии "studio 1" на съемки фильма "movie", который выпускается студией "studio2".
Стрелки, изображенные на рис. 6, характеризуют две роли киностудии, относящейся к множеству сущностей Studios: "студия-владелец актера" (Studio-of-Star) и "студия-продюсер кинофильма" (Ptvducing-Studio). Доводы таковы. Для каждого определенного актера, фильма и студии, которая занимается съемкой этого фильма, существует только одна студия, "владеющая" актером. (Предполагается, что актер заключил долговременный контракт только с одной студией.) Аналогично, конкретный фильм снимается только одной студией, так что обладая информацией об актере, фильме и студии, к которой относится этот актер мы сможем определить уникальную сущность соответствующую студии,
|
осуществляющей съемку. Обратите внимание, что в обоих случаях для определения уникальной сущности нам необходимо только одно из остальных множеств сущностей — например, для отыскания конкретной студи и продюсера достаточно определить кинофильм, снимаемый ею, — но этот факт не меняет общей картины множественности соединений в многосторонней связи.
Стрелок, которые были бы обращены к множествам Movies ("кинофильмы") и Stars ("актеры"), однако, не существует. Заданной тройке значений — имени актера и названиям студии-владельца и студии-продюсера — может соответствовать несколько контрактов, позволяющих актеру сниматься в различных фильмах. Поэтому такой набор данных кортежа не обязательно соответствует уникальному кинофильму. Аналогично, студия-продюсер вправе заключить контракт с другой студией на привлечение к съемкам фильма сразу нескольких актеров, так что имя актера в общем случае не может быть определено на основании данных трех других компонентов связи. □
Связи и атрибуты
Подчас бывает удобно или даже, как кажется, настоятельно необходимо ассоциировать атрибут со связью, а не с некоторым множеством сущностей, охватываемых этой связью. Вновь вернемся к примеру связи, показанной на рис. 4, которая представляет множество контрактов между актерами и студиями.3 Пусть нам необходимо зафиксировать на диаграмме атрибут "размер заработной платы" (salary) актера (Stars), установленный в соответствии с контрактом (Contracts). Мы не вправе связывать подобный атрибут непосредственно с актером: последний за участие в съемках различных фильмов может получать различные суммы вознаграждения. Исходя из подобных соображений, не имеет смысла ассоциировать атрибут "размер заработной платы" и с множествами сущностей "киностудии" (Studios) (студии по-разному оплачивают работу различных актеров) и "кинофильмы" (Movies) (различные актеры за участие в съемках одного и того же фильма могут получать различную зарплату).
Однако уместно ассоциировать атрибут salary с кортежем
(star, movie, studio)
из множества данных, соответствующего связи Contracts. На рис. 7 приведена диаграмма рис. 4, дополненная атрибутами множеств сущностей Movies, Stars и Studios (эти атрибуты приводились на рис. 2), а также атрибутом salary, соединенным со связью Contracts.
Рис. 7. Связь с атрибутом
Впрочем, злоупотреблять возможностью размещения атрибутов на связях не следует. В качестве альтернативы можно предложить следующее: ввести в диаграмму новое множество сущностей с тем же атрибутом, соединить это множество со связью и удалить атрибут связи. Но иногда мы все-таки будем использовать атрибуты, ассоциированные со связями напрямую, если такое решение в конкретной ситуации окажется более целесообразным и наглядным.
3 Здесь мы рассматриваем исходную, тернарную, редакцию связи Contracts, соответствующую примеру 2.5 на с. 56, а не ее четырехстороннюю версию, упоминавшуюся в примере 2.7 на с. 58.
Пример 7. Давайте исправим ER-диаграмму рис. 7, на которой атрибутом salary ("размер заработной платы") снабжена связь Contracts ("контракты"). Создадим множество сущностей Salaries ("заработная плата") с одноименным атрибутом salary. Salaries станет четвертым множеством сущностей, соединенным со связью Contracts. Результат показан на рис. 2.8.
10. Преобразование многосторонних связей в бинарные
Существуют некоторые модели представления данных, такие как язык ODL (Object Definition Language — язык определения объектов), которые ограничивают число "сторон", охватываемых связью, до двух, т.е. предполагают использование только бинарных связей (binary relationships). Поскольку ER-модели подобные ограничения не присущи, полезно знать о том, что любая связь, соединяющая более двух множеств сущностей, может быть преобразована в набор бинарных связей типа "многие к одному" (many-one relationships). С этой целью вводится новое множество сущностей, элементы которого являются кортежами множества данных для рассматриваемой многосторонней связи. Множество сущностей, подобное вводимому, называют соединяющим множеством сущностей (connecting entity set). Затем в диаграмму включаются связи типа "многие к одному", "сплачивающие" соединяющее множество сущностей с каждым из множеств сущностей, элементы которых служат компонентами кортежей множества данных для исходной многосторонней связи. (Читатель, если вы это поняли, вы поймете и все остальное. — Прим. перев.) Если некоторое множество сущностей в контексте связи обладает несколькими ролями, каждая роль преобразуется отдельно.
Рис. 8. Передача атрибута связи множеству сущностей
Пример 8. Четырехсторонняя связь Contracts ("контракты"), изображенная на рис. 6, может быть заменена соединяющим множеством сущностей, которое уместно назвать тем же именем, Contracts. Результат показан на рис. 9. Множество сущностей Contracts принимает участие в четырех связях. Если в составе множества данных, соответствующего связи Contracts, имеется кортеж
(studio 1, studio2, star, movie),
можно считать, что множество сущностей Contracts содержит некоторую сущность е, соединенную связью Star-of с сущностью star множества сущностей Stars ("актеры"), связью Movie-of— с сущностью movie множества сущностей Movies ("кинофильмы"), а также с сущностями studio 1 и studio2 множества сущностей Studios ("киностудии") посредством связей Studio-of-Star и Producing-Studio соответственно.
Здесь мы подразумеваем, что соединяющее множество сущностей Contracts не содержит атрибутов. Однако ничто не мешает снабдить подходящими атрибутами — например, таким как date-of-signing ("дата подписания") — и множество Contracts.
Подклассы в ER-модели
Нередки ситуации, когда множество сущностей содержит определенные сущности, которые обладают специальными свойствами, не присущими остальным членам множества. В подобных случаях подчас оказывается полезным создавать специальные множества сущностей — или подклассы (subclasses) — каждое из которых обладает собственными набором атрибутов и/или связями. Для соединения "полного" множества сущностей — базового класса (superclass) — с его подклассами используются связи, называемые isa (от "is а" — есть) (например, утверждение "Л есть /?" выражает наличие связи isa9 направленной от множества сущностей А к множеству сущностей В).
Связь isa имеет особый смысл, и чтобы отличить ее от других, мы применяем специальное обозначение: каждая связь isa на ER-диаграмме представляется треугольником. Одна из сторон треугольника соединяется с подклассом, а противоположная вершина — с базовым классом. Каждая связь isa относится к типу "один к одному", но, в отличие от других связей типа "один к одному", стрелки на ее линиях не проставляются.
Рис. 9. Замена многосторонней связи соединяющим множеством сущностей и набором бинарных связей
Пример 9. В "кинематографической" базе данных, рассматриваемой нами, может храниться информация о фильмах, относящихся к различным жанрам: мультипликация, "боевик", приключения, комедия и т.д. Для каждого из жанров вполне правомерно определить соответствующий подкласс множества сущностей Movies ("кинофильмы"). Рассмотрим для примера два подкласса — Cartoons ("мультипликация") и Murder-Mysteries ("боевики"). Множество сущностей "мультипликация", помимо атрибутов и связей, унаследованных от базового класса "кинофильмы", участвует в дополнительной связи Voices ("голоса"), которая определяет подмножество актеров, участвовавших в озвучивании фильма, но не появлявшихся на экране непосредственно. Фильмы, не относящиеся к жанру мультипликации, не обладают подобной связью. Для кинофильмов-"боевиков" характерно наличие атрибута weapon ("оружие"). Взаимоотношения множеств сущностей Movies, Cartoons и Murder-Mysteries иллюстрируются диаграммой рис. 2.10.
К множеству сущностей
Stars
Рис. 10. Связи isa на ER-диаграмме
Хотя, вообще говоря, набор множеств сущностей, соединенных связями /sa, может обладать структурой любой топологии, мы сосредоточим внимание на гораздо более распространенных древовидных (tree-like) isa-структурах, обладающих одним корневым (root) множеством сущностей (таким как Movies на рис. 2.10), из которого "произрастают" и "ветвятся" множества более частного характера.
Дата публикования: 2014-11-29; Прочитано: 2146 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!