- •Содержание
- •1. Основные понятия баз данных
- •1.1. Проектирование баз данных
- •1.2. Индексы и ключи в базах данных
- •2. Функциональные зависимости
- •2.1. Понятие функциональной зависимости
- •2.2. Метод синтеза
- •2.3. Аксиомы вывода
- •2.4. Применение аксиом вывода
- •2.5. Замыкание множества атрибутов относительно множества функциональных зависимостей
- •2.6. Эквивалентность двух систем функциональных зависимостей
- •2.7 Метод синтеза
- •2.8. Классы эквивалентности функциональных зависимостей с эквивалентными левыми частями
- •2.9. Составные функциональные зависимости и кольцевые покрытия
- •3. Нормализация баз данных
- •3.1. Декомпозиция таблицы на две таблицы без потери информации и с потерей информации
- •4. Иерархия в базах данных
- •4.1. Использование иерархии в базах данных
- •4.2. Инклюзивная и эксклюзивная иерархии
- •5. Сортировка и поиск записей в базах данных
- •5.1.Многофазная сортировка
- •7. Оптимизация запросов
- •7.1. Основные операции реляционной алгебры и их обозначения
- •8. Статистические данные, используемые для минимизации запросов
- •8.1. Анализ стоимости операций
- •8.2. Оценка размеров промежуточных отношений
- •8.2.1. Оценка размера результата операции объединения
- •8.2.2. Оценка размера результата операции пересечения
- •8.2.3. Оценка размера результата оператора проекции
- •8.2.4. Оценка размера результата оператора выбора
- •8.3. Выборка с условием равенства двух атрибутов
- •8.4. Выборка при условии неравенства двух атрибутов
- •8.5. Естественное соединение отношений с несколькими общими атрибутами
- •8.6. Соединение нескольких отношений
- •8.7. Оценка размеров результатов выполнения других операторов
- •8.7.1. Объединение
- •8.7.2. Пересечение
- •8.7.3. Разность
- •8.7.4. Удаление кортежей-дубликатов
- •8.7.5. Группирование и агрегирование
- •8.8. Свод формул для сравнительного расчета количества записей результата выполнения операций реляционной алгебры
- •8.9. Тождественные преобразования для операций реляционной алгебры
- •8.10. Алгебраические законы и планы запросов
- •8.10.1. Коммутативный и ассоциативный законы
- •8.11. Законы для "множественных" и "мультимножественных" версий операторов
- •8.11.1. Законы выбора
- •8.11.2. Некоторые тривиальные законы
- •8.11.3. Законы проекции
- •8.11.4. Законы соединения и декартова произведения
- •8.11.5. Законы, касающиеся удаления кортежей-дубликатов
- •8.11.6. Законы группирования и агрегирования
- •8.11.7. Закон деления
2.9. Составные функциональные зависимости и кольцевые покрытия
Составная зависимость – краткая запись одного класса эквивалентности.
В левую часть входит список всех левых частей функциональной зависимости класса эквивалентности.
Правая часть – объединение атрибутов правых частей функциональных зависимостей одного класса эквивалентности
(A, B) →ABC,
из которого исключаются атрибуты, содержащиеся в левой части всех зависимостей.
Любое множество функциональных зависимостей, на основании которого построена составная зависимость, называется характеристическим.
Рис. 2.1 - Кольцевое характеристическое множество функциональных зависимостей.
Две составные зависимости эквивалентны, если эквивалентны их характеристические множества.
Две системы составных функциональных зависимостей эквивалентны, если эквивалентны объединения систем характеристических множеств для каждой зависимости. Для системы составных функциональных зависимостей определено понятие минимального кольцевого редуцированного покрытия.
Если система составных зависимостей получена по минимальному покрытию функциональных зависимостей, то эта система будет минимальной кольцевой, но не всегда редуцированной справа и слева.
Правая редукция для составных зависимостей: пытаются последовательным перебором удалить хотя бы один атрибут из правой части хотя бы одной из функциональных зависимостей.
Удалить атрибут из правой части можно будет только в том случае, если в модифицированной системе система характеристических множеств будет эквивалентна исходной.
Пример.
.
Составная зависимость для f:
.
Проверяем правую редукцию:
,
,
fd≡fd’,
fd’ |= D1D2→A.
3. Нормализация баз данных
3.1. Декомпозиция таблицы на две таблицы без потери информации и с потерей информации
g=g(A B C) – исходная таблица.
a1 b1 c1
a2 b1 c1
a1 b1 c2
r=pr(A B)g=r(A B) – операция проекции.
a1 b1
a2 b1
s=pr(A C)g=s(A C)
a1 c1
a2 c1
a1 c2
g’=r s – операция естественного соединения.
g(A B C)
a1 b1 c1
a1 b1 c2
a2 b1 c1
r=pr(A B)=r(A B)
a1 b1
a2 b1
s=pr(B C)=s(B C)
b1 c1
b1 c2
r s=g’(A B C)
a1 b1 c1
a1 b1 c2
a2 b1 c1
a2 b1 c2
Мы получили декомпозицию с потерей информации(получилось в g’ на одну запись больше, чем в g).
1) R={A,B}
S={A,C}
2) R={A,B}
S={B,C}
Правило для проверки разбиения:
если R S→S \ R или R S→R \ S, то разбиение без потери информации.
1) R S={A},
S \ R={C},
R \ S={B}.
A→C не выполняется, A→B. Следовательно, возможно разбиение без потери информации.
2) R S={B},
S \ R={C},
R \ S={A}.
B→C не выполняется, B→A не выполняется. Следовательно, невозможно разбиение без потери информации.
- неизбыточное леворедуцированное и праворедуцированное покрытие.
Два класса эквивалентности:
Ef(A)={A→C},
Ef(B)={B→C}.
Составные зависимости:
g=(ABC)
Декомпозиция на две таблицы:
r=(A,C)
s=(B,C)
R S={С}
R \ S={A}
S \ R={B}
C→A – не выполняется
C→B – не выполняется
Следовательно, получили декомпозицию с потерей информации.
Метод проектирования структуры БД при помощи синтеза (альтернативно называется метод декомпозиции) позволяет получить структуру БД в 3НФ, но при этом в общем случае возможно разбиение исходных представлений (таблиц) с потерей информации. В результате естественного соединения базовых таблиц, таблица представления будет иметь больше строк, чем ее исходное представление.
Универсальная зависимость – это зависимость из всех аргументов всех функциональных зависимостей.
|= .
Левая редукция:
.
Классы эквивалентности:
Ef(A)={A→C},
Ef(B)={B→C},
Ef(AB)={AB }.
Кольцевое покрытие:
.
Получим декомпозицию на 3 таблицы.
r=(A,C),
s=(B,C),
t=(A,B).
1) t s={B},
s \ t={C},
t \ s={A}.
B→C, B→A выполняются.
2) r s={C},
r \ s={A},
s \ r={B},
C→A, C→B не выполняются.
3) t r={A},
t \ r={B},
t \ r={C},
A→B, A→C выполняются.
Следовательно, получим декомпозицию с потерей информации.
Для того чтобы соединение было без потерь информации, к исходной системе функциональных зависимостей добавляется универсальная зависимость.
Универсальная зависимость – это функциональная зависимость, у которой левая часть – объединение атрибутов всех зависимостей системы, а правая часть – это имя этой системы (таблицы).