
- •Содержание
- •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.4. Законы соединения и декартова произведения
Ранее уже упоминались весьма важные коммутативный и ассоциативный законы, действующие в отношении операторов соединения (join) и декартова произведения (Cartesian product). Существует и несколько других законов, вытекающих непосредственно из определения операции соединения:
R S=σC(R×S).
R S=πL(σC(R×S)),
где С — условие сравнения значений одноименных атрибутов отношений R и S, a L — список, содержащий по одному атрибуту из каждой пары одноименных атрибутов, а также все остальные атрибуты R и S (или список атрибутов схемы R, за которыми следуют атрибуты S, отсутствующие в R).
На практике указанные правила обычно применяются в направлении справа налево. Другими словами, декартово произведение, к результату которого применяется оператор выбора, трактуется как определенная разновидность соединения. Доводы в пользу такого подхода состоят в том, что алгоритмы вычисления соединений, вообще говоря, выполняются намного быстрее, нежели алгоритмы, реализующие декартово произведение, а затем выбор из (обычно весьма объемного) результата произведения.
8.11.5. Законы, касающиеся удаления кортежей-дубликатов
Оператор δ, осуществляющий удаление кортежей-дубликатов (duplicate elimination), может быть продвинут "внутрь" многих, но не всех операторов. Вообще говоря, перемещение оператора S вниз по дереву выражений позволяет уменьшить размеры промежуточных отношений и потому сулит определенные выгоды. Более того, подчас имеет смысл размещать оператор δ на таких позициях, где он, строго говоря, вообще не нужен, поскольку заведомо известно, что отношение-операнд не содержит кортежей-дубликатов:
δ (R) = R,
если R не имеет в своем составе повторяющихся кортежей. Основные примеры подобных отношений указаны ниже.
a) Хранимое отношение с объявленным первичным ключом.
b) Отношение, служащее итогом выполнения операции группирования γ (при группировании создается отношение, содержащее уникальные кортежи).
Вот несколько законов, связывающих оператор δ с другими операторами:
δ (R×S) = δ (R) × δ (S).
δ (R S) = δ (R) δ (S).
δ (R S) = δ (R) δ (S).
δ (σC(R)) = σC (δ (R)).
Допустимо также применять оператор σ к одному или обоим аргументам "вложенного" оператора пересечения:
σ(R S) = δ(R) S = R δ (S) = δ (R) δ (S).
С другой стороны,
аналогичные действия в отношении
операторов
и π в общем случае запрещены.
Пример. Предположим, что отношение R содержит две копии кортежа t, a S — одну. Тогда в δ (R S) окажется один экземпляр t, а в
δ (R) δ (S) — два. Теперь рассмотрим отношение Т(а, b), содержащее всего два кортежа — (1,2) и (1,3). Отношение δ (πa(T)) будет обладать одним экземпляром кортежа (1), a πa (δ (T)) — двумя.
Наконец, следует
отметить, что конструирование сочетаний
δ с
операторами
,
вообще лишено какого-либо смысла.
Поскольку применение "множественной"
версии оператора объединения,
пересечения или разности само по себе
служит гарантией отсутствия
кортежей-дубликатов, оператор доказывается
просто избыточным, например:
δ (R S) = R S.
Впрочем, нелишне напомнить, что при реализации и иных теоретико-множественных операций в любом случае выполняется процесс удаления дубликатов, по существу равнозначный применению оператора δ.