Функциональная зависимость (программирование)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Функциона́льная зави́симость — бинарное отношение между подмножествами атрибутов отношения в реляционной базе данных. Концепция функциональной зависимости лежит в основе многих вопросов, связанных с проектированием таких баз данных.

Определения[править | править код]

Функциональная зависимость[править | править код]

Пусть дано некоторое отношение со схемой (заголовком) , и  — некоторые подмножества множества атрибутов отношения . Множество функционально зависит от (обозначается ) тогда и только тогда, когда каждое значение множества связано в точности с одним значением множества .

Другими словами, если два кортежа совпадают по значениям в , то они совпадают и по значениям в .

В этом случае  называют детерминантом,  — зависимой частью.

Функциональная зависимость называется тривиальной, если зависимая часть является подмножеством детерминанта:

Замыкание множества зависимостей[править | править код]

Одни функциональные зависимости могут подразумевать другие функциональные зависимости. Например, функциональная зависимость,

.

Множество всех функциональных зависимостей, которые подразумеваются данным множеством функциональных зависимостей называется замыканием множества .

Замыкание множества атрибутов[править | править код]

Пусть  — некоторое множество атрибутов отношения , а  — множество функциональных зависимостей этого отношения. Замыканием множества атрибутов в пределах называется такое множество всех атрибутов отношения , что функциональная зависимость является членом замыкания .

Неприводимые множества зависимостей[править | править код]

Пусть и  — некоторые множества функциональных зависимостей.

  • Если любая функциональная зависимость из входит и в , то называют покрытием множества функциональных зависимостей .
  • Если  — покрытие для , а  — покрытие для (то есть ), то такие множества называются эквивалентными.
  • Множество функциональных зависимостей называется неприводимым тогда и только тогда, когда выполняются следующие условия:
    • В каждой функциональной зависимости зависимая часть содержит только один элемент;
    • Детерминант каждой функциональной зависимости является неприводимым (ни один атрибут не может быть удален из детерминанта без изменения замыкания );
    • Ни одну функциональную зависимость из нельзя исключить без изменения замыкания .
  • Для любого множества функциональных зависимостей существует по крайней мере одно эквивалентное множество, которое является неприводимым. Такое эквивалентное множество называется неприводимым покрытием.

Вычисление замыканий[править | править код]

Правила вывода Армстронга[править | править код]

В 1974 году Вильям Армстронг предложил набор правил вывода новых функциональных зависимостей на основе данных.

Пусть у нас есть отношение и множества атрибутов . Для сокращения записи вместо будем писать просто .

  • Рефлексивность:
  • Пополнение:
  • Транзитивность:

Правила вывода Армстронга полны (используя их, можно вывести все остальные функциональные зависимости, подразумеваемые данным множеством) и надежны («лишних» функциональных зависимостей вывести нельзя: выведенная функциональная зависимость справедлива везде, где справедливы исходные функциональные зависимости (из которых она была выведена)).

Кроме того, из данных правил довольно просто выводятся несколько дополнительных правил, упрощающих задачу вывода функциональных зависимостей.

  • Самоопределение:
  • Декомпозиция:
  • Объединение:
  • Композиция:
  • Теорема всеобщего объединения Дарвена:

Теорема: Функциональная зависимость выводима из данного множества функциональных зависимостей по правилам вывода Армстронга тогда и только тогда, когда .

Замыкание множества атрибутов[править | править код]

Если применять правила из предыдущего раздела до тех пор, пока создание новых функциональных зависимостей не прекратится само собой, то мы получим замыкание для заданного множества функциональных зависимостей. На практике редко требуется вычислять это замыкание само по себе, чаще всего нам гораздо интереснее узнать, будет ли та или иная функциональная зависимость входить в замыкание. Для этого нам достаточно вычислить замыкание детерминанта. Для этого существует довольно простой алгоритм.

  1. Пусть  — множество атрибутов, которое в конечном счете станет замыканием.
  2. Осуществляем поиск функциональных зависимостей вида , где , а . Зависимую часть каждой найденной зависимости добавляем в .
  3. Повторяем пункт 2, пока ко множеству будет невозможно добавить атрибуты.
  4. Множество , к которому невозможно добавить атрибуты и будет замыканием.

Применение[править | править код]

См. также[править | править код]

Литература[править | править код]

  • К. Дж. Дейт. Введение в системы баз данных = Introduction to Database Systems. — 8-е изд. — М.: «Вильямс», 2006. — С. 1328. — ISBN 0-321-19784-4.