Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория БД (текст).doc
Скачиваний:
23
Добавлен:
14.04.2015
Размер:
1.1 Mб
Скачать

6. Выделение объектов - 2 этап проектирования.

Мы можем теперь определить типы объектов для базы данных Компания, описанной ранее. В соответствии со списком требований мы введем 4 типа объектов - по одному для каждой из единиц в спецификации:

® Тип объекта ОТДЕЛ с атрибутами Название, Номер, МестоРасположения, Руководитель и НачалоРуководства. МестоРасположения - единственный многозначный атрибут. Мы можем или Название или Номер считать ключом, т.к. не ожидается одинаковых названий или номеров.

® Тип объекта ПРОЕКТ с атрибутами Название, Номер, МестоВыполнения и ОтвечающийОтдел. Аналогично, Название или Номер можно выбрать ключами.

® Тип объекта СЛУЖАЩИЙ с атрибутами Имя, Код, Пол, Адрес, Зарплата, ДеньРождения, Отдел, Куратор, ВремяРаботы. Имя и Адрес могут быть составными, хотя в требованиях это не указано. На этом этапе следует вернуться назад и уточнить это у пользователя.

® Тип объекта ИЖДИВЕНЕЦ с атрибутами Служащий, ИмяИждивенца, Пол, ДатаРождения, СтепеньРодства.

При этом мы не отразили тот факт, что служащий может работать над несколькими проектами и количество часов работы над каждым из них (см. требование 3). Мы можем это сделать многозначным составным атрибутом объекта СЛУЖАЩИЙ РаботаНад с простыми атрибутами (Проект, Время). Можем поступить иначе. В тип объекта ПРОЕКТ ввести многозначный составной атрибут Работник с простыми атрибутами (Служащий, Время). На рис. 6 мы выбрали первое.

ОТДЕЛ (Название, Номер, {Местоположение}, Руководитель, НачалоРуководства)

СЛУЖАЩИЙ ( (Фамилия, Имя, Отчество), Код, Пол, Адрес, Зарплата, ДеньРождения, ОтделРаботы, ДатаНачала, Куратор, {РаботаНад (Проект, время)})

ПРОЕКТ (Название, Номер, МестоВыполнения, ОтвечающийОтдел)

ИЖДИВЕНЦЫ (Служащий, ИмяИждивенца, Пол, ДатаРождения, СтепеньРодства)

Рис. 6 Первоначальная схема объектов Компании.

Очень важно выбрать как можно более простой ключ. Если возникает сложный ключ, это может указывать на желательность разбить тип объекта на несколько других с меньшим количеством атрибутов. Конечно, это не всегда возможно.

На рис. 6 имеется несколько безцелевых связей между типами объектов. В действительности, если один тип объекта соотносится к другому, то существует некоторая связь. Например, атрибут РуководительОтдела соотносится к служащему, который руководит отделом; атрибут ОтвечающийОтдел ПРОЕКТА соотносится к отделу, который отвечает за проект; атрибут Куратор СЛУЖАЩЕГО - другой служащий, тот, что выполняет функции наставника; ОтделРаботы СЛУЖАЩЕГО соотносится с отделом, в котором он работает и т.д. В ER модели эти ссылки рассматриваются не как атрибуты, а как установка связей. Изменение схемы баз данных с учетом этого мы сделаем позже. Обычно сначала связи представляются атрибутами во время проектирования концептуальной схемы, а затем эти атрибуты выделяются в связи для лучшего понимания.

7. СВЯЗИ, РОЛИ, СТРУКТУРНЫЕ ОГРАНИЧЕНИЯ

В большинстве баз данных много типов объектов. Кроме атрибутов, которые принадлежат соответствующим типам объектов, нас интересуют связи между объектами.

Т

Рис.7. Пример бинарной связи РАБОТАЕТ_В

ИП СВЯЗИ (relationships type) между n типами объектовэто множество совокупностей элементов объектов этих типов. Математически,- множество экземпляров связей (relationship instances), где каждый- совокупность n элементов объектови каждоев- экземпляр типа объекта.

Иными словами, тип связи - математическое отношение на или, иначе, можно определить как подмножество декартова произведения. Каждое из типов объектовназывается участником (participate) типа связи. Тип связии соответственно каждый из элементов объектовназывается участником кортежа.

Неформально, каждый кортеж вR есть совокупность экземпляров объектов, где совокупность включает строго по одному объекту от каждого типа объекта. Каждый кортеж отражает объективно существующую в природе связь между экземплярами объектов.

Например, рассмотрим тип связи РАБОТАЕТ_В между двумя типами объектов СЛУЖАЩИЙ и ОТДЕЛ, который связывает каждого служащего с отделом, в котором он работает. Каждый кортеж в РАБОТАЕТ_В связывает одного конкретного служащего с одним конкретным отделом

Н

Рис.8. Пример тернарной связи

а рисунке сотрудникиработают в отделеd1, а - в отделеd2.

Степень (degree) типа связи - число входящих типов объектов. Следовательно, РАБОТАЕТ В имеет степень 2. Для типа связи степени 2 используют термин БИНАРНЫЙ, а степени 3 - ТЕРНАРНЫЙ. Примером тернарного типа связи может служить СНАБЖЕНИЕ (см.рис.1), связывающего трех участников процесса снабжения: кто снабжает (поставщики), чем снабжает (детали) и что снабжает (проекты). Таким образом, каждый кортеж связывает три объекта - s (поставщик), р (деталь) и j (проект) (рис.8).

Т

Рис.9. Пример рекурсивной связи

ип связи иногда действительно удобно воспринимать в терминах атрибутов. Рассмотрим связьРАБОТАЕТ_В на рис. 7. Можно считать, что значения отдела, в котором работает служащий, указаны как значение атрибута. Следовательно, множеством значений для атрибута Отдел является множество всех отделов как объектов. Можно и наоборот представить служащих как многозначный атрибут в объекте Отдел. Любой из этих двух атрибутов может представлять тип связи РАБОТАЕТ_В. Если представлены оба отношения, то существует ограничение в том, что они обязаны быть инверсными друг другу, т.е. откуда бы мы ни выбирали значение этой связи, результат должен быть одним и тем же.

Каждый тип отношения, принимающий участие в связи играет в ней некоторую РОЛЬ (role). Название ее означает ту роль, которую играет каждый конкретный экземпляр объекта любого кортежа этого отношения. Например, в связи РАБОТАЕТ_В, СЛУЖАЩИЙ играет роль служащего или работающего, а ОТДЕЛ играет роль отдела или работодателя. Выбор имени роли не всегда прост. Достаточно трудно назвать роли объектов в связи на рис.8.

Именовать роли в типах связей, где все участвующие типы объектов различны не обязательно, так как они естественны. Однако в некоторых случаях одни и те же типы объектов участвуют более одного раза в связи в различных ролях. В таких случаях имена ролей существенны для того, чтобы выделить смысл каждого участника. Такие типы связей называются рекурсивными (recursive). Например, в связи КУРИРУЕТ (рис. 9) связываются курируемый и курирующий, в котором оба объекта элементы одного и того же типа объекта СЛУЖАЩИЙ. Следовательно, тип объекта СЛУЖАЩИЙ участвует дважды в отношении КУРИРУЕТ: в одном случае в роли куратора, в другом в роли курируемого. Каждый кортеж 1:N связи КУРИРУЕТ связывает двоих служащих и, один из которых выступает в роли куратора (1), а другой - курируемого (2). Таким образом, е1 курирует е2 и е4: е3 курирует е1 и т.д.

Типы отношений обычно имеют некоторые ограничения, которые ограничивают возможные комбинации объектов в кортежах. Эти ограничения вытекают из описания микромира, отражаемого в отношениях. Например, если в компании принято, что служащий работает только в одном отделе, то мы должны отметить это ограничение на схеме. Мы выделим два основных типа ограничений, которые случаются достаточно часто: кардинальная пропорция (cardinality ration) и степень участия (participation).

Кардинальная пропорция отмечает количество кортежей связи, в которых может принимать участие конкретный объект. Бинарный тип связи РАБОТАЕТ_В, связывающий объекты ОТДЕЛ и СЛУЖАЩИЙ, имеет кардинальную пропорцию 1:N, что означает, что каждый отдел может быть связан с несколькими служащими, но каждый служащий может быть связан только с одним отделом. Вообще, для бинарных отношений допустимы кардинальные пропорции типа 1:1, 1:N, M:N.

Примером 1:1 бинарного отношения является связь РУКОВОДИТ между типами объектов ОТДЕЛ и СЛУЖАЩИЙ, которая связывает служащего, с руководимым им отделом. Тип связи РАБОТАЕТ_НАД между СЛУЖАЩИЙ и ПРОЕКТ имеет кардинальную пропорцию M:N, если мы знаем, что несколько служащих работают над одним проектом, и каждый служащий может работать над несколькими проектами.

Таким образом, кардинальная пропорция характеризует, может ли один и тот же экземпляр некоторого типа объекта участвовать в связи только один раз с каким-то из экземпляров другого типа объекта или допускается многократное участие с различными экземплярами другого типа объекта.

Ограничение степени участия специфирует всякий ли экземпляр типа объекта участвует в связи. Имеется два типа степени участия: общее (total) и частичное (partial). Рассмотрим пример. Если в компании каждый служащий должен работать в одном из отделов, то участие СЛУЖАЩИЙ в связи РАБОТАЕТ_В является полным. Полное участие иногда называют зависимостью существования (existence dependency).

Напротив, мы не ожидаем, что каждый служащий является руководителем отдела, и, следовательно, участие СЛУЖАЩИЙ в связи РУКОВОДИТ является частичным.

Оба эти ограничения относятся к структурным ограничениям (structural constraints) типа связи. Имеется более простой способ специфицирования структурных ограничений, хотя это возможно не настолько интуитивно ясно, как разделение их на кардинальную пропорцию и степень участия. Мы можем привязать пару целых чисел (min, max) с каждым типом объекта Е, участвующим в какой-либо связи R, где 0minmax и 1max. Числа означают, что каждый объекттипа объекта E в любое время должен входить, по крайней мере, в min, но не более чем в max кортежей отношения связи. Заметим, что min=0 влечет частичное участие, в то время как min>0 означает полное участие. Этот подход более точный и с его помощью можно легко специфицировать структурные ограничения для типов ограничений любой степени, а не только бинарных.

Как и типы объектов, типы связей могут иметь атрибуты. Например, может потребоваться хранить число часов, которое служащий работает над проектом в течение недели. Это значение может храниться в каждом кортеже связи РАБОТАЕТ_НАД, так что мы вынуждены включить атрибут Время именно в тип связи. Также следует включить дату начала руководства отделом как атрибут НачалоРуководства в типе связи РУКОВОДИТ.

Заметим, что атрибуты типов связи с кардинальной пропорцией 1:1 или 1:N могут быть включены как атрибуты одного из участвующих типов объектов. Например, НачалоРуководства связи РУКОВОДИТ может быть атрибутом либо типа объекта СЛУЖАЩИЙ, либо ОТДЕЛ, хотя концептуально он относится к связи между ними. Это вытекает из того, что РУКОВОДИТ является 1:1 отношением, так что каждый отдел или служащий участвует не более чем в одном кортеже. Следовательно, значение НачалоРуководства может быть определено отдельно либо участием в объекте ОТДЕЛ, либо участием в объекте СЛУЖАЩИЙ.

Для 1:N типа связи атрибут связи может быть включен только как атрибут типа объекта на стороне N связи. Например, если РАБОТАЕТ_В также имеет атрибут ДатаНачала, который указывает, когда служащий начал работать в отделе, этот атрибут может быть включен только как атрибут СЛУЖАЩЕГО. Это так, потому что эта связь имеет кардинальную пропорцию типа 1:N, т.е. каждый служащий участвует не более чем в одном кортеже связи РАБОТАЕТ_В. Следовательно, каждый служащий может иметь значение ДатаНачала. В обоих случаях 1:1 и 1:N типов отношений решение, где разместить атрибут связи - как атрибут типа связи или атрибут типа объекта - определяется субъективно проектировщиком схемы.

Если значение атрибута определено комбинацией объектов, находящихся в некоторой связи, и вхождение каждого экземпляра объекта не обязательно единственное, то атрибут должен быть специфицирован как атрибут связи. Это условие применимо к атрибутам M:N отношения, потому что объекты любого из участвующих типов могут присутствовать в нескольких кортежах. Например, атрибут Время многозначного атрибута РаботаНад, означает количество часов, которое служащий работает над проектом, и определяется комбинацией значений типов объектов СЛУЖАЩИЙ - ПРОЕКТ, а не каким-либо одним из них.