- •Содержание
- •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. Закон деления
8.11.6. Законы группирования и агрегирования
При изучении оператора группирования и агрегирования γ нетрудно убедиться, что возможность применения тех или иных преобразований решающим образом зависит от особенностей конструкций агрегирования, используемых в каждом конкретном случае. Поэтому, в отличие от рассмотренных выше операторов, некие универсальные законы с участием оператора γ сформулировать нельзя. Одно из исключений — это правило "поглощения" оператором γ оператора δ:
δ(γL(R))= γL(R).
Другое достаточно общее правило заключается в возможности удаления ненужных атрибутов посредством оператора проекции, применяемого к отношению перед выполнением оператора группирования:
γL(R) = γL(πM(R)),
если М— список, содержащий, как минимум, все атрибуты R, упомянутые в списке L.
Одна из причин, из-за которых другие операторы зависят от результатов агрегирования посредством γ, заключается в том, что на поведение некоторых операторов агрегирования — в частности, min и мах — наличие или отсутствие кортежей-дубликатов влияния не оказывает. Итог выполнения других операторов агрегирования — sum, count и avg, — напротив, в общем случае определяется тем, выполнялось ли предварительно удаление дубликатов или нет.
Будем называть оператор γL невосприимчивым к присутствию дубликатов (duplicate-impervious), если в списке L нет других операторов агрегирования, кроме min и/или max. Если оператор γL является невосприимчивым к присутствию дубликатов, имеет место соотношение:
γL(R)= γL(δ(R)).
Пример. Обратимся к отношениям
MovieStar(name, address, gender, birthdate)
StarsIn(movieTitle, movieYear, starName)
из "кинематографической" базы данных с целью получения сведений о том, каковы наименьшие значения возраста актеров, снимавшихся в кинофильмах, выпущенных в каждом определенному году. Запрос можно представить следующим образом:
SELECT movieYear, MAX(birthdate)
FROM MovieStar, Starsin
WHERE name = starName
GROUP BY movieYear;
Начальный логический план, конструируемый непосредственно на основании запроса, показан на рисунке 8.13.
γmovieYear, max(birthdate)
σname=starName
×
MovieStar StarsIn
Рис. 8.13 - Исходный логический план запроса к примеру
Список предложения from представлен оператором декартова произведения (×), условие предложения where — оператором выбора (σname=StaName), а функции группирования и агрегирования — оператором γmovieYear, max(birthdate). При необходимости план, изображенный на рисунке 8.13, можно подвергнуть следующим преобразованиям:
1) свести функции выбора и декартова произведения к операции соединения посредством равенства (equijoin);
2) вставить в дерево вершину δ, дочернюю по отношению к корневой вершине у (поскольку рассматриваемый оператор ^невосприимчив к присутствию дубликатов);
3) разместить между вершинами у и 8 вершину л с целью получения проекции данных на атрибуты movieYear и birthdate, так как только эти атрибуты присутствуют в схеме итогового отношения γ.
В результате выполнения перечисленных действий получим план, приведенный на рисунке 8.14.
Теперь после вершины, соответствующей оператору соединения посредством равенства, можно включить пары вершин δ и π. Дополненный логический план изображен на рисунке 8.15. Если name является первичным ключом MovieStar, в ветви, ведущей к MovieStar, оператор δ, строго говоря, уместно было бы исключить.
γ movieYear, max (birthdate )
π movieYear, birthdate
δ
n ame = starName
MovieStar StarsIn
Рис. 8.14 - Второй логический план запроса к примеру
γ movieYear, max (birthdate )
π movieYear, birthdate
n ame = starName
δ δ
πbirthdate, name πmovieYear, starName
MovieStar StarsIn
Рис. 8.15 - Третий логический план запроса к примеру