Скачиваний:
147
Добавлен:
02.05.2014
Размер:
2.66 Mб
Скачать

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

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

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

S JOIN Р

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

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

(S JOIN Р) WHERE CITY = 'Athens'

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

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

S RENAME CITY AS SCITY

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

s#

SNAME

STATUS

SCITY

SI

Smith

20

London

S2

Jones

10

Paris

S3

Black

30

Paris

S4

Clark

20

London

S5

Adams

30

Athens

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

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

Р RENAME PNAME AS PN, WEIGHT AS WT

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

р#

PN

COLOR

WT

CITY

Р1

Nut

Red

12.0

London

Р2

Bolt

Green

17.0

Paris

РЗ

Screw

Blue

17.0

Rome

Р4

Screw

Red

14.0

London

Р5

Cam

Blue

12.0

Paris

Р6

Cog

Red

19.0

London

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

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]