34
Теория: да, она нужна нам!
Рис. 2.1
Фильтр
Здесь мы начинаем с отношения
flight
и применяем ограничения на зна-
чения атрибутов
arrival_airport
,
departure_airport
и
scheduled_departure
. Ре-
зультат представляет собой множество записей, то есть тоже отношение.
Рис. 2.2
Проекция
Проекция
(представленная на рис. 2.2) также принимает одно отношение
в качестве аргумента и удаляет некоторые атрибуты (столбцы). Реляционная
проекция удаляет из результата все дубликаты, но проекция SQL этого не
делает. Например, запрос
SELECT city, zip FROM address
при выполнении в PostgreSQL вернет столько строк, сколько записей в таб-
лице
address
. Но если выполнить реляционную проекцию, то для каждого
Реляционные, логические и физические операции
35
почтового индекса останется одна запись. Чтобы добиться того же результата
в PostgreSQL, нужно добавить к запросу ключевое слово
DISTINCT
:
SELECT DISTINCT city, zip FROM address
Рис. 2.3
Произведение
Произведение
(также называемое декартовым произведением и изобра-
женное на рис. 2.3) порождает множество всех пар строк из первого и вто-
рого аргументов. Очень трудно найти полезный пример произведения из
реальной жизни, но давайте представим, что мы ищем все возможные рейсы,
которые только могут существовать (из любого аэропорта мира в любой аэро-
порт). Операция произведения будет выглядеть так:
SELECT d.airport_code AS departure_airport,
a.airport_code AS arrival_airport
FROM airport a,
airport d
Теперь, когда мы рассмотрели эти основные реляционные операции, вы,
наверное, чувствуете себя обманутыми: где же соединения? Мы знаем, что
соединения очень важны. Ответ на поверхности: соединение можно выра-
зить как произведение, за которым следует фильтрация. С точки зрения
реляционной теории соединение избыточно. Это прекрасный пример того,
как работает декларативный язык; формальное определение – один (но не
единственный) из способов получить результат соединения. Если мы вычис-
лим декартово произведение двух таблиц, а затем применим фильтрацию,
то получим желаемый результат. Но надеемся, что ни один из движков баз
данных не делает так для больших наборов данных; на это могли бы уйти
годы в буквальном смысле! В главе 3 мы обсудим, как реализовать соеди-
нение более эффективно, чем прямое вычисление на основе формального
определения.
К реляционным операциям также относятся группировка, объединение,
пересечение и разность множеств.
Последний элемент реляционной теории, который нужен для оптими-
зации, –
правила
эквивалентности.
Реляционные операции удовлетворяют
некоторым правилам эквивалентности, включая:
Do'stlaringiz bilan baham: |