
- •Часть 3 Проектирование базы данных
- •Глава 9. Функциональные зависимости.
- •9.1. Введение
- •9.2. Основные определения
- •9.3. Тривиальные и нетривиальные зависимости
- •9.4. Замыкание множества зависимостей
- •9.5. Замыкание множества атрибутов
- •9.6. Неприводимое множество зависимостей
- •9.7. Резюме
- •Глава 10 Дальнейшая нормализация:
- •1Нф, 2нф, 3нф, нфбк
- •10.1. Введение
- •10.2. Декомпозиция без потерь и функциональные зависимости
- •10.3. Первая, вторая и третья нормальные формы
- •10.4. Сохранение зависимости
- •10.5. Нормальная форма Бойса-Кодда
- •10.6. Резюме
- •Глава 12 Модель типа объект/отношение
- •12.1. Введение
- •12.2. Общий подход
- •12.3. Обзор модели объект/отношение
- •12.4. Диаграммы объект/отношение
- •12.5. Проектирование базы данных на основе модели типа объект/отношение
- •12.6. Краткий анализ
- •12.7. Резюме
9.3. Тривиальные и нетривиальные зависимости
Замечание. Далее в этой главе выражение "функциональная зависимость" будет иногда для краткости заменяться словом "зависимость", а "функционально зависим от" — словами "функционально определяется как" и т.п.
Очевидным способом сокращения размера множества ФЗ было бы исключение тривиальных зависимостей, т.е. таких, которые не могут не выполняться. В качестве примера приведем тривиальную ФЗ для отношения SCP из предыдущего раздела:
{ S#, P# } -> S#
Фактически ФЗ тривиальна тогда и только тогда, когда правая часть символической записи данной зависимости является подмножеством (не обязательно собственным подмножеством) левой части.
Как следует из названия, такие зависимости не представляют никакого интереса с практической точки зрения, в отличие от нетривиальных зависимостей, которые фактически являются "истинными" ограничениями целостности. Однако в формальной теории зависимостей не следует предполагать присутствие только нетривиальных зависимостей.
9.4. Замыкание множества зависимостей
Как уже упоминалось выше, некоторые ФЗ могут означать другие ФЗ. Например, приведенная ниже зависимость
{ S#, Р# } -> { CITY, QTY }
подразумевает следующие ФЗ:
{ S#, Р# } -> CITY
{ S#, P# } -> QTY
В качестве более сложного примера можно привести отношение R с тремя атрибутами А, В и С, для которых выполняются функциональные зависимости А —> В и В —> С. В таком случае нетрудно заметить, что также выполняется зависимость А —> С, которая называется транзитивной функциональной зависимостью, т.е. С транзитивно через В зависит от А.
Множество всех ФЗ, которые задаются данным множеством функциональных зависимостей S, называется замыканием S и обозначается символом S +. Из сказанного выше становится ясно, что для выполнения сформулированной задачи следует найти способ вычисления S+ на основе S. Первой попыткой решить эту проблему была статья Армстронга (Armstrong) [9.1], в которой представлен набор правил вывода функциональных зависимостей на основе заданных (эти правила также называются аксиомами Армстронга). Правила могут формулироваться разными способами, а самый простой из них приводится ниже.
• Правила вывода Армстронга. Пусть в перечисленных ниже правилах А, В и С — произвольные подмножества множества атрибутов заданного отношения R, а символическая запись АВ означает объединение А и В.
1. Рефлексивность: если В является подмножеством А, то А —> В.
2. Дополнение: если А —> В, то АС —> ВС.
3. Транзитивность: если А —> В и В —> С, то А —> С.
Каждое из этих правил может быть непосредственно доказано на основе определения функциональной зависимости (первое из них — это всего лишь определение тривиальной зависимости ). Более того, эти правила являются полными в том смысле, что для заданного множества функциональных зависимостей минимальный набор ФЗ , которые подразумевают все зависимости S , может быть выведен из S на основе этих правил. Они также являются исчерпывающими, поскольку никакие дополнительные ФЗ не могут быть выведены (т.е. ФЗ, которые не подразумеваются зависимостями множества S). Иначе говоря, эти правила могут быть использованы для получения замыкания S .
Из трех описанных выше правил для упрощения задачи практического вычисления замыкания S+ можно вывести несколько других правил. (Пусть D — это другое произвольное подмножество множества атрибутов R.)
4. Самоопределение: А —> А.
5. Декомпозиция: если А —> ВС, то А —> В и А —> С.
6. Объединение: если А—>В и А—>С, то А—> ВС.
7. Композиция: если А —> В и С —> D, то AC —> BD.
Кроме того, Дарвен (Darwen) в своей работе [9.6] доказал следующее правило которое назвал теоремой всеобщего объединения:
8. Если А —> В и С —> D, то А U (С - В) —> BD (где символ "U" обозначает объединение множеств, а символ " - " — их разность).
Название "теорема всеобщего объединения" указывает на то, что некоторые перечисленные ранее правила могут быть выведены как частные случаи этой теоремы [9.6].
Пример. Пусть дано некоторое отношение R с атрибутами А, В, С, D, Е, F и следующими ФЗ:
А -> ВС
В -> Е
CD -> EF
Обратите внимание, что способ записи несколько изменился (без ущерба для смысла ) : например, символы ВС означают множество, состоящее из атрибутов В и С, хотя ранее эти символы означали объединение В и С, где В и С были множествами атрибутов.
Замечание. Если необходимо, этому примеру можно придать более конкретный смысл, а именно: А — номер сотрудника, В — номер отдела, С — номер руководителя (начальника) данного сотрудника, D — номер проекта, возглавляемого данным руководителем (уникальный для каждого отдельно взятого руководителя), Е — название отдела, F — доля времени, уделяемая данным руководителем заданному проекту.
Теперь можно показать, что зависимость AD —> F выполняется для отношения R и таким образом принадлежит замыканию данного множества ФЗ.
1. А —> ВС ( дано )
2. А —> С ( из 1 согласно декомпозиции )
3. AD —> CD ( из 2 согласно дополнению )
4.CD —> EF ( дано )
5. AD —> EF ( из 3 и 4 согласно транзитивности )
6. AD —> F ( из 5 согласно декомпозиции )