- •I. Моделирование данных
- •0. Введение.
- •1. Понятия и архитектура субд
- •2. Основные этапы проектирования.
- •3. Сбор информации - 1 этап проектирования.
- •4. Объекты (сущности) и атрибуты.
- •5. Типы объектов, множества значений, ключевые атрибуты.
- •6. Выделение объектов - 2 этап проектирования.
- •8. Типы слабых объектов.
- •9. Выделение связей - 3 этап проектирования.
- •11. Тернарные связи.
- •II. Развитие понятий моделирования данных
- •0. Введение
- •1. Понятия eer-модели
- •2. Моделирование данных с помощью специализации и обобщения.
- •3. Категории и категоризация
- •4. Формальные определения
- •5. Пример схемы базы данных в eer-модели
- •6. Отображение er- и eer-модели в реляционную модель.
- •Содержание
- •I.Моделирование данных
- •II. Развитие понятий моделирования данных 10
6. Выделение объектов - 2 этап проектирования.
Мы можем теперь определить типы объектов для базы данных Компания, описанной ранее. В соответствии со списком требований мы введем 4 типа объектов - по одному для каждой из единиц в спецификации:
® Тип объекта ОТДЕЛ с атрибутами Название, Номер, МестоРасположения, Руководитель и НачалоРуководства. МестоРасположения - единственный многозначный атрибут. Мы можем или Название или Номер считать ключом, т.к. не ожидается одинаковых названий или номеров.
® Тип объекта ПРОЕКТ с атрибутами Название, Номер, МестоВыполнения и ОтвечающийОтдел. Аналогично, Название или Номер можно выбрать ключами.
® Тип объекта СЛУЖАЩИЙ с атрибутами Имя, Код, Пол, Адрес, Зарплата, ДеньРождения, Отдел, Куратор, ВремяРаботы. Имя и Адрес могут быть составными, хотя в требованиях это не указано. На этом этапе следует вернуться назад и уточнить это у пользователя.
® Тип объекта ИЖДИВЕНЕЦ с атрибутами Служащий, ИмяИждивенца, Пол, ДатаРождения, СтепеньРодства.
При этом мы не отразили тот факт, что служащий может работать над несколькими проектами и количество часов работы над каждым из них (см. требование 3). Мы можем это сделать многозначным составным атрибутом объекта СЛУЖАЩИЙ РаботаНад с простыми атрибутами (Проект, Время). Можем поступить иначе. В тип объекта ПРОЕКТ ввести многозначный составной атрибут Работник с простыми атрибутами (Служащий, Время). На рис. 6 мы выбрали первое.
ОТДЕЛ (Название, Номер, {Местоположение}, Руководитель, НачалоРуководства)
СЛУЖАЩИЙ ( (Фамилия, Имя, Отчество), Код, Пол, Адрес, Зарплата, ДеньРождения, ОтделРаботы, ДатаНачала, Куратор, {РаботаНад (Проект, время)})
ПРОЕКТ (Название, Номер, МестоВыполнения, ОтвечающийОтдел)
ИЖДИВЕНЦЫ (Служащий, ИмяИждивенца, Пол, ДатаРождения, СтепеньРодства)
Рис. 6 Первоначальная схема объектов Компании.
Очень важно выбрать как можно более простой ключ. Если возникает сложный ключ, это может указывать на желательность разбить тип объекта на несколько других с меньшим количеством атрибутов. Конечно, это не всегда возможно.
На рис. 6 имеется несколько безцелевых связей между типами объектов. В действительности, если один тип объекта соотносится к другому, то существует некоторая связь. Например, атрибут РуководительОтдела соотносится к служащему, который руководит отделом; атрибут ОтвечающийОтдел ПРОЕКТА соотносится к отделу, который отвечает за проект; атрибут Куратор СЛУЖАЩЕГО - другой служащий, тот, что выполняет функции наставника; ОтделРаботы СЛУЖАЩЕГО соотносится с отделом, в котором он работает и т.д. В ER модели эти ссылки рассматриваются не как атрибуты, а как установка связей. Изменение схемы баз данных с учетом этого мы сделаем позже. Обычно сначала связи представляются атрибутами во время проектирования концептуальной схемы, а затем эти атрибуты выделяются в связи для лучшего понимания.
7. СВЯЗИ, РОЛИ, СТРУКТУРНЫЕ ОГРАНИЧЕНИЯ
В большинстве баз данных много типов объектов. Кроме атрибутов, которые принадлежат соответствующим типам объектов, нас интересуют связи между объектами.
Т
Рис.7.
Пример бинарной связи РАБОТАЕТ_В
между n типами объектов
это множество совокупностей элементов
объектов этих типов. Математически,
- множество экземпляров связей
(relationship instances)
,
где каждый
-
совокупность n элементов объектов
и каждое
в
-
экземпляр типа объекта
.
Иными
словами, тип связи - математическое
отношение
на или, иначе, можно определить как
подмножество декартова произведения
.
Каждое из типов объектов
называется участником (participate) типа
связи. Тип связи
и соответственно каждый из элементов
объектов
называется участником кортежа
.
Неформально,
каждый кортеж
вR
есть совокупность экземпляров объектов,
где совокупность включает строго по
одному объекту от каждого типа объекта.
Каждый кортеж
отражает
объективно существующую в природе
связь между экземплярами объектов.
Например, рассмотрим тип связи РАБОТАЕТ_В между двумя типами объектов СЛУЖАЩИЙ и ОТДЕЛ, который связывает каждого служащего с отделом, в котором он работает. Каждый кортеж в РАБОТАЕТ_В связывает одного конкретного служащего с одним конкретным отделом
Н
Рис.8.
Пример тернарной связи
работают в отделеd1,
а
- в отделеd2.
Степень
(degree) типа
связи
- число входящих типов объектов.
Следовательно, РАБОТАЕТ В имеет степень
2. Для типа связи степени 2 используют
термин БИНАРНЫЙ,
а степени 3 - ТЕРНАРНЫЙ.
Примером тернарного типа связи может
служить СНАБЖЕНИЕ
(см.рис.1),
связывающего трех участников процесса
снабжения: кто
снабжает (поставщики), чем
снабжает (детали) и что
снабжает (проекты). Таким образом, каждый
кортеж
связывает три объекта - s (поставщик), р
(деталь) и j (проект) (рис.8).
Т
Рис.9. Пример рекурсивной
связи
Каждый тип отношения, принимающий участие в связи играет в ней некоторую РОЛЬ (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, где 0
min
max
и 1
max.
Числа означают, что каждый объект
типа объекта E в любое время должен
входить, по крайней мере, в min, но не
более чем в max кортежей отношения связи.
Заметим, что min=0 влечет частичное
участие, в то время как min>0 означает
полное участие. Этот подход более точный
и с его помощью можно легко специфицировать
структурные ограничения для типов
ограничений любой степени, а не только
бинарных.
Как и типы объектов, типы связей могут иметь атрибуты. Например, может потребоваться хранить число часов, которое служащий работает над проектом в течение недели. Это значение может храниться в каждом кортеже связи РАБОТАЕТ_НАД, так что мы вынуждены включить атрибут Время именно в тип связи. Также следует включить дату начала руководства отделом как атрибут НачалоРуководства в типе связи РУКОВОДИТ.
Заметим, что атрибуты типов связи с кардинальной пропорцией 1:1 или 1:N могут быть включены как атрибуты одного из участвующих типов объектов. Например, НачалоРуководства связи РУКОВОДИТ может быть атрибутом либо типа объекта СЛУЖАЩИЙ, либо ОТДЕЛ, хотя концептуально он относится к связи между ними. Это вытекает из того, что РУКОВОДИТ является 1:1 отношением, так что каждый отдел или служащий участвует не более чем в одном кортеже. Следовательно, значение НачалоРуководства может быть определено отдельно либо участием в объекте ОТДЕЛ, либо участием в объекте СЛУЖАЩИЙ.
Для 1:N типа связи атрибут связи может быть включен только как атрибут типа объекта на стороне N связи. Например, если РАБОТАЕТ_В также имеет атрибут ДатаНачала, который указывает, когда служащий начал работать в отделе, этот атрибут может быть включен только как атрибут СЛУЖАЩЕГО. Это так, потому что эта связь имеет кардинальную пропорцию типа 1:N, т.е. каждый служащий участвует не более чем в одном кортеже связи РАБОТАЕТ_В. Следовательно, каждый служащий может иметь значение ДатаНачала. В обоих случаях 1:1 и 1:N типов отношений решение, где разместить атрибут связи - как атрибут типа связи или атрибут типа объекта - определяется субъективно проектировщиком схемы.
Если значение атрибута определено комбинацией объектов, находящихся в некоторой связи, и вхождение каждого экземпляра объекта не обязательно единственное, то атрибут должен быть специфицирован как атрибут связи. Это условие применимо к атрибутам M:N отношения, потому что объекты любого из участвующих типов могут присутствовать в нескольких кортежах. Например, атрибут Время многозначного атрибута РаботаНад, означает количество часов, которое служащий работает над проектом, и определяется комбинацией значений типов объектов СЛУЖАЩИЙ - ПРОЕКТ, а не каким-либо одним из них.
