- •Основы проектирования баз данных.
- •Функциональные зависимости.
- •Аксиомы вывода.
- •Применение аксиом вывода.
- •Ориентированные ациклические графы вывода.
- •Основные определения.
- •Покрытия и эквивалентность.
- •Минимальные покрытия.
- •Кольцевые покрытия и составные зависимости.
- •Нормальные формы реляционных баз данных.
- •Первая нормальная форма бд.
- •Аномалии и вторая нормальная форма бд.
- •Избыточность данных и третья нормальная форма.
- •Многозначные зависимости и четвертая нормальная форма.
- •Нормальная форма вида «проекция-соединение».
- •Концепция модели «Сущность-связь».
- •Типы сущностей.
- •Атрибуты.
- •Типы атрибутов.
- •Типы связей.
- •Структурные ограничения.
Ориентированные ациклические графы вывода.
«Назначение человека – в разумной деятельности.»
АРИСТОТЕЛЬ 384-322гг. до н.э.
Геометрический способ описания RAP-последовательностей вывода приводит нас к её модели в виде помеченного направленного графа (Directed Acyclic) или DA- графа. Такой граф не имеет циклов ни в одной вершине. ПомеченныйDA-граф имеет в каждой своей вершине некоторый элемент из множества имен (меток). СтроитсяDA-граф вывода над Ф, где Ф – множествоF–зависимостей по следующим правилам.
Пр1. Любое множество изолированных вершин с именами из схемы R (метками) является DA-графом вывода надF.
Пр2. Пусть Н есть DA –граф вывода над Ф, содержащий вершины v1, v2, ..., vK с метками А1, А2, ... , АКи {А1, А2, ... , АК}CZ есть F–зависимость в Ф. Построим Нс добавив к Н вершину u, помеченную какС, и дуги (v1,u), (v2,u), ..., (vK,u).Нс является DA-графом вывода над Ф.
Пр3. Никакой другой граф не является DA–графом вывода над Ф.
В дальнейшем DA–граф вывода мы будем называть DDA-графом над Ф (Derivation Directed Acyclic). Правило Пр1 всегда применяется однократно, а правило Пр2 многократно и гарантирует построение именно DDA-графа. Заметим, что порядок выбора функционнальных зависимостей из Ф не влияет на построениеDDA-графа.
Можно показать, что в выводе ФXY использующем В-аксиомы, будет возрастать правая часть в представленииF–зависимостей. Действительно, используя аксиому пополнения В2 мы всегда можем наращивать правую часть до тех пор, пока не исчерпаем все допустимые из Ф зависимости. Затем можно просмотретьRAP-последовательность в обратном направлении и удалить результаты применения В2, приводящие кF–зависимостям с левой частью не нужной для доказательста (т.е. не Х). При этом все случаи применения В1 (кроме первого) оказываются излишними. Последняя аксиома В3 используется для выделения в правой части необходимого нам подмножества (единственный раз). Очевидно, что В-аксиомы очень удобны для анализа семейства функциональных зависимостей Ф.
Основные определения.
«...Тот, кто утверждает, что все истинно, делает истинным и противоположное утверждение.»
АРИСТОТЕЛЬ 384-322гг. до н.э.
Определение начальной вершины.
Если Н есть DDA–граф над Ф, тоначальной вершинойназывается вершина не имеющая входящих в неё дуг. Она появляется в Н по правилу Пр1.
Пусть Н есть DDA–граф над Ф. Граф Н называется DDA–графом для XY, если
X является множеством меток исходных вершин;
каждый атрибут в Y является меткой какой-либо вершины в Н.
Определение используемого множества.
Используемым множеством DDA-графа Н над Ф (обозначаемое как U(H)) называется множество всех F–зависимостей в Ф, использованных при применении правила ПР2 во время построения DDA-графа.
Эквивалентность В-вывода и DDA–графов.
Для данного множества F–зависимостей Ф над R иF-зависимости XY следующие утверждения эквивалентны.
FXY.
Существует последовательность вывода на Ф для XY.
Существует DDA–граф над Ф для XY.
Проверка принадлежности F-зависимости к Ф+.
«Ум заключается не только в знании, но и в умении прилагать знания на деле».
АРИСТОТЕЛЬ 384-322гг. до н.э.
Для доказательства выводимости ФXY можно построитьФ+, но этот путь очень трудоемкий. Алгоритм проверки принадлежностиF-зависимости XY к Ф+ строится на основе построения замыкания X над Ф. После того как найдено X+, можно проверить – следует ли зависимость XY из Ф.
Алгоритм построения замыкания CLOSURE.
Дано:Множество атрибутов X и множество F–зависимостей Ф.
Надо: Замыкание X+ над Ф.
CLOSURE(X,Ф) {
OLD = ; // переменное множество атрибутов
NEW = X ; // переменное множество атрибутов
while (NEW OLD) {
OLD = NEW;
for (<каждая F-зависимость WZ в Ф>) {
if (NEW W) NEW = NEW Z;
}
}
return NEW;
}
Для описания алгоритма мы использовали «псевдокод» на языке С/С++. Но это не программный код, а описание смыслового содержания функции CLOSUREдля других людей с использованием синтаксиса языка, что позволяет им понять её смысл (и потом написать функцию). Этот алгоритм строитDDA-граф над Ф дляXX+, используя модифицированную версию правила В2 в определении DDA-графа. При этом за один проход добавляется более чем одна вершина. Нет необходимости запоминать дуги этого графа, т.к. возможность использования очередной WZ зависит только от помеченности вершин графа.
Алгоритм проверки принадлежности замыканию MEMBER.
Дано: Множество F–зависимостей Ф и зависимость XY.
Надо: Истина, если ФXY, иначе ложь.
MEMBER(Ф, XY) {
if (Y CLOSURE(X,Ф)) return TRUE;
else return FAULSE;
}
Вычислительная сложностьэтого алгоритма такая же, как и у функцииCLOSURE. Мы будем использовать это понятие в смысле RAM-машины (как это сделал Д. Е. Кнут в фундаментальном труде «Искуство программирования»). Несложно оценить время выполнения этого алгоритма как О(аN2), где а-некоторая константа, а N – количество зависимостей в Ф. Но это не предел, можно построить алгоритм проверки принадлежности зависимости к замыканию Ф+ с оценкой сложности порядка О(N), где N – количество символов, необходимых для представления Ф иXY.
Следствие. Для функциональной зависимости XY её принадлежность к Ф+ размерности N можно проверить за время порядка О(N).