Главная » SQL, Базы данных » ДОПОЛНИТЕЛЬНЫЕ СВЕДЕНИЯ О РЕЛЯЦИОННОМ СВОЙСТВЕ ЗАМКНУТОСТИ

0

Как было описано в главе 3, тот факт, что результатом любой конкретной реляционной операции с отношениями является другое отношение, получил название реляционного свойства замкнутости. Из свойства замкнутости  следует,  что могут применяться вложенные  реляционные  выражения;  таковыми  являются  реляционные  выражения, операнды которых, в свою очередь, представлены реляционными выражениями произвольной сложности. (В этом проявляется очевидная аналогия между возможностью применять вложенные  реляционные выражения в реляционной алгебре и возможностью создавать  вложенные арифметические выражения в обычной арифметике; в действительности, тот факт, что отношения в алгебре подчиняются свойству замкнутости, важен именно по тем же причинам, по каким имеет важное значение то, что числа в обычной арифметике также подчиняются свойству замкнутости.)

Теперь отметим, что при обсуждении свойства замкнутости в главе 3 был намеренно пропущен один очень важный пункт. Напомним, что каждое отношение состоит из двух частей — заголовка и тела; выражаясь неформально, заголовок — это атрибуты, а тело — кортежи. Структура заголовка для базового отношения  (где  базовым отношением, как указано в главе 5, является значение базовой  переменной отношения), безусловно, известна в системе, поскольку она указана в составе определения соответствующей базовой переменной отношения. А как насчет производных отношений? Например, рассмотрим следующее выражение.

S  JOIN  P

Это выражение представляет собой соединение отношений поставщиков и деталей по совпадающим данным о городах— по атрибуту CITY, который является единственным общим атрибутом в двух отношениях. Нам известно, как будет выглядеть тело результирующего отношения, а что можно сказать о заголовке? Из свойства замкнутости следует, что это отношение должно иметь заголовок, а системе необходимо иметь сведения о структуре этого заголовка (фактически, как указано ниже, пользователь также должен иметь эти сведения). Иными словами, результирующее отношение (безусловно!) должно принадлежать  к некоторому вполне определенному типу отношения. Поэтому для  полной поддержки свойства замкнутости следует определять реляционные операции таким образом, чтобы можно было гарантировать формирование любой операцией такого результата, который  имеет  допустимый  тип  отношения,  в  частности,  имеет  допустимые  имена атрибутов. (Кстати, следует отметить, что именно этот аспект алгебры часто не получает достаточного освещения в литературе, а также, к сожалению, в языке SQL и поэтому в продуктах SQL; одним из заметных  исключений является описание этой темы, приведенное в [7.2] и [7.10]. Трактовка алгебры, представленная в данной главе, была подготовлена под очень большим влиянием этих двух работ.)

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

( S JOIN P ) WHERE CITY = ‘Athens’

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

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

S RENAME CITY AS SCITY

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

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

Ниже приведен еще один пример (в котором на сей раз применяется множественное переименование).

Следует отметить, что благодаря наличию оператора RENAME в реляционной алгебре,

Р RENAME ( PNAME AS PN, WEIGHT AS WT )

Это выражение является сокращением для следующего выражения. ( Р RENAME PNAME AS PN ) RENAME WEIGHT AS WT Результат его применения может выглядеть так, как показано ниже.

в отличие от языка SQL, нет необходимости применять имена атрибутов, уточненные с помощью точки, такие как S. S# (и фактически такие имена не поддерживаются).

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии