Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ТОБД.doc
Скачиваний:
7
Добавлен:
17.09.2019
Размер:
1.4 Mб
Скачать

8.11.6. Законы группирования и агрегирования

При изучении оператора группирования и агрегирования γ нетрудно убедиться, что возможность применения тех или иных преобразований решающим образом зависит от особенностей конструкций агрегирования, используемых в каждом конкретном случае. Поэтому, в отличие от рассмотренных выше операторов, некие универсальные законы с участием оператора γ сформулировать нельзя. Одно из исключений — это правило "поглощения" оператором γ оператора δ:

δ(γL(R))= γL(R).

Другое достаточно общее правило заключается в возможности удаления ненужных ат­рибутов посредством оператора проекции, применяемого к отношению перед выпол­нением оператора группирования:

γL(R) = γLM(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 - Третий логический план запроса к примеру