Программирование >>  Хронологические базы данных 

1 ... 52 53 54 [ 55 ] 56 57 58 ... 348


Произведение Возвращает отношение, содержащее все возможные кортежи, которые являются сочетанием двух кортежей, принадлежащих соответственно двум заданным отношениям

Объединение Возвращает отношение, содержащее все кортежи, которые принадлежат либо одному из двух заданных отношений, либо им обоим

Пересечение Возвращает отношение, содержащее все кортежи, которые принадлежат одновременно двум заданным отношениям

Разность Возвращает отношение, содержащее все кортежи, которые принад-

лежат первому из двух заданных отношений и не прина:1лежат второму

Соединение Возвращает отношение, содержащее все возможные кортежи, которые представляют собой комбинацию атрибутов двух кортежей, принадлежащих двум заданным отношениям, при условии, что в этих двух комбинируемых кортежах присутствуют одинаковые значения в одном или нескольких общих для исходных отношений атрибутах (причем эти общие значения в результирующем кортеже появляются один раз, а не дважды)

Деление Для заданных двух унарных отношений и одного бинарного возвра-

щает отношение, содержащее все кортежи из первого унарного отношения, которые содержатся также в бинарном отношении и соответствуют всем кортежам во втором унарном отношении

На этом закончим краткий обзор первоначальных операторов. План остальной части главы такой: в следующем разделе повторно и более подробно рассматривается вопрос реляционного замыкания. Затем в разделах 6.3 и 6.4 детально обсуждаются восемь первоначальных операторов, предложенных Коддом, а в разделе 6.5 даются некоторые примеры их использования для построения запросов. В разделе 6.6 рассматривается более общий вопрос о назначении реляционной алгебры. В разделе 6.7 описывается несколько полезных расширений начальной алгебры Кодда, в частности два важных оператора - EXTEND и SUMMARIZE. В разделе 6.8 приводятся операторы отображения между отношениями, которые включают атрибуты, принимающие в качестве значений другие отношения, и между отношениями с атрибутами, которые принимают только скалярные значения. В разделе 6.9 рассматривается реляционное сравнение. И наконец в разделе 6.10 приводится краткое заключение.

И еще два предварительных замечания.

По очевидным причинам мы часто будем использовать фразы наподобие X является выборкой из R (где R - некоторая переменная-отношение), в то время как более корректно следовало бы говорить X - выборка из отношения, которое является текущим значением переменной-отношения R или даже X - это переменная, текущим значением которой является выборка из отношения, которое является текущим значением переменной-отношения R . Мы надеемся, что такое сокращение не приведет к путанице.

Обсуждение SQL-операторов, соответствующих операторам реляционной алгебры, мы откладываем до главы 7 по причинам, которые будут объяснены в этой главе позднее.



6.2. Реляционная замкнутость

Уже не раз отмечалось, что результат выполнения любой операции над отношением также является отношением. Эта особенность называется свойством реляционной замкнутости и впервые упоминается в главе 3. Там же делается вывод: поскольку результат выполнения любой операции имеет тот же тип, что и исходные объекты (отношения), результат одной операции может использоваться в качестве исходных данных для другой. Другими словами, можно записывать вложенные реляционные выражения, т.е. выражения, в которых операнды сами представлены реляционными выражениями, причем произвольной сложности. (Есть явная аналогия между возможностями использования вложенных реляционных выражений в реляционной алгебре и вложенных арифметических выражений в обычной арифметике. Действительно, тот факт, что отношения с точки зрения реляционной алгебры являются замкнутыми, исключительно важен для нее по тем же причинам, по которым в обычной алгебре важен тот факт, что с ее точки зрения множество чисел также является замкнутым.)

При обсуждении свойства реляционной замкнутости в главе 3 сознательно умалчивался один сушественный момент. Напомним, что отношение имеет две части - заголовок и тело. Нестрого говоря, заголовок - это атрибуты, а тело - это кортежи. Заголовок для базового отношения, т.е. значения базовой переменной-отношения, очевидно, вполне конкретен и известен системе, поскольку он задается как часть определения со-ответствуюшей базовой переменной-отношения. Ну а как же в случае производных отношений? Например, рассмотрим следующее выражение.

S JOIN Р

Оно представляет собой соединение отношения поставшиков и отношения деталей по совпадению значения названия города (поскольку только атрибут CITY является обшим для этих двух отношений). Мы знаем, что собой представляет тело результата данного соединения. А какой же будет у него заголовок? Обязательное наличие заголовка диктуется реляционной замкнутостью, и системе должно быть известно, что он собой представляет (в равной степени это необходимо знать и пользователю, как мы скоро увидим). Иначе говоря, результат обязательно- непременно!- должен иметь вполне определенный тип отношения. Поэтому, если рассматривать свойство реляционной замкнутости более строго, каждая реляционная операция должна быть определена таким образом, чтобы выдавать результат с надлежащим типом отношения (в частности, с соответствующим набором имен атрибутов или заголовком).

Основная причина, по которой мы требуем, чтобы каждое результирующее отношение обязательно имело соответствующий набор имен атрибутов, заключается в необходимости иметь возможность ссылаться на эти имена атрибутов в последующих операциях, в частности в последующих операциях, расположенных на более глубоких уровнях вложенного выражения. Например, если бы мы не знали, что результат вычисления выражения S JOIN Р включает атрибут с именем CITY, то мы просто не смогли бы даже записать выражение, подобное следующему.

(S JOIN Р) WHERE CITY = Athens

Отметим, что данный аспект алгебры, как правило, недооценивается в литературе (и, как это ни печально, в языке SQL, а значит, и в SQL-продуктах). Это не относится к двум заметным работам -Холла и др. [6.10] и Дарвена [6.2]. Представленная в данной главе версия реляционной алгебры была выбрана в значительной .мере под влиянием этих двух работ.



Другими словами, необходим такой встроенный в реляционную алгебру набор правил вывода типов (отношений), чтобы можно было вывести тип (отношения) на выходе произвольной реляционной операции, зная тип или типы (отношения) на входе этой операции. Задав такие правила :1ля всех операций, можно гарантировать, что для реляционного выраженш любой сложности будет вычисляться результат, имеюший вполне определенный тип (отношения) и, в частности, известный набор имен атрибутов.

Для достижения этой цели в качестве предварительного действия введем новый оператор RENAME, предназначенный для переименования атрибутов в определенном отношении. Точнее, :1ля заданного отношения оператор RENAME возвращает другое отношение, которое идентично начальному, за исключением того, что по крайней мере один из атрибутов имеет другое имя. (Заданное отношение, конечно же, может быть результатом вычисления реляционного выражения, возможно, включающего другие алгебраические операции.) Например, можно написать следующее.

S RENAME CITY AS SCITY

С помощью этого выражения (обратите внимание, что рассматриваемая запись является выражением, а не командой или оператором, а значит, может быть вложена в другие выражения) вычисляется отношение, имеющее то же самое тело, что и отношение S, но с именем атрибута SCITY вместо CITY.

SNAME

STATUS

SCITY

Smith

London

Jones

Paris

Black

Paris

Clark

London

Adams

Athens

Важно отметить, что выражение RENAME не изменяет базовую переменную-отношение поставщиков в базе данных - оно является выражением (точно так, как и выражение S JOIN SP) и, следовательно, выдает некоторый результат (в данном случае этот результат очень похож на текущее значение переменной-отношения поставщиков).

Вот еще один пример (на этот раз переименовывается сразу несколько атрибутов).

Р RENAME PNAME AS PN, WEIGHT AS WT

Результат вычисления этого выражения будет выглядеть следующим образом.

COLOR

CITY

12.0

London

Bolt

Green

17.0

Paris

Screw

Blue

17.0

Rome

Screw

14.0

London

Blue

12.0

Paris

19.0

London

Стоит явно подчеркнуть: наличие оператора RENAME означает, что (в отличие от языка SQL) в реляционной алгебре не требуется использовать механизм уточнения имен атрибутов наподобие S.St.



1 ... 52 53 54 [ 55 ] 56 57 58 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика