- •Содержание
- •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.3. Выборка с условием равенства двух атрибутов
Рассмотрим отношение R(ABCD).
σA=B(r),
T(σA=B(r))=?,
V(r,A)=3, {a,b,c},
V(r,B)=4, {a,b,c ,d}.
A |
B |
C |
D |
a |
a |
… |
… |
a |
b |
… |
… |
a |
c |
… |
… |
a |
d |
… |
… |
b |
a |
… |
… |
b |
b |
… |
… |
b |
c |
… |
… |
b |
d |
… |
… |
c |
a |
… |
… |
c |
b |
… |
… |
c |
c |
… |
… |
c |
d |
… |
… |
T(r)
+ =
Рис. 8.3 – Выборка при условии равенства двух атрибутов
σA=B=C(r)=σA=B & B=C.
T(σA=B=C(r))=T(r) .
8.4. Выборка при условии неравенства двух атрибутов
T(σA B(r))=T(r)(1- ).
Количество строк при декартовом произведении двух отношений
T(r s) = T(r) T(s).
Пусть имеем два отношения R(ABCD), S(FBCDE).
Операция естественного соединения примет вид:
.
Следовательно
.
T(r) T(s)
Рис. 8.4 – Схема отношения
V(r,A), V(r,B), V(s,A),
T(r)=V(r,A), V(s,C),
V(s,D).
.
Пример. Рассмотрим три отношения со следующими статистическими характеристиками:
Таблица 8.1 – Характеристики отношений
R(a, b) |
S(b, c) |
U(c,d) |
T(R)= 1000 |
T(S) = 2000 |
T(U) = 5000 |
V(R, b) = 20 |
V(S, b) = 50 |
|
|
V(S, c) = 100 |
V(U, c) = 500 |
Предположим, что необходимо вычислить естественное соединение вида R S U. Один из вариантов выполнения оператора состоит в группировании (R S) U. На основании указанного выше правила T(R S) = T(R)T(S) / max (V(R, b), V(S, b)) получим 1000 * 2000 / 50, или 40000.
Далее результат R S подлежит соединению с U. Выражение оценки размера итогового отношения можно записать как T(R S)T(U) / max (V(R S, с), V(U, с)). В соответствии с предположением о сохранности множеств значений несовпадающих атрибутов V(R S, с) = V(S, с) = 100, т.е. при выполнении соединения ни одно из значений атрибута с не "пропадает". В этом случае прогнозируемым значением количества кортежей в R S U будет 40000 * 5000 / mах(100, 500) = 400000.
Выполнение операции R S U можно начать и с соединения S с U. В этом случае оценкой размера S U окажется T(S)T(U)/max(V(S,c), V(U,c)), или 2000*5000/500=20000.
Ожидаемый размер итогового отношения равен T(R)T(S U)/max (V(R,b), V(S U,b)), и с учетом допущения о сохранности множеств значений несовпадающих атрибутов, V(S U,b)= V(S, b) = 50, получим 1000 * 20000 / 50, или 400000.
8.5. Естественное соединение отношений с несколькими общими атрибутами
Теперь исследуем случай, когда Y представляет не один, а несколько атрибутов, общих для отношений R и S, подлежащих естественному соединению, R(X, Y) S(Y, Z). Для простоты рассмотрим оператор R(x, у1, у2) S(y1, y2, z). Пусть r является одним из кортежей R. Вероятность того, что r удастся соединить с определенным кортежем s отношения S, может быть подсчитана следующим образом.
Прежде всего зададимся вопросом, какова вероятность совпадения r и s в атрибуте y1. Предположим, что V(R, y1) ≥ V(S, у1). Тогда с учетом допущения о принадлежности одного множества значений совпадающих атрибутов другому можно утверждать, что любое значение атрибута y1 отношения S определенно присутствует в наборе значений атрибута у1 отношения R. Следовательно, вероятность того, что кортеж s обладает тем же значением компонента у1, что и кортеж s, равна 1/ V(R, y1). Аналогично, если V(R,y1)< V(S,y1), тогда значение у1 кортежа r должно наличествовать в S, причем вероятность совпадения содержимого компонентов y1 кортежей r и s равна 1 /V(S, у1). Вероятность того, что кортежи r и s согласуются в атрибуте у1 в общем случае оценивается величиной 1 / max (V(R, у1), V(S, у1)).
Те же доводы позволяют заключить, что вероятность совпадения кортежей r и s в компонентах атрибута у2 равна 1 / max (V(R, y2), V(S, y2)). Поскольку значения атрибутов у1 и у2 независимы, вероятность одновременного равенства обоих компонентов кортежей r и s представляет собой произведение двух указанных дробей. Поэтому с учетом общего количества различных пар кортежей R и S, равного T(R)T(S), прогнозируемое число пар кортежей, совпадающих одновременно в компонентах у1 и у2, равно
T(R)T(S) / (max (V(R, у1), V(S, у1)) * max (V(R, y2), V(S, y2))).
Для получения оценки размера итогового отношения, возвращаемого оператором естественного соединения в случае, когда отношения-операнды обладают произвольным количеством общих атрибутов, используется следующее правило:
прогнозируемый размер отношения RsxS равен произведению значений T(R) и T(S), деленному на произведение максимумов из величин V(R, у) и V(S, у) для каждого атрибута у, общего для отношений R и S.
Пример. Рассмотрим образец практического применения указанного выше правила. Помимо того, покажем, что выводы, справедливые для естественного соединения, остаются в силе и для любых разновидностей соединений посредством равенства. Предположим, что отношения, служащие аргументами оператора
R(a, b, с) S(d, e, f),
R.b=S.d & R.c=S.e
обладают следующими статистическими характеристиками:
Таблица 8.2 – Характеристики отношений
R(a, b, с) |
S{d, e,J) |
T(R) = 1000 |
T(S) = 2000 |
V{R, b) = 20 |
V(S, d) = 50 |
V(R, c)= 100 |
V(S, e) = 50 |
Подобный вариант соединения можно интерпретировать как естественное соединение, если воспринимать атрибуты пары R.b, S.d и пары R.c, S.e как одноименные.
Тогда в соответствии с указанным выше правилом для получения оценки размера итогового отношения следует перемножить значения 1000 и 2000 и поделить произведение на большее из чисел 20 и 50, а затем — на большее из чисел 100 и 50, т.е. 1000 * 2000 / (50 * 100) = 400.
Пример. Вновь обратимся к предыдущему примеру, но рассмотрим третий из возможных вариантов порядка соединения, в соответствии с которым вначале выполняется операция R(a, b) U(c, d). Такое соединение по существу представляет собой декартово произведение, и количество кортежей в возвращаемом им отношении равно T(R)T(U)= 1000 * 5000 = 5000000. Заметим, что количество различных значений в компонентах атрибутов b и с этого отношения по-прежнему равно V(R,b) = 20 и V(U, с) = 500 соответственно. Для получения оценки размера отношения, получаемого при дальнейшем соединении промежуточного результата с S(b, с), следует перемножить количества кортежей в отношениях-операндах и поделить произведение как на max (V(R, b), 1/(S, b)), так и на max (V(U, с), V(S, с)), т.е. 2000 * 5000000 / (50 * 500) = 400000. Нетрудно убедиться, что и для третьего варианта соединения остается справедливой та же оценка, которая получена в примере для двух других.