Функциональные зависимости и реляционные базы данных
Рассмотрим схему отношения R (город, адрес, почтовый_индекс). В этом случае существуют следующие нетривиальные, т.е. имеющие смысл в контексте предметной области, ФЗ город, адрес -> почтовый_индекс (полный адрес определяет почтовый индекс) и почтовый_индекс -> город (почтовый индекс определяет город, но не адрес). Легко убедиться, что оба множества атрибутов {город, адрес} и {адрес, почтовый_индекс} являются ключами отношения. Какой из них выбрать, решает проектировщик базы данных.
Для того чтобы определить ключи отношений и логические следствия ФЗ для заданной схемы отношения, необходимо вычислить F+ или для заданного F уметь определять, принадлежит ли данная ФЗ его замыканию F+. Для этого необходимо иметь набор правил - операций над ФЗ, позволяющих ими манипулировать.
Набор правил вывода должен быть полным, т.е. давать возможность вывести все зависимости из F+, и надежным, т.е. не позволять вывести зависимость из F, не принадлежащую F+. Таким образом, правила вывода, называемые также аксиомами вывода функциональных зависимостей, должны позволять вывести множество функциональных зависимостей, присущих рассматриваемой схеме отношения R(A1, A2, ..., Am) на заданном универсальном множестве атрибутов U по заданному множеству ФЗ F = {F1, F2, ..., Fk}.
Далее представлены восемь аксиом вывода функциональных зависимостей.
- Рефлексивность. Если , то ФЗ следует из F. Иначе .
- Пополнение. Если и задана ФЗ из F, то имеет место ФЗ .
- Транзитивность. Если и задана ФЗ из F , то имеет место ФЗ .
- Расширение. Если и задана ФЗ , то имеет место ФЗ .
- Продолжение. Если , и задана ФЗ , то имеет место ФЗ .
- Псевдотранзитивность. Если , и заданы ФЗ и ФЗ , то имеет место ФЗ .
- Аддитивность. Если , и заданы ФЗ и ФЗ , то имеет место ФЗ .
- Декомпозиция. Если , и задана ФЗ , то имеет мето ФЗ .
Пример. Определение ключа отношения с помощью правил вывода
Используя три первых аксиомы вывода, покажем, что пара атрибутов {адрес, почтовый_индекс} из примера выше являются ключом отношения (город, адрес, почтовый_индекс), иначе имеет место ФЗ адрес, почтовый_индекс -> город, адрес, почтовый_индекс. Задана ФЗ: почтовый_индекс -> город. Используя аксиому пополнения, пополним эту ФЗ атрибутом адрес, получаем адрес, почтовый_индекс -> город, адрес. Задана ФЗ город, адрес -> почтовый_индекс. Используя аксиому пополнения, пополнив эту ФЗ атрибутами город, адрес, получим город, адрес -> город, адрес, почтовый_индекс. Тогда по аксиоме транзитивности получаем адрес, почтовый_индекс -> город, адрес, почтовый_индекс.
Можно доказать утверждение о том, что настоящие правила вывода позволяют по заданному множеству ФЗ F построить все зависимости, допускаемые на U. Таким образом, система правил вывода ФЗ 1-6 является надежной и полной.
Покажем, как можно доказать утверждение о полноте и надежности аксиом вывода. Аксиомы 1, 2 и 3 составляют независимое подмножество среди всех шести аксиом и называются аксиомами Армстронга. Из них можно вывести все остальные аксиомы. Поэтому надежность и полноту достаточно установить только для первых трех аксиом.
Надежность аксиом заключается в том, что если ФЗ выведена из F с помощью этих аксиом, то она справедлива на любом отношении, на котором справедливы ФЗ из F. Аксиома рефлексивности является надежной, так как нельзя иметь отношение R с двумя кортежами, которые совпадают по Х, но не совпадают по некоторому его подмножеству. Для доказательства аксиомы пополнения предположим, что имеется отношение R и справедлива ФЗ на R. Однако есть два кортежа t и s, которые совпадают по атрибутам XZ, но не совпадают по YZ. Поскольку они не могут совпадать по какому-либо атрибуту из Z, то они не должны совпадать по некоторому атрибуту из Y. Тогда они совпадают по X, но не совпадают по Y, что противоречит существованию ФЗ . Надежность аксиомы транзитивности уже была доказана в настоящем учебном элементе ранее.
Для доказательства полноты аксиом вывода введем понятие замыкания множества атрибутов X относительно множества ФЗ F.
Определение 10. Пусть F - множество ФЗ на множестве атрибутов U и . Тогда замыканием X+ множества ФЗ F называется множество атрибутов А, таких, что ФЗ может быть выведена из F по аксиомам 1-3.
Нетрудно показать, что ФЗ следует из аксиом 1-3 тогда и только тогда, когда . По определению замыкания для каждого атрибута из Y выводится ФЗ . По аксиоме объединения имеет место ФЗ . Обратно, если выполняется ФЗ , то по аксиоме декомпозиции имеет место ФЗ каждый атрибут из Y, и, следовательно, имеет место .
Теперь, для того чтобы показать полноту аксиом 1-3, покажем, что если при заданном F ФЗ не может быть выведена из данных аксиом, то должно существовать такое отношение, в котором справедливы все ФЗ F, кроме ФЗ .
Рассмотрим отношение R с двумя кортежами:
Все зависимости из F справедливы на R. Следует показать, что не удовлетворяется на R. Допустим обратное. Из следует , иначе два кортежа, совпадая по Х, не совпадают по Y. Тогда ФЗ следует из аксиом 1-3, что приводит к противоречию. Таким образом, аксиомы 1-3 полны.
На основе аксиом вывода можно уточнить понятие замыкания множества ФЗ , как наименьшего множества, содержащего F, которое не может быть расширено за F с помощью аксиом 1, 2 и 3. Понятие замыкания является основным при доказательстве приведенного выше утверждения. Оно также важно при определении, имеет ли множество ФЗ F зависимость . Для этого достаточно проверить, принадлежит ли рассматриваемая зависимость множеству F+.
Вычисление замыкания конечного множества ФЗ является трудоемкой задачей, так как необходимо перебрать множество всех подмножеств, а таких множеств, как известно, 2n, где n - число элементов исходного множества. Однако вычислить замыкание X+ для данного множества атрибутов несложно. Алгоритм вычисления приведен ниже. Можно показать, что этот алгоритм корректно вычисляет замыкание X+.
Алгоритм вычисления X+
Input: U - конечное множество атрибутов, множество ФЗ F на U, множество . Output: X+
- Х0 есть Х.
- Xi+1 есть Xi плюс множество атрибутов А, для которых в F существует ФЗ .
Условие завершения. Так как U - конечно и , то существует i, такое, что Xi = Xi+1.
Пример. Вычислим Х+
Пусть .
- Находим ФЗ, которые в левой части имеют . Присоединим E и G к X0. X1 = BDEG. Находим ФЗ с левыми частями из . Находим ФЗ с левыми частями из .
- .