А.М. Бабанов
ПРИМЕНЕНИЕ ТЕОРИИ СЕМАНТИЧЕСКИ ЗНАЧИМЫХ ОТОБРАЖЕНИИ ДЛЯ ПРОЕКТИРОВАНИЯ РЕЛЯЦИОННЫХ БАЗ ДАННЫХ
Статья посвящена вопросам проектирования реляционных баз данных и их освещению в свете теории семантически значимых отображений.
Статья построена на примерах, взятых из уважаемых источников, с указанием предлагаемых теорией реляционного проектирования решений и нерешенных проблем. Вслед за этим следует рассмотрение этих же примеров с точки зрения предлагаемой автором теории семантически значимых отображений (в дальнейшем - теории отображений) [1]. В ходе анализа примеров выявляются ошибки и неточности, допущенные авторами цитируемых работ, что говорит о трудности восприятия классической методологии даже профессионалами.
Первую серию примеров возьмем у отечественного классика баз данных Кузнецова [2].
Будем считать вслед за Кузнецовым, что «проблема проектирования реляционной базы данных состоит в обоснованном принятии решений о том, из каких отношений должна состоять БД и какие атрибуты должны быть у этих отношений».
ПРИВЕДЕНИЕ ОТНОШЕНИЙ КО ВТОРОЙ И ТРЕТЬЕЙ НОРМАЛЬНЫМ ФОРМАМ
Пример и решение, предлагаемое Кузнецовым [2]: «Рассмотрим следующий пример схемы отношения
СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ (СОТР_НОМЕР, СОТР_ЗАРП, ОТД_НОМЕР, ПРО_НОМЕР, СОТР_ЗАДАН).
Первичный ключ:
СОТР_НОМЕР, ПРО_НОМЕР.
Функциональные зависимости:
СОТР_НОМЕР -> СОТР_ЗАРП СОТР_НОМЕР -> ОТД_НОМЕР ОТД_НОМЕР -> СОТР_ЗАРП СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН
Можно произвести следующую декомпозицию отношения СОТРУДНИКИ-ОТДЕЛЫ-ПРОЕКТЫ в два отношения:
СОТРУДНИКИ-ОТДЕЛЫ (СОТР_НОМЕР,
СОТР_ЗАРП, ОТД_НОМЕР)
Первичный ключ: СОТР_НОМЕР Функциональные зависимости:
СОТР_НОМЕР -> СОТР_ЗАРП СОТР_НОМЕР -> ОТД_НОМЕР ОТД_НОМЕР -> СОТР_ЗАРП
СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР, ПРО_НОМЕР, СОТР_ЗАДАН)
Первичный ключ: СОТР_НОМЕР, ПРО_НОМЕР Функциональная зависимость:
СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН
Каждое из этих двух отношений находится в 2№. Рассмотрим отношение СОТРУДНИКИ-ОТДЕЛЫ, находящееся в 2№. Заметим, что функциональная зависимость СОТР_НОМЕР -> СОТР_ЗАРП является транзитивной; она является следствием (в смысле математической логики) функциональных зависимостей
СОТР_НОМЕР -> ОТД_НОМЕР и ОТД_НОМЕР -> -> СОТР_ЗАРП.
Можно произвести декомпозицию отношения СОТРУДНИКИ-ОТДЕЛЫ в два отношения:
СОТРУДНИКИ (СОТР_НОМЕР, ОТД_НОМЕР)
Первичный ключ: СОТР_НОМЕР
Функциональная зависимость:
СОТР_НОМЕР -> ОТД_НОМЕР
ОТДЕЛЫ (ОТД_НОМЕР, СОТР_ЗАРП)
Первичный ключ: ОТД_НОМЕР
Функциональная зависимость:
ОТД_НОМЕР -> СОТР_ЗАРП
Каждое из этих двух отношений находится в ЗОТ».
Данному случаю в теории отображений соответствует граф классов и отображений, приведенный на рис. 1.
СОТР НОМЕР
М
СОТР ЗАРП
1
М
СОТР_ЗАДАН ПРО_НОМЕР ОТД_НОМЕР Рис. 1. Граф классов и отображений для первого примера
Каждой связи соответствует одно отношение, функциональные отображения определяют первичные ключи отношений (они являются множествами прообразов этих отображений). Обратите внимание, что функциональная зависимость СОТР_НОМЕР ->
СОТР_ЗАРП представлена функциональным отображением, являющимся композицией функциональных отображений СОТР_НОМЕР -> ОТД_НОМЕР и ОТД_НОМЕР -> СОТР_ЗАРП.
В данном случае мы не стали переименовывать классы объектов, хотя по-хорошему для более точного отражения семантики граф должен быть таким, каким он показан на рис. 2.
ЗАДАНИЕ ПРОЕКТ ОТДЕЛ
Рис. 2. Граф классов и отображений для первого примера с правильно поименованными классами
ПРИВЕДЕНИЕ ОТНОШЕНИЙ К НОРМАЛЬНОЙ ФОРМЕ БОЙСА - КОДДА
На эту тему Кузнецовым предлагается следующий пример и решение [2]:
«Рассмотрим следующий пример схемы отношения:
СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР,
СОТР_ИМЯ, ПРО_НОМЕР, СОТР_ЗАДАН) Возможные ключи:
СОТР_НОМЕР, ПРО_НОМЕР и СОТР_ИМЯ, ПРО_НОМЕР Функциональные зависимости:
СОТР_НОМЕР -> СОТР_ИМЯ СОТР_НОМЕР -> ПРО_НОМЕР СОТР_ИМЯ -> СОТР_НОМЕР СОТР_ИМЯ -> ПРО_НОМЕР СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН СОТР_ИМЯ, ПРО_НОМЕР -> СОТР_ЗАДАН
В этом примере мы предполагаем, что личность сотрудника полностью определяется как его номером, так и именем (это не очень жизненное предположение, но достаточное для примера).
Независимо от того, какой из возможных ключей выбран в качестве первичного ключа, эта схема находится в 3№. Однако тот факт, что имеются функциональные зависимости атрибутов отношения от атрибута, являющегося частью первичного ключа, приводит к аномалиям. Например, для того, чтобы изменить имя сотрудника с данным номером согласованным образом, нам потребуется модифицировать все кортежи, включающие его номер.
Очевидно, что требование нормальной формы Бойса - Кодда не выполнено для отношения СОТРУДНИКИ-ПРОЕКТЫ. Можно произвести его декомпозицию к отношениям:
СОТРУДНИКИ (СОТР_НОМЕР, СОТР_ИМЯ) Возможные ключи:
СОТР_НОМЕР и СОТР_ИМЯ Функциональные зависимости:
СОТР_НОМЕР -> СОТР_ИМЯ СОТР_ИМЯ -> СОТР_НОМЕР
СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР,
ПРО_НОМЕР, СОТР_ЗАДАН)
Возможный ключ:
СОТР_НОМЕР, ПРО_НОМЕР
Функциональная зависимость:
СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН
Возможна альтернативная декомпозиция, если выбрать за основу СОТР_ИМЯ. В обоих случаях получаемые отношения СОТРУДНИКИ и СОТРУДНИКИ-ПРОЕКТЫ находятся в ВС№».
Налицо ошибка Кузнецова при формулировке функциональных зависимостей, две из них, а именно СОТР_НОМЕР -> ПРО_НОМЕР и СОТР_ИМЯ -> -> ПРО_НОМЕР, попали в список явно по недоразумению. В зависимости от того, исключать или нет эти
зависимости, получаются две различных ситуации (и обе не соответствуют выводам Кузнецова):
- если зависимости исключить, то исходное отношение не находится в 3№, но в процессе декомпозиции получается тот же результат;
- если зависимости оставить, то исходное отношение находится в 3№ и, более того, в ВСМБ и декомпозиция не требуется.
Мы проанализируем обе ситуации - без этих зависимостей и с ними. И сначала в каждом из этих случаев ответим на вопрос: «Находится ли исходное отношение СОТРУДНИКИ-ПРОЕКТЫ в 3КБ?». Здесь мы столкнемся с одной из загадок классического подхода.
Имеется четыре якобы эквивалентных определения 3№. Чтобы можно было сравнивать эти определения, дадим их с подачи одного, но весьма уважаемого автора - Дейта [3].
Определение 3ОТ-1. Третья нормальная форма (в определении предполагается наличие только одного потенциального (синоним - возможного) ключа, который и является первичным ключом отношения -оговорка Дейта). Переменная-отношение находится в третьей нормальной форме тогда и только тогда, когда она находится во второй нормальной форме, и каждый неключевой атрибут нетранзитивно зависит от ее первичного ключа.
Определение 3ОТ-2. Третья нормальная форма (очень неформальное определение - оговорка Дейта). Переменная-отношение находится в третьей нормальной форме тогда и только тогда, когда ее неключевые атрибуты (если они вообще есть) являются:
- взаимно независимыми;
- неприводимо (синоним - полностью) зависимыми от первичного ключа.
«Вашему вниманию предлагается весьма элегантное (и абсолютно точное) определение 3ОТ и ВС№, данное Заниоло. Сначала приведем определение 3№.
Определение 3ОТ-3. Пусть дана переменная-отношение Я, X является некоторым подмножеством атрибутов этой переменной-отношения Я и А является некоторым отдельным атрибутом переменной-отношения Я. Переменная-отношение Я находится в третьей нормальной форме тогда и только тогда, когда для каждой функциональной зависимости X -> А в переменной-отношении Я истинно, по крайней мере, одно из следующих утверждений:
- подмножество X включает атрибут А;
- подмножество X является суперключом переменной-отношения Я (суперключ - это множество атрибутов, которое в виде подмножества содержит, по крайней мере, один потенциальный ключ);
- атрибут А входит в состав некоторого потенциального ключа переменной-отношения Я.
Определение ВС№ можно получить из приведенного выше определения, просто опустив третье утверждение (из чего следует, что ВСМБ является более строгим ограничением по сравнению с 3№)».
Определение 3ОТ-4. Третья нормальная форма (еще более неформальное определение - оговорка Дейта). Переменная-отношение находится в третьей нормальной форме тогда и только тогда, когда каждый кортеж состоит из значения первичного ключа,
идентифицирующего некоторую сущность, и набора из нуля или более взаимно независимых атрибутов, некоторым образом описывающих эту сущность».
А теперь проанализируем предложенный Кузнецовым пример.
Первый случай (опускаем упомянутые функциональные зависимости).
СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР, СОТР_ИМЯ, ПРО_НОМЕР, СОТР_ЗАДАН) Возможные ключи:
СОТР_НОМЕР, ПРО_НОМЕР и СОТР_ИМЯ, ПРО_НОМЕР Функциональные зависимости:
СОТР_НОМЕР -> СОТР_ИМЯ СОТР_ИМЯ -> СОТР_НОМЕР СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН СОТР_ИМЯ, ПРО_НОМЕР -> СОТР_ЗАДАН
Проверяем 3№:
- определение 3ОТ-1 неприменимо, поскольку у нас два возможных ключа (кстати, если бы не было оговорки, то ответ был бы отрицательным, поскольку отношение не удовлетворяет условию 2МБ);
- по определению 3ОТ-2 отношение не находится в 3№, поскольку не выполнено второе условие (если первичный ключ - СОТР_НОМЕР, ПРО_НОМЕР, то неключевой атрибут СОТР_ИМЯ зависит от части первичного ключа СОТР_НОМЕР, аналогично и для другого первичного ключа);
- по определению 3ОТ-3 отношение находится в 3№, поскольку:
- для ФЗ СОТР_НОМЕР -> СОТР_ИМЯ выполнено третье условие;
- для ФЗ СОТР_ИМЯ -> СОТР_НОМЕР выполнено третье условие;
- для ФЗ СОТР_НОМЕР, ПРО_НОМЕР -> -> СОТР_ЗАДАН выполнено второе условие;
- для ФЗ СОТР_ИМЯ, ПРО_НОМЕР -> -> СОТР_ЗАДАН выполнено второе условие;
- по определению 3ОТ-4 отношение не находится в 3№, поскольку кортеж отношения описывает сразу две сущности: участие сотрудника в проекте и самого сотрудника, характеристикой первой является СОТР_ЗАДАН, а характеристикой второй -СОТР_ИМЯ.
Оставим эту загадку на совести теоретиков классического подхода. Посмотрим, к каким результатам приведет теория отображений.
Данному случаю соответствует граф классов и отображений, показанный на рис. 3.
Рис. 3. Граф классов и отображений для второго примера (первый случай)
Каждой связи соответствует одно отношение, функциональные отображения определяют возможные ключи отношений. Атрибут СОТР_НОМЕР выбран в качестве первичного ключа отношения СОТРУДНИК, и именно он представляет во втором отношении объекты этого класса. Функциональная зависимость СОТР_ИМЯ, ПРО_НОМЕР ->
-> СОТР_ЗАДАН представлена функциональным отображением, являющимся композицией функциональных отображений ИМЯ -> СОТРУДНИК и СОТРУДНИК, ПРОЕКТ -> ЗАДАНИЕ.
СОТРУДНИК (СОТР_НОМЕР, СОТР_ИМЯ) Возможные ключи:
СОТР_НОМЕР и СОТР_ИМЯ
Функциональные зависимости:
СОТР_НОМЕР -> СОТР_ИМЯ СОТР_ИМЯ -> СОТР_НОМЕР
СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР, ПРО_НОМЕР, СОТР_ЗАДАН)
Возможный ключ:
СОТР_НОМЕР, ПРО_НОМЕР
Функциональная зависимость:
СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН
Второй случай (с учетом упомянутых функциональных зависимостей).
СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР, СОТР_ИМЯ, ПРО_НОМЕР, СОТР_ЗАДАН)
Возможные ключи:
СОТР_НОМЕР, ПРО_НОМЕР и СОТР_ИМЯ, ПРО_НОМЕР
Функциональные зависимости:
СОТР_НОМЕР -> СОТР_ИМЯ СОТР_НОМЕР -> ПРО_НОМЕР СОТР_ИМЯ -> СОТР_НОМЕР СОТР_ИМЯ -> ПРО_НОМЕР СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН СОТР_ИМЯ, ПРО_НОМЕР -> СОТР_ЗАДАН Для начала построим минимальное покрытие функциональных зависимостей - эквивалентный исходному набор ФЗ, в котором представлены только неизбыточные ФЗ. Именно такие ФЗ позволяют выделить детерминанты отношения.
Проанализируем функциональные зависимости:
- СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН заменяем на СОТР_НОМЕР -> СОТР_ЗАДАН.
Покажем, что набор ФЗ СОТР_НОМЕР -> -> ПРО_НОМЕР и СОТР_НОМЕР, ПРО_НОМЕР -> -> СОТР_ЗАДАН эквивалентен набору функциональных зависимостей СОТР_НОМЕР -> ПРО_НОМЕР и СОТР_НОМЕР -> СОТР_ЗАДАН, что даст нам право на такую замену. Правила вывода возьмем в [3]. Второй набор является следствием первого:
По правилу дополнения (если А -> В, то АС -> ВС) из первой ФЗ имеем СОТР_НОМЕР, СОТР_НОМЕР -> -> ПРО_НОМЕР, СОТР_НОМЕР.
По правилу транзитивности (если А -> В и В -> С, то А -> С) из только что полученного и второй ФЗ имеем СОТР_НОМЕР, СОТР_НОМЕР -> СОТР_ ЗАДАН или СОТР_НОМЕР -> СОТР_ЗАДАН.
Первый набор является следствием второго:
По правилу дополнения (если А -> В, то АС -> ВС) из второй ФЗ имеем СОТР_НОМЕР, ПРО_НОМЕР -> ПРО_НОМЕР, СОТР_ЗАДАН.
По правилу рефлексивности (если множество атрибутов В является подмножеством множества атрибутов А, то А -> В) имеем ПРО_НОМЕР, СОТР_ЗАДАН -> СОТР_ЗАДАН.
По правилу транзитивности (если А -> В и В -> С, то А -> С) из только что полученных ФЗ имеем СОТР_НОМЕР, ПРО_НОМЕР -> СОТР_ЗАДАН.
- СОТР_ИМЯ, ПРО_НОМЕР -> СОТР_ЗАДАН аналогично заменяем на СОТР_ИМЯ -> -> СОТР_ЗАДАН.
- СОТР_ИМЯ -> ПРО_НОМЕР удаляем (избыточна, поскольку является следствием СОТР_ИМЯ -> -> СОТР_НОМЕР и СОТР_НОМЕР -> ПРО_НОМЕР).
- СОТР_ИМЯ -> СОТР_ЗАДАН удаляем (избыточна, поскольку является следствием СОТР_ИМЯ -> -> СОТР_НОМЕР и СОТР_НОМЕР -> СОТР_ЗАДАН).
Таким образом, имеем следующее минимальное покрытие функциональных зависимостей: СОТР_НОМЕР -> СОТР_ИМЯ СОТР_ИМЯ -> СОТР_НОМЕР СОТР_НОМЕР -> ПРО_НОМЕР СОТР_НОМЕР -> СОТР_ЗАДАН Возможные ключи:
СОТР_НОМЕР и СОТР_ИМЯ Проверяем 3№:
- определение 3ОТ-1 неприменимо, поскольку у нас два возможных ключа;
- по определению 3КБ-2 отношение находится в 3№;
- по определению 3ОТ-3 отношение находится в 3№, поскольку для всех ФЗ выполнено второе условие;
- по определению 3КБ-4 отношение находится в 3№, поскольку кортеж отношения описывает сущность сотрудника со всеми ее характеристиками -именем, номером проекта, в котором он участвует, и заданием, которое он при этом выполняет.
Более того, отношение СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР, СОТР_ИМЯ, ПРО_НОМЕР,
СОТР_ЗАДАН) находится в нормальной форме Бойса - Кодда (каждый детерминант является возможным ключом) и декомпозиции не подлежит.
Данному случаю соответствует граф классов и отображений, показанный на рис. 4.
Рис. 4. Граф классов и отображений для второго примера (второй случай)
Здесь достаточно одного отношения СОТРУДНИКИ-ПРОЕКТЫ (СОТР_НОМЕР, СОТР_ИМЯ,
ПРО_НОМЕР, СОТР_ЗАДАН) с возможными ключами СОТР_НОМЕР и СОТР_ИМЯ и первичным ключом СОТР_НОМЕР.
ПРИВЕДЕНИЕ ОТНОШЕНИЙ К ЧЕТВЕРТОЙ НОРМАЛЬНОЙ ФОРМЕ
Для этого этапа нормализации Кузнецов предлагает следующий пример [2]:
«Рассмотрим пример следующей схемы отношения ПРОЕКТЫ (ПРО_НОМЕР, ПРО_СОТР, ПРО_ЗАДАН).
Отношение ПРОЕКТЫ содержит номера проектов, для каждого проекта - список сотрудников, которые могут выполнять проект, и список заданий, предусматриваемых проектом. Сотрудники могут участвовать в нескольких проектах, и разные проекты могут включать одинаковые задания.
Каждый кортеж отношения связывает некоторый проект с сотрудником, участвующим в этом проекте, и заданием, который сотрудник выполняет в рамках данного проекта (мы предполагаем, что любой сотрудник, участвующий в проекте, выполняет все задания, предусмотренные этим проектом). По причине сформулированных выше условий единственным возможным ключом отношения является составной атрибут ПРО_НОМЕР, ПРО_СОТР, ПРО_ЗАДАН, и нет никаких других детерминантов. Следовательно, отношение ПРОЕКТЫ находится в ВС№. Но при этом оно обладает недостатками: если, например, некоторый сотрудник присоединяется к данному проекту, необходимо вставить в отношение ПРОЕКТЫ столько кортежей, сколько заданий в нем предусмотрено.
В отношении ПРОЕКТЫ существуют следующие две многозначные зависимости:
ПРО_НОМЕР ->> ПРО_СОТР
ПРО_НОМЕР ->> ПРО_ЗАДАН.
В нашем примере можно произвести декомпозицию отношения ПРОЕКТЫ в два отношения:
ПРОЕКТЫ-СОТРУДНИКИ (ПРО_НОМЕР, ПРО_ СОТР)
ПРОЕКТЫ-ЗАДАНИЯ (ПРО_НОМЕР, ПРО_ ЗАДАН).
Оба эти отношения находятся в 4КБ и свободны от отмеченных аномалий».
Данному случаю соответствует граф классов и отображений, показанный на рис. 5:
Рис. 5. Граф классов и отображений для третьего примера
В данном случае вообще ни к чему рассматривать тернарную связь, поскольку по представленному описанию существенными являются две бинарные связи
и соответствующие отображения (на рисунке они показаны сплошными линиями). Связь между заданиями и сотрудниками происходит исключительно через проекты и представляет собой композицию этих бинарных связей.
Каждой бинарной связи соответствует одно отношение, отсутствие функциональных отображений говорит о том, что первичные ключи каждого отношения представляют все атрибуты этого отношения.
Как мы отметили, в таких случаях вообще не стоит определять тернарную связь, но, тем не менее, такие ситуации возможны. Встает вопрос, как распознавать такие случаи и заменять тернарную связь парой бинарных.
Прежде всего, отметим, что подобный анализ следует применять лишь в том случае, когда все определяющие роли отображения нефункциональны. В противном случае надо просто следовать этим отображениям, как мы это делали в предыдущих примерах, и не искать многозначных зависимостей. К сожалению, подобные ошибки допускают и уважаемые авторы [4]:
«Рассмотрим, например, отношение ЛИГА (КОМАНДА, ТРЕНЕР, ИГРОК), где существует зависимость между командой и тренерами, которая, однако, не является функциональной, поскольку нельзя сказать, что команда однозначно определяет тренера. То же самое относится и к зависимости между командой и игроками. Зависимости подобного рода называются многозначными зависимостями (МЗ). Эти МЗ означают, что игроки и тренеры находятся в зависимости от команды, но не друг от друга».
В этом случае граф классов и отображений выглядит, как показано на рис. 6.
КОМАНДА 1/ \ 1
М ТРЕНЕР
Рис. 6. Граф классов и отображений для примера с командами, тренерами и игроками
Причем функциональные бинарные отображения настолько очевидны, что никому и не придет в голову попытка использования в данном случае тернарной связи.
Но вернемся к многозначной зависимости.
Теорема 1. Пусть имеется три множества X, У, 2. Если выполнены следующие условия:
- проекция отображения X -> У х 2 на роль У эквивалентна отображению X -> У,
- проекция отображения X -> У х 2 на роль 2 эквивалентна отображению X -> 2,
- композиция отображений У -> X и X -> 2 эквивалентна отображению У -> 2 или композиция отображений 2 -> X и X -> У эквивалентна отображению 2 -> У, то имеет место многозначная зависимость X ->> У | 2. Доказательство теоремы приведено в Приложении 1.
М ИГРОК
Из текстового описания предметной области ясно, что кандидатом на связующее звено (множество X) является класс ПРОЕКТ. В таком случае необходимо убедиться в истинности следующих фактов:
- проекция отображения ПРОЕКТ -> СОТРУДНИК х ЗАДАНИЕ на роль СОТРУДНИК эквивалентна отображению ПРОЕКТ -> СОТРУДНИК;
- проекция отображения ПРОЕКТ -> СОТРУДНИК х ЗАДАНИЕ на роль ЗАДАНИЕ эквивалентна отображению ПРОЕКТ -> ЗАДАНИЕ;
- композиция отображений СОТРУДНИК -> ПРОЕКТ и ПРОЕКТ -> ЗАДАНИЕ эквивалентна отображению СОТРУДНИК -> ЗАДАНИЕ или композиция отображений ЗАДАНИЕ -> ПРОЕКТ и ПРОЕКТ -> -> СОТРУДНИК эквивалентна отображению ЗАДАНИЕ -> СОТРУДНИК.
Если все эти факты истинны, вы имеете многозначную зависимость ПРОЕКТ ->> ЗАДАНИЕ | СОТРУДНИК и в этом случае надо заменять тернарную связь парой бинарных.
Для того, чтобы опровергнуть первый факт, надо утвердительно ответить на вопрос «Возможна ли связь проекта с сотрудником вне выполнения задания?» Для второго факта вопрос звучит так: «Возможно ли определение задания по проекту без его связи хотя бы с одним сотрудником?» Для третьего факта - «Существует ли сотрудник, работающий по проекту, который выполняет не все задания этого проекта?» или «Существует ли задание проекта, которое выполняется не всеми сотрудниками этого проекта?» Ответить на все эти вопросы, по-видимому, не составит труда. Последние два факта и, соответственно, вопроса эквивалентны.
ПРИВЕДЕНИЕ ОТНОШЕНИЙ К ПЯТОЙ НОРМАЛЬНОЙ ФОРМЕ
Воспользуемся хрестоматийным примером из [3].
«В качестве примера рассмотрим переменную-отношение ПОСТАВЩИК-ПРОЕКТ-ДЕТАЛЬ:
БР/(Б#, Р#, /#), где атрибуты представляют номер поставщика, номер проекта и номер детали соответственно. Эта переменная-отношение состоит только из ключевых атрибутов, не содержит нетривиальных функциональных и многозначных зависимостей и потому находится в 4№.
Рассмотрим также три бинарные проекции БР/: БР, Р/ и /Б. Утверждение «переменная-отношение БР/ равна соединению трех своих проекций БР, Р/ и /Б» в точности эквивалентно следующему утверждению: ЕСЛИ (^1, р\) е БР И (рь j-i) е Р/ И (/ь ^1) е /Б, ТО (*, рь jl) е БР/.
Что означает зависимость соединения с практической точки зрения? Под таким ограничением понимается истинность следующего высказывания:
Если верны утверждения «Смит поставляет гаечные ключи», «Гаечные ключи используются в Манхэттенском проекте» и «Смит является поставщиком для Манхэттенского проекта», то верно и утверждение «Смит поставляет гаечные ключи для Манхэттенского проекта».
В связи с наличием зависимости соединения переменная-отношение БР/ характеризуется многочис-
ленными аномалиями обновления, которые можно устранить декомпозицией ее на SP, PJ и JS.
Переменная-отношение R находится в пятой нормальной форме, которую иногда иначе называют проекционно-соединительной, тогда и только тогда, когда каждая нетривиальная (когда в рассматриваемом наборе проекций нет проекции, совпадающей с R) зависимость соединения в переменной-отношении R подразумевается ее потенциальными ключами.
Теперь следует объяснить, что означает понятие «зависимость соединения, подразумеваемая потенциальными ключами». Для начала в качестве простого примера рассмотрим переменную-отношение поставщиков S (S#, SNAME, STATUS, CITY) с потенциальными ключами S# и SNAME. Такая переменная-отношение удовлетворяет нескольким зависимостям соединения, в частности:
* {{S#, SNAME, STATUS}, {S#, CITY}} и
* {{S#, SNAME}, {S#, STATUS}, {SNAME, CITY}}.
Зависимость соединения *{A, B, ..., Z} подразумевается потенциальными ключами тогда и только тогда, когда каждое подмножество атрибутов A, B, ..., Z фактически является суперключом для данной переменной-отношения.
В данном случае во все подмножества атрибутов обеих зависимостей входят потенциальные ключи, а значит S находится в 5NF, и ее можно, но не следует подвергать декомпозиции.
В отличие от функциональных и многозначных зависимостей (для которых обычно существует вполне очевидное обоснование в реальном мире) обнаружить все зависимости соединения совсем не просто. Суть в том, что смысловое значение зависимостей соединения, которые не являются одновременно многозначными и функциональными, далеко не всегда очевидно. Следовательно, процедура определения того, что некоторая переменная-отношение все еще находится в 4NF, а не в 5NF, и, таким образом, существует возможность ее дальнейшей декомпозиции, все еще остается не вполне ясной».
На такой минорной ноте апологет классического подхода к проектированию реляционных схем БД завершает обзор нормальных форм. Давайте теперь посмотрим на зависимость соединения и 5NF с позиций теории отображений.
Первому примеру из [3] соответствует следующий граф классов и отображений (рис. 7).
Рис. 7. Граф классов и отображений для примера с поставщиками, деталями и проектами
Теорема 2. Пусть имеется три множества X, У, 2. Если выполнены следующие условия:
- проекция отображения X -> У х 2 на роль У эквивалентна отображению X -> У,
- проекция отображения У -> X х 2 на роль 2 эквивалентна отображению У -> 2,
- проекция отображения 2 -> X х У на роль X эквивалентна отображению 2 -> X,
то имеет место зависимость соединения * (XY, У2, 2X). Доказательство теоремы приведено в Приложении 2.
Для того, чтобы убедиться в необходимости замены тернарной связи тремя бинарными, необходимо определить истинность следующих фактов:
- проекция отображения ПРОЕКТ -> ПОСТАВЩИК х ДЕТАЛЬ на роль ПОСТАВЩИК эквивалентна отображению ПРОЕКТ -> ПОСТАВЩИК (или, что эквивалентно, - проекция отображения ПОСТАВЩИК ->ДЕТАЛЬ х ПРОЕКТ на роль ПРОЕКТ эквивалентна отображению ПОСТАВЩИК -> ПРОЕКТ);
- проекция отображения ПОСТАВЩИК -> ДЕТАЛЬ х ПРОЕКТ на роль ДЕТАЛЬ эквивалентна отображению ПОСТАВЩИК -> ДЕТАЛЬ (или, что эквивалентно, - проекция отображения ДЕТАЛЬ -> ПОСТАВЩИК х ПРОЕКТ на роль ПОСТАВЩИК эквивалентна отображению ДЕТАЛЬ -> ПОСТАВЩИК);
- проекция отображения ДЕТАЛЬ -> ПОСТАВЩИК х ПРОЕКТ на роль ПРОЕКТ эквивалентна отображению ДЕТАЛЬ -> ПРОЕКТ (или, что эквивалентно, - проекция отображения ПРОЕКТ -> ПОСТАВЩИК х ДЕТАЛЬ на роль ДЕТАЛЬ эквивалентна отображению ПРОЕКТ -> ДЕТАЛЬ);
- композиция отображений ПОСТАВЩИК -> -> ПРОЕКТ и ПРОЕКТ -> ДЕТАЛЬ не эквивалентна отображению ПОСТАВЩИК -> ДЕТАЛЬ (или, что эквивалентно, - композиция отображений ДЕТАЛЬ -> -> ПРОЕКТ и ПРОЕКТ -> ПОСТАВЩИК не эквивалентна отображению ДЕТАЛЬ -> ПОСТАВЩИК);
- композиция отображений ДЕТАЛЬ -> ПОСТАВЩИК и ПОСТАВЩИК -> ПРОЕКТ не эквивалентна отображению ДЕТАЛЬ -> ПРОЕКТ (или, что эквивалентно, - композиция отображений ПРОЕКТ -> -> ПОСТАВЩИК и ПОСТАВЩИК -> ДЕТАЛЬ не эквивалентна отображению ПРОЕКТ -> ДЕТАЛЬ);
- композиция отображений ПРОЕКТ -> ДЕТАЛЬ и ДЕТАЛЬ -> ПОСТАВЩИК не эквивалентна отображению ПРОЕКТ -> ПОСТАВЩИК (или, что эквивалентно, - композиция отображений ПОСТАВЩИК -> -> ДЕТАЛЬ и ДЕТАЛЬ -> ПРОЕКТ не эквивалентна отображению ПОСТАВЩИК -> ПРОЕКТ).
Если все эти факты истинны, вы имеете зависимость соединения * (БР, РІ и ІБ) и в этом случае надо заменять тернарную связь тремя бинарными. Вообще, истинность первых трех фактов свидетельствует о наличии либо просто зависимости соединения, либо ее более строгого частного случая - многозначной зависимости. Если какой-то из оставшихся фактов ложен, имеем соответствующую многозначную зависимость, если все они истинны - только зависимость соединения.
Для того, чтобы опровергнуть первый факт, надо утвердительно ответить на вопрос «Возможна ли связь проекта с поставщиком без поставки им хотя бы одной детали для этого проекта?» Для второго факта
вопрос звучит так: «Возможна ли поставка детали поставщиком не по проекту?» Для третьего факта -«Возможно ли использование детали по проекту, если она не поставлялась никаким поставщиком?»
Второму примеру из [3] (с отношением поставщиков Б) соответствует граф классов и отображений, показанный на рис. 8.
STATUS CITY
Рис. 8. Граф классов и отображений для примера с поставщиками
Здесь наблюдается функциональность всех отображений, определяющих роли, причем она связана с наличием двух возможных ключей Б# и БМЛМБ. Декомпозиция не требуется.
К сожалению, ограниченный объем статьи позволил рассмотреть лишь часть примеров использования теории семантически значимых отображений для проектирования реляционных баз данных. Но и этого, по-видимому, достаточно, чтобы сделать вывод о возможности ее использования для этих целей.
ПРИЛОЖЕНИЕ 1. ДОКАЗАТЕЛЬСТВО ТЕОРЕМЫ 1
Для доказательства воспользуемся рис. 9.
Ф21 Ф2
Рис. 9. Граф классов и отображений
На нем представлены три бинарных и одна тернарная связь, определяющие следующие отображения:
Ф1 : X -> У, ф-1: У -> X, ф2: У -> 2,
Ф-1 : 2 -> У, ф3: 2 -> X, ф-1 : X -> 2, у1 : X -> У х 2, у-1: У х 2 -> X, у2: У -> X х 2, у-1: X х 2 -> У, у3: 2 -> X х У, у-1: X х У -> 2.
Для формального представления МЗ воспользуемся более строгим ее определением, данным Мейером [5]:
«Пусть Я - реляционная схема, X и У - непересе-кающиеся подмножества Я, и пусть 2 = Я - (XУ). Отношение г(Я) удовлетворяет многозначной зависимости (МУ-зависимости) X ->> У, если для любых двух кортежей ¿1 и ¿2 из Г, для которых ¿1 (X) = ¿2 (X), в г существует кортеж ¿3, для которого выполнены соотношения ¿3 (X) = ¿1 (X), ¿3 (У) = ¿1 (У) и ¿3 (2) = ¿2 (2).
Из симметрии определения относительно ¿1 и ¿2 следует, что в г существует также t4, для которого ¿4 (X) = ч (X), ^ (У) = t2 (У) и ^ (2) = ^ (2)».
В реляционном исчислении с переменными-кортежами условие, при котором наблюдается МЗ X ->> У, примет вид:
^¿2 (Я(4 ) А Я (¿2 ) А 4 [X] = ¿2 [X] ^
^ЗЧ3 (Я(Ч3) АЧ3[X] = ^[X] а А3[У ] = 4[У ] а ¿3[ 2 ] = ¿¿2 ])а аЗ ¿4 (Я (¿4) А ¿4[ X ] = ¿1[ X ] А
М,[У] = ¿2 [У] А ¿4[2] = 4[2 ])) .
После эквивалентного перевода этого выражения в реляционное исчисление с переменными на доменах получим:
Ух1Уу1^21Ух7^у7^22 (Я(х1 у171) А А Я( х2 у222) А х = х2 ^
^Эх3Эу3Эг3 (Я(х3у373) АХ3 = х1 Ау3 = у1 А23 = 22)а АЭх4Эу4Э24 (Я(х4у4¿4) Ах4 = х1 Ау4 = у2 А¿4 = )) .
И, наконец, в исчислении, введенном в теории отображений [1], это выражение примет следующий вид:
Ух1Уу{^21Ух2Уу2У22 (< у1, 21 >=У1 (х1) А А < у2, ^ >=^1 (х2) А х = х2 ^
^ Эх3Эу3Эг3 (< у3 ,23 >= У! (х3 ) А А х3 = х1 А у3 = у1 А 23 = 22 )а А3х43у4324 (< у4,24 >= У1 (х4 ) А
А х4 = х1 А у4 = у2 А 24 = 2 )) . (1)
Теперь запишем формально приведенные нами факты, достаточные, по нашему мнению, для наличия МЗ:
1) проекция отображения у1 : X -> У х 2 на роль У
эквивалентна отображению ф1 : X -> У. По определению проекции [1] имеем
УхУу(у = У1 [У](х) ^ 32 < у,2 >= У1 (х)) . (2)
По определению эквивалентности отображений [1] УхУу(у = У1 [У](х) ^ у = ф1 (х)) . (3)
Делая в (2) эквивалентную замену, согласно (3), имеем
УхУу (у = ф1(х) ^32 < у, 2 >=У1(х)) . (4)
2) проекция отображения у1 : X -> У х 2 на роль 2
эквивалентна отображению ф-1: X -> 2. По определению проекции имеем
УхУ2(2 = у1 [2](х)О'Зу<у,2>=у1 (х)) . (5)
По определению эквивалентности отображений
УхУ2 ( = У1[2](х) О 2 =ф-1(х)) . (6)
Делая в (5) эквивалентную замену, согласно (6), имеем
УхУ2 ( = ф-1 (х) О' 3у < у, 2 >= У1 (х)) . (7)
3) композиция отображений ф-1: У -> X и ф-1 :
X -> 2 эквивалентна отображению ф2: У -> 2. По определению композиции [1]
УуУг (г = ф-1 (ф-1( у))°
О3х(х = ф1-1(у) А2 = ф-Чх))) . (8)
По определению эквивалентности отображений
УуУ2 (2 = ф-1 (ф-1 (у)) О 2 = ф2 (у)) . (9)
Делая в (8) эквивалентную замену в соответствии с (9), получаем
УуУ2( = ф2 (У) О3х(х = ф-1 (у) А 2 = ф-1 (х))) . (10)
4) композиция отображений ф3: 2 -> X и ф1 : X -> У
эквивалентна отображению ф2-1 : 2 -> У. По определению композиции
УуУ2 (у = ф1 (ф3( 2))°
О3х (х = ф3(2) А у = ф(х))) . (11)
По определению эквивалентности отображений УуУ2 (у = ф1 (ф3 (2)) О у = ф-1 (2)) . (12)
Делая в (11) эквивалентную замену в соответствии с (12), получаем
УуУ 2 (^ = ф-Ч 2) О3х (х = ф3(2) А у = ф (х))) . (13)
Итак, если истинны приведенные факты, формулы (4), (7), (10) и (13) общезначимы.
Пусть истинна посылка 1:
Ух1 Уу У21Ух2Уу2У22 (< у1, 21 >= У1 (х1) А А < у2,22 >=У1 (х2) А х1 = х2 ) .
В силу истинности Ух1Уу1У21 (<У1,21 >=У1(х1)) истинна и Ух1Уу1321 (< (,21 >=у1 (х1)^, а в соответствии с (4) - и Ух1Уу1 ( = ф1 (х1)). По определению инверсии [1] истинна также формула Ух1Уу1 (х1 = ф-1 (у1)).
В силу истинности Ух1Уу1У21 (<у1,21 >=У1(х1)) истинна и Ух1У213у1 (<у1,21 >=у1 (х1)^, а в соответствии с (7) - и Ух1У21 (21 = ф-1 (х1)) .
Рассуждая аналогично для второго конъюнкта посылки, как следствие имеем истинные формулы:
Ух2^у2 (х2 = ф-1 (у2 )) и Ух2У22 (22 = ф-1 (х2 )) .
Таким образом, следствием посылки является следующая формула:
Ух1Уу У21Ух2Уу2У22 (х1 = ф-1 (у1) А 22 = ф-1 (х2 ) А Ах2 = ф-1 (у2 ) А 21 =ф-1( х) А х = х2 ) ,
а значит и
Ух1 Уу1 У21 Уу2 У22 (х = ф-1 (у1) А
А22 = ф-1(X) А х1 = ф-1 (у2 ) А 21 =ф-1(х)) . (14)
В силу истинности
Ух'Уу^22 (х1 =ф-1 (у1)А22 =ф-1 (х1)) истинна и
Уу1У22 3х1 (х = ф-1 (у1) А 22 = ф-1 (х )) , а в соответствии с (10) - и Уу У22 (2 = ф2 (у1)).
Рассуждая аналогично для второй пары конъюнктов, имеем истинную формулу: Уу2У21 (21 =ф2( у2)).
Таким образом, следствием посылки является следующая формула:
Ух1 Уу1У21 Уу2У22 (22 = ф2 (у ) А 21 = ф2(у2) А
А х1 = ф-1 (у1) А 22 = ф-1 (х1) А
Ах = ф-1 (у2 ) А 21 =ф-1( х^)) . (15)
В соответствии с (10) Уу1У22 (22 =ф2(у1)) эквивалентна Уу1У22 (3х3 (х3 = ф-1 (у1) А 22 = ф-1 (х3))), а поскольку те же самые выражения истинны и для х1 , ничто не мешает тому, что х3 = х1. Аналогично рассуждаем для второго конъюнкта (15) и приходим к следующему следствию посылки:
Ух1Уу1У21Уу2У223х33х4 (х3 =ф-1 (у1) А22 =ф-1 (х3) А
Ах4 =ф-1(у2) А 21 =ф-1(х4) А х3 = х1 А х4 = х1) (16)
Имея в виду эквивалентность предикатов для инверсных отображений ф1 и ф-1, используя (4) и (7),
преобразуем (16) в:
Ух1Уу1У21Уу2У223х33у33233х43у4324 (<у1,23 >=
= У1 (х3)А< у3,22 >=У1 (х3)А< у2,24 >= У1 ^4) А
А <у4,21 >=У1 (х4) Ах3 =х1 Ах4 = х1) . (17)
Поскольку первые четыре конъюнкта должны быть истинны для Уу1У21Уу2У22 , ничто не мешает им быть истинными и для конкретных у3 23у4 24 , а
значит следствием (17) является следующая формула:
Ух1Уу1У21Уу2У223х33у33233х43у4324 (< у3,23 >=
= У1 (х3)Ау3 = у1 А<Уз,23 >=У1 (х3)А23 = 22 А
А = У1 (х4) А24 = 21 А х3 = х А х4 = х1) А
А < у4,24 >=У1 (х4) А у4 = у2 А< у4, 24 >= .
Если в последней формуле исключить совпадающие конъюнкты, то с точностью до перестановки оставшихся конъюнктов она совпадает с заключением (1), что подтверждает, что из истинности ранее предложенных фактов следует наличие многозначной зависимости.
Обратите внимание, что в доказательстве использовалась только формула (10), а эквивалентная ей формула (13) не пригодилась.
ПРИЛОЖЕНИЕ 2.
ДОКАЗАТЕЛЬСТВО ТЕОРЕМЫ 2
Для формального представления зависимости соединения воспользуемся приведенным определением Дейта. В реляционном исчислении с переменными-кортежами условие, при котором наблюдается зависимость соединения * (^У, У2, 2.X), примет вид У ^У ¿2У ¿3 (АТ(¿1) а У2 (¿2) а 2X(¿3) а ¿1 [У] = ¿2 [У] а
Аt2[Z ] = ¿3[2 ] А ¿3[X] = ¿1[X] ^
^3 ¿4 (XV.2 (¿4) а ¿4 [ X ] = ^ ] а А4[У ] = ¿2 [У ] А ¿4[ 2 ] = ¿3[ 2 ])) .
После эквивалентного перевода выражения в реляционное исчисление с переменными на доменах получим
Ух1Уу1У21Ух2Уу2У22Ух3Уу3У23 2X7(х у) А аУ2 (у2 22) А 2Т (23 х3) А у1 = у2 А А22 = 23 А х3 = х1 ^
^ 3х43у4324 (XУ2 (х4у424 ) А х4 = х1 А
Ау4 = у2 А 24 = 23 )) .
И, наконец, в исчислении, введенном в теории отображений [1], это выражение примет следующий вид:
Ух1Уу1У21Ух2Уу2У22Ух3Уу3У23 (у1 =ф1 (х^ А
А22 = ф2 (у2 ) А х3 =ф3(23) А у1 = у2 А А22 = 23 А х3 = х1 ^
^ 3х43у4324 (< у4 , 24 >= у 1 (х4 ) А
А < х4,24 >=у2(у4)А< х4, у4 >=у3(24) А Ах4 = х1 А у4 = у2 А 24 = 23 )) . (18)
Теперь запишем формально приведенные нами факты, достаточные, по нашему мнению, для наличия зависимости соединения (воспользуемся формулами (4), (7) предыдущего доказательства):
1) проекция отображения у1 : X -> У х 2 на роль У эквивалентна отображению ф1 : X -> У
УхУу (у = ф1 (х) о 32 < у, 2 >= У1 (х)); (19)
2) проекция отображения у2: У -> X х 2 на роль 2 эквивалентна отображению ф2 : У -> 2
УуУ2 (2 = ф2 (у) О3х < х, 2 >= У2 (у)) ; (20)
3) проекция отображения у3: 2 -> X х У на роль X эквивалентна отображению ф3: 2 -> X
У2Ух (х = ф3 (2) О 3у < х, у >= У 3 (2)) . (21)
Итак, если истинны приведенные факты, формулы (19), (20) и (21) общезначимы.
Пусть истинна посылка (18):
Ух1Уу1У21Ух2Уу2У22Ух3Уу3У23 (у1 =ф1 (х1) а
А22 = ф2 (у2 ) Ах3 =ф3(23) А у = у2 А
А22 = 23 А х3 = х1) .
Делая в ней эквивалентные замены в соответствии с (19), (20) и (21), получаем
Ух1Уу1У21Ух2Уу2У22Ух3Уу3У233х43у4324 (<у1,24 >=
= У1 (х1)А< х4,22 >= У2 (у2 )А < х3, у4 >= у3(23) А
Ау1 = у2 А 22 = 23 А х3 = х ) . (22)
Поскольку первые три конъюнкта должны быть истинны для Ух1Уу1У21Ух2Уу2У22Ух3Уу3У23 , ничто не мешает им быть истинными и для конкретных х4у424 , а значит следствием (22) является следующая формула:
Ух1Уу1У21Ух2Уу2У22Ух3Уу3У233х43у4324 (< у4,24 >=
= У1 (х4)А< х4,24 >=У 2(у4)а< х4, у4 >=У3(24) А
Ау4 = у1 А х4 = х1 А 24 = 22 А у4 = у2 А х4 = х3 А
А24 = 23 Ау1 = у2 А22 = 23 Ах3 = х1) . (23)
Очевидно, что из (23) следует истинность заключения (18), и это подтверждает, что из истинности ранее предложенных фактов следует наличие зависимости соединения.
ЛИТЕРАТУРА
1. Бабанов А.М. Теория семантически значимых отображений // Вестник ТГУ. 2003. № 280. С. 239-248.
2. Кузнецов С.Д. Введение в СУБД. Ч. 4 // СУБД. 1995. № 4.
3. Дейт К.Дж. Введение в системы баз данных, 7-е изд. М.: Изд. дом «Вильямс», 2001.
4. Цикритзис Д., Лоховски Ф. Модели данных. М.: Финансы и статистика, 1985.
5. Мейер Д. Теория реляционных баз данных. М.: Мир, 1987.
Статья представлена кафедрой теоретических основ информатики факультета информатики Томского государственного университета, поступила в научную редакцию «Кибернетика и информатика» 7 мая 2003 г.