Введение в системы БД (542480), страница 47
Текст из файла (страница 47)
На самом деле можно было бы определить любое число операторов, которые удовлетворяли бы простому необходимому условию: "отношение на входе — отношение на выходе" (множество таких операторов действительно предлагалось разными авторами; см., например, (6.101). В этой главе мы сначала рассмотрим операторы Кодда (или, по крайней мере, его версию этих операторов), а затем используем их в качестве основы для обсуждения различных алгебраических идей.
В продолжение этой темы обсуждаются способы, с помощью которых данный первоначальный набор операторов можно расширить в том или ином направлении. Обзор операций начальной алгебры Как утверждалось выше, реляционная алгебра в том виде, в котором она была определена Коддом в (6.11, состоит из восьми операторов, составляющих две группы по четыре оператора.
1. Традиционные операции над множествами: обьединение, пересечение, разносягь н Декартово произведение (все они модифицированы с учетом того, что их операндами являются отношения, а не произвольные множества), 2. Специальные реляционные операции; выборка, проекция, соединение и деление. Ниже приведены упрощенные определения этих восьми операторов (рис. 6.1). Выборка Возвращает отношение, содержащее все кортежи из заданного отношения, которые удовлетворяют указанным условиям. Операцию выборки также иногда называют операцией ограничения, поэтому далее в этой книге будет также употребляться термин ограничение, если подразумевается данная алгебраическая операция 192 Часть 11. Реляционная модель впроиььедение 1 Г l' Выборке Проекция Соединение Пересечение Рьяность е Соединение [естественное) ° Возвращает отношение, содержащее все кортежи (подкортежи) за- данного отношения, которые остались в этом отношении после ис- ключения из него некоторых атрибутов Проекция вз Рис б! Пврваначальныв васаиь операторов (обзор) Глава б.
Реляционная алгебра Пн Возвращает отношение, содержащее все возможные кортежи, кото- рые являются сочетанием двух кортежей, принадлежащих соответст- венно двум заданным отношениям Возвращает отношение, содержащее все кортежи, которые принад- лежат либо одному из двух заданных отношений, либо им обоим Возвращает отношение, содержащее все кортежи, которые принад- лежат одновременно двум заданным отношениям Возвращает отношение, содержащее все кортежи, которые принад- лежат первому из двух заданных отношений и не принадлежат вто- рому Возвращает отношение, содержащее все возможные кортежи, кото- рые представляют собой комбинацию атрибутов двух кортежей, принадлежащих двум заданным отношениям, при условии, что в этих двух комбинируемых кортежах присутствуют одинаковые значения в одном или нескольких общих для исходных отношений атрибутах (причем эти общие значения в результирующем кортеже появляются один раз, а не дважды) Для заданных двух унарных отношений и одного бинарного возвра- щает отношение, содержащее все кортежи из первого унарного от- ношения, которые содержатся также в бинарном отношении и соот- ветствуют всем кортежам во втором унарном отношении Произведение Объединение Пересечение Разность Соединение Деление ° По очевидным причинам мы часто будем использовать фразы наподобие "Х является выборкой из Е" (где Š— некоторая переменная-отношение), в то время как более корректно следовало бы говорить "Х вЂ” выборка из отношения, которое является текущим значением переменной-отношения Е" или даже "Х вЂ” это переменная, текущим значением которой является выборка из отношения, которое является текущим значением переменной-отношения Е".
Мы надеемся, что такое сокращение не приведет к путанице. ° Обсуждение БО).-операторов, соответствующих операторам реляционной алгебры, мы откладываем до главы 7 по причинам, которые будут объяснены в этой главе позднее. 194 Уасть 11 Реляционная модель На этом закончим краткий обзор первоначальных операторов. План остальной части главы такой: в следующем разделе повторно и более подробно рассматривается вопрос реляционного замыкания. Затем в разделах 6.3 и 6.4 детально обсуждаются восемь первоначальных операторов, предложенных Колдом, а в разделе 6.5 даются некоторые примеры их использования для построения запросов.
В разделе 6.6 рассматривается более общий вопрос о назначении реляционной алгебры. В разделе 6.7 описывается несколько полезных расширений начальной алгебры Кодда, в частности два важных оператора— ЕХТЕЮ и ЯоййАЕ128. В разделе 6.8 приводятся операторы отображения между отношениями, которые включают атрибуты, принимающие в качестве значений другие отношения, и между отношениями с атрибутами, которые принимают только скалярные значения. В разделе 6.9 рассматривается реляционное сравнение.
И наконец в разделе бдб приводится краткое заключение. И еше два предварительных замечания. 6.2. Реляционная замкнутость Уже не раз отмечалось, что результат выполнения любой операции над отношением также является отношением. Эта особенность называется свойством реляционной замкнутости и впервые упоминается в главе 3. Там же делается вывод; поскольку результат выполнения любой операции имеет тот же тип, что н исходные объекты (отношения), результат одной операции может использоваться в качестве исходных данных для другой. Другими словами, можно записывать вложенные реляционные выражения, т.е.
выражения, в которых операнды сами представлены реляционными выражениями, причем произвольной сложности. (Есть явная аналогия между возможностями использования вложенных реляционных выражений в реляционной алгебре и вложенных арифметических выражений в обычной арифметике. Действительно, тот факт, что отношения с точки зрения реляционной алгебры являются замкнутыми, исключительно важен для нее по тем же причинам, по которым в обычной алгебре важен тот факт, что с ее точки зрения множество чисел также является замкнутым.) При обсуждении свойства реляционной замкнутости в главе 3 сознательно умалчивался один существенный момент. Напомним, что отношение имеет две части — заголовок н тело.
Нестрого говоря, заголовок — это атрибуты, а тело — это кортежи. Заголовок для базового отношения, т.е. значения базовой переменной-отношения, очевидно, вполне конкретен и известен системе, поскольку он задается как часть определения соответствующей базовой переменной-отношения. Ну а как же в случае производных отношений? Например, рассмотрим следующее выражение. Б а01Н Р Оно представляет собой соединение отношения поставщиков и отношения деталей по совпадению значения названия города (поскольку только атрибут С1ТТ является общим для этих двух отношений). Мы знаем, что собой представляет тело результата данного соединения.
А какой же будет у него заголовок? Обязательное наличие заголовка диктуется реляционной замкнутостью, и системе должно быть известно, что он собой представляет (в равной степени это необходимо знать и пользователю, как мы скоро увидим). Иначе говоря, результат обязательно — непременно! — должен иметь вполне определенный тип отношения. Поэтому, если рассматривать свойство реляционной замкнутости более строго, каждая реляционная операция должна быть определена таким образом, чтобы выдавать результат с надлежащим типом отношения (в частности, с соответствующим набором имен атрибутов или заголовком)'.
Основная причина, по которой мы требуем, чтобы каждое результирующее отношение обязательно имело соответствующий набор имен атрибутов, заключается в необходимости иметь возможность ссылаться на эти имена атрибутов в последующих операциях, в частности в послелующих операциях, расположенных на более глубоких уровнях вложенного выражения. Например, если бы мы не знали, что результат вычисления выражения Я а01Н Р включает атрибут с именем С1ТТ, то мы просто не смогли бы даже записать выражение, подобное следующему.
(Б Ю01К Р) ИНЕЕ С1ТТ = 'И)зепя' З Отчетам, что данный аспект алгебры, как правило, недооценивается в литературе (и, как зпю ни печально, в языке 5Ггй а значит, и в БЯь-продуктах). Это не относится к двум заметным работач — Холла и др. (6 ) 0) и Дарвена ЗбгЗ.
Представленная в данной главе версия реляционной азгебры была выбрана в значительной мере под влиянием этих двух работ. 195 Глава б. Реляционная алгебра Другими словами, необходим такой встроенный в реляционную алгебру набор правил вывода типов (отношений), чтобы можно было вывести тип (отношения) на выходе произвольной реляционной операции, зная тип или типы (отношения) на входе этой операции.
Задав такие правила для всех операций, можно гарантировать, что для реляционного выражения любой сложности будет вычисляться результа~, имеющий вполне определенный тип (отношения) и, в частности, известный набор имен атрибутов. Для достижения этой цели в качестве предварительного действия введем новый оператор МЕМАМЕ, предназначенный для переименования атрибутов в определенном отношении. Точнее, для заданного отношения оператор МЕМАМЕ возвращает другое отношение, которое идентично начальному, за исключением того, что по крайней мере один из атрибутов имеет другое имя.