Замыкание множества функциональных зависимостей. Аксиомы Армстронга и замыкание множества атрибутов. Пусть у нас есть множество функциональных зависимостей FD – S. Его замыканием S+ называется множество функциональных зависимостей, включающее все функциональные зависимости, логически выводимые из функциональных зависимостей множества S. Подход к решению проблемы поиска замыкания множества функциональных зависимостей впервые предложил Армстронг. Он предложил набор правил вывода новых функциональных зависимостей из существующих, которые называются аксиомами Армстронга. Пусть есть отношение R, и в нем атрибуты, возможно составные A,B,C. Не исключается тот случай, когда они пересекаются. Для краткости A UNION B = AB. 1. B E A => A -> B – рефлексивность 2. A -> B => AC -> BC – аксиома пополнения. 3. A ->B ^ B -> C => A -> C – аксиома транзитивности Док. 2. П AC +> BC => 3 t1,t2 E R t1 {AC} = t2 {AC}^ t1{BC} != t2{BC} t1{A} = t2{A} по 1 аксиоме. => t1{B} = t2{B} => t1{C} != t2{C} – получено противоречие по аксиоме 1. Док 3. П. A +> C Э t1,t2 E R t1{A} = t2{A} ^ t2{C} != t2{C} t2{B} = t2{B} => t1{C} = t2{C} == противоречия. Система аксиом Армстронга полна и совершенна. По практическим соображениям этот набор аксиом дополняется еще 5 правилами: 4. 5. 6. 7. 8. Самодетерминированность. A -> A. Декомпозиция A -> BC => A->B ^ A -> C. Объединение A -> B ^ A -> C => A -> BC. Правило композиции A -> B ^ C -> D => AC -> BD Правило накопления A -> BC ^ B -> D => A -> BCD Пусть задано отношение R, некий его составной атрибут Z и некое множество функциональных зависимостей S над атрибутами этого же отношения R. Замыканием атрибута Z (Z+) над множеством функциональных зависимостей S называется наибольшее множество таких атрибутов Y отношения R, что функциональная зависимость Z -> Y принадлежит S+. Замыкание атрибута – множество всех атрибутов, функционально зависящих от него. Можно записать алгоритм вычисления замыкания атрибута. K = 0 – шаг индукции (Цикла) Z+[0] = Z DO K:=K+1; Z+[K] = Z+[K-1]; FOR EACH FD A -> B IN S+ IF A E Z+[K] THEN Z+[K] = Z+[K] UNION B END FOR UNTIL Z+[K] = Z+[K-1] Алгоритм построения замыкания множества атрибутов Z над заданным множеством функциональных зависимостей S помогает легко установить входит ли заданная функциональная зависимость Z -> B в замыкание S+ множества S. Необходимым и достаточным условием для этого является B E Z+. Суперключом отношения R называется любое подмножество K заголовка R, включающее по меньшей мере хотя бы один возможный ключ отношения R. Подмножества K отношения R является суперключом V атрибута A выполняется K -> A, или что тоже самое, что когда замыкание множества атрибутов K есть весь заголовок отношения R. Минимальное покрытие множества функциональных зависимостей. FD S1, FD S2 S2 – покрытие S1, если любая функциональная зависимость, которая выводится из S1, выводится также из S2. Из перечисленного ранее очевидно, что S2 является покрытием S1 когда замыкание S1 является подмножеством S2. 2 множества функциональных зависимостей S1 , S2, если каждое из них является покрытием другого. Множество функциональных зависимостей S называется минимальным в том и только в том случае, когда оно удовлетворяет следующим требованиям: 1. Правая часть любой функциональной зависимости из S является множеством из одного атрибута. 2. Левая часть (детерминант) любой функциональной зависимости из S обладает свойством минимальности – это означает, что удаление любого атрибута из левой части зависимости приводит к изменению замыкания S+, т.е. к получению множества функциональных зависимостей, не эквивалентного S. 3. Удаление любой функциональной зависимости из S приводит к изменению S+ т.е. порождению множества функциональных зависимостей, не эквивалентного S. Важным в практическом отношении является тот факт, что для любого множества функциональных зависимостей S существует и может быть построена эквивалентное ему минимальное множество функциональных зависимостей S-. Приведем схему построения множества S- по заданному множеству S. На первом этапе используем правило 5 и избавляемся от всех функциональных зависимостей, которые содержат составные атрибуты в правой части. На втором этапе рассматриваем те функциональные зависимости, у которых левая часть состоит более чем из одного атрибута. Пытаемся по очереди удалять атрибуты и после удаления проверяем, не изменилось ли S+. Если замыкание не изменилось, оставляем измененный вариант, иначе возвращаемся к предыдущему варианту и в результате второго этапа получаем множество функциональных зависимостей, удовлетворяющему правилу 1 и 2. На третьем этапе пытаемся исключать по очереди каждую из оставшихся зависимостей из множества S. По окончании третьего этапа получается множество функциональных зависимостей, которые эквивалентны исходному и в то же время минимальны.