
- •Часть 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.6. Неприводимое множество зависимостей
Пусть S1 и S2 являются двумя множествами ФЗ. Если любая ФЗ, которая является зависимостью множества S1, также является зависимостью множества S2, т.е. если S1+ является подмножеством S2+, то S2 называется покрытием для S1. (Некоторые авторы термин "покрытие" для обозначения эквивалентного множества.) Это значит, что если накладываемые в СУБД ограничения представлены зависимостями множества S2, то в этой СУБД также наложены ограничения на основе зависимостей множества S1.
Далее, если S2 является покрытием для SI, а S1 — покрытием для S2, т.е. если S1+= S2+ ,то S1 и S2 эквивалентны. Ясно, что если S1 и S2 эквивалентны и наложенные в СУБД ограничения представлены зависимостями множества S2, то эти ограничения также могут быть представлены зависимостями множества S1, верно также и обратное утверждение.
Множество ФЗ называется неприводимым тогда и только тогда, когда выполняются перечисленные ниже свойства.
1. Правая часть (зависимая часть) каждой ФЗ множества S содержит только один атрибут (т.е. является одноэлементным множеством).
2. Левая часть (детерминант) каждой ФЗ множества S является неприводимой , т.е. ни один атрибут не может быть опущен из детерминанта без изменения замыкания S+ (без конвертирования множества S в некоторое множество, не эквивалентное множеству S). В таком случае ФЗ является неприводимой слева.
3. Ни одна функциональная зависимость в S не может быть опущена из S без изменения замыкания S+ (т.е. без конвертирования множества S в некоторое
множество, не эквивалентное множеству S).
В качестве примера рассмотрим уже знакомое отношение деталей Р с перечисленными ФЗ:
Р# -> PNAME
Р# -> COLOR
Р# -> WEIGHT
Р# -> CITY
Нетрудно заметить, что этот набор ФЗ является неприводимым: правая часть каждой зависимости содержит только один атрибут, левая часть, очевидно, является неприводимой, кроме того, ни одна из перечисленных ФЗ не может быть опущена без изменения замыкания (т.е. без утраты некоторой информации). И наоборот, приведенные ниже множества ФЗ не являются неприводимыми.
1. P# -> ( PNAME, COLOR ) : Правая часть не является
Р# -> WEIGHT Р# одноэлементным множеством.
Р# -> CITY
2. ( P#, PNAME ) -> COLOR : Эту зависимость можно
Р# ->PNAME упростить устранением PNAME в левой
Р# -> WEIGHT части без изменения замыкания.
Р# -> CITY
P# -> P# : Эту зависимость можно
Р# -> PNAME упростить без изменения замыкания
Р# -> COLOR
Р# -> WEIGHT
Р# -> CITY
Теперь можно сделать утверждение, что для каждого множества ФЗ существует, по крайней мере, одно эквивалентное множество, которое является неприводимым. Это достаточно легко продемонстрировать на следующем примере. Пусть дано исходное множество зависимостей S, тогда благодаря правилу декомпозиции можно без утраты общности предположить, что каждая ФЗ в множестве S имеет одноэлементную правую часть. Далее для каждой зависимости f этого множества S следует проверить каждый атрибут А в левой части f. Если множество S и множество зависимостей, полученное с помощью устранения атрибута А в левой части f , эквивалентны, то этот атрибут следует удалить. Затем для каждой оставшейся в множестве S зависимости f, если S и S- f эквивалентны, следует удалить f из множества S. Получившееся в результате таких действий множество S является неприводимым и эквивалентно исходному множеству S.
Пример. Пусть дано отношение R с атрибутами А, В, С, D и следующими ФЗ:
А -> ВС
В -> С
А -> В
АВ -> С
АС -> D
Теперь попробуем найти неприводимое множество ФЗ, эквивалентное данному множеству.
1. Прежде всего следует переписать ФЗ таким образом, чтобы каждая из них имела одноэлементную правую часть:
А -> В
А -> С
В -> С
А -> В
АВ -> С
АС -> D
Нетрудно заметить, что зависимость А —> В записана дважды, так что одну из них можно удалить.
2. Затем атрибут С может быть опущен в левой части зависимости AC —> D, поскольку дана зависимость А —> С и с помощью дополнения можно получить А —> АС, а также поскольку дана зависимость АС —> D и с помощью транзитивности можно получить А —> D; таким образом, атрибут С в левой части зависимости АС —> D является избыточным.
3. Далее можно заметить, что зависимость АВ —> С может быть исключена, поскольку дана зависимость А —> С и с помощью дополнения можно получить АВ —> СВ, а с помощью декомпозиции — АВ —> С.
Наконец, зависимость А —> С подразумевается зависимостями А —> В и В —> С, так что она также может быть устранена. В результате получится неприводимое множество зависимостей:
А -> В
В -> С
А ->D
Множество зависимостей I , которое неприводимо и эквивалентно некоторому другому множеству зависимостей S, называется неприводимым покрытием множества S. Таким образом, с тем же успехом в системе вместо исходного множества зависимостей S может быть использовано его неприводимое покрытие I. Однако, следует отметить, что для заданного множества ФЗ не всегда существует уникальное неприводимое покрытие (это упоминается ниже в упражнениях).