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

9.1. Введение

Как отмечалось в главе 3, представление, по сути, является именованным выражени­ем реляционной алгебры (или чем-либо, что равносильно выражению реляционной ал­гебры). Например:

VAR GOOD_SOPPLIER VIEW

( S WHERE STATUS > 15 ) { Si, STATUS, CITY } ;

GOOD SUPPLIERS

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

s#

SNAME

STATUS

CITY

SI

Smith

20

London

S2

Jones

10

Paris

S3

Blake

30

Paris

S4

Clark

20

London

S5

Adams

30

Athens

Рис. 9.1. Представление GOOD SUPPLIER как заданный фрагмент базовой переменной-отношения S (незатененные части таблицы)

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

В реальной ситуации многие пользователи могут даже не предполагать, что G00D_SUPPLIER — это представление. Одни пользователи могут знать об этом, а также о том, что существует реальная переменная-отношение S, тогда как другие могут искренне верить, что GOOD_SUPPLIERS — настоящая переменная-отношение. Но в любом случае главное то, что с представлением можно работать так, как будто оно является настоящей переменной-отношением. Приведем пример запроса к представлению GOOD SUPPLIER.

GOODJUPPLIER WHERE CITY Ф 'London' ;

Ниже показан результат выполнения этого запроса.

s#

STATUS

CITY

S3 S5

30 30

Paris Athens

Этот запрос, безусловно, похож на обычный запрос к обычной "реальной" перемен­ной-отношению. Как отмечалось в главе 3, система обрабатывает запросы подобного ти­па путем их преобразования в запросы к базовой переменной-отношению (или базовым переменным-отношениям). Подобное преобразование осуществляется посредством за­мены в определении запроса всех вхождений имени представления тем выражением, ко­торое его определяет. В нашем примере после процедуры подстановки будет получен следующий запрос.

( ( S WHERE STATUS > 15 ) { St, STATUS, CITY } )

WHERE CITY Ф 'London' ;

Данное выражение можно легко преобразовать в более простую форму.

( S WHERE STATUS > 15 AND CITY Ф 'London' )

{ St, STATUS, CITY } ;

Результат вычисления последнего выражения совпадает с приведенным выше резуль­татом запроса к представлению.

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

Операции обновления на представлениях обрабатываются аналогично. Например, рассмотрим следующую операцию.

UPDATE G00D_SUPPLIER WHERE CITY = 'Paris' STATUS := STATUS + 10 ;

При обработке она будет приведена к такому виду.

UPDATE S WHERE STATUS > 15 AND CITY = 'Paris' STATUS := STATUS + 10 ;

Для операций INSERT и DELETE применяется тот же подход.

Дополнительные примеры

В этом подразделе представлено несколько примеров, на которые в дальнейшем мы будем ссылаться.

1. VAR REDPART VIEW

( ( Р WHERE COLOR = COLOR ( 'Red' ) ) { ALL BUT COLOR } )

RENAME WEIGHT AS WT ;

В представлении REDPART присутствуют атрибуты Pi, PNAME, WT и CITY. В него по­мещаются только те кортежи, которые описывают красные детали.

2. VAR PQ VIEW

SUMMARIZE SP PER P { Pi } ADD SUM j QTY ) AS TOTQTY ;

В отличие от представлений GOOD SUPPLIER и REDPARTS, представление PQ не явля­ется простым подмножеством данных, получаемым посредством операции выбор­ки или проекции некоторой базовой переменной-отношения. Это представление можно рассматривать как статистический итог или результат обобщения данных исходной переменной-отношения.

3. VAR CITY_PAIR VIEW

( ( S RENAME CITY AS SCITY ) JOIN SP JOIN

( P RENAME CITY AS PCITY ) ) { SCITY, PCITY } ;

Пара имен городов (x, у) появляется в представлении CITY_PAIR тогда и только тогда, когда поставщик, находящийся в городе х, поставляет детали, которые хра­нятся в городе у. Например, поставщик с номером ' S1' поставляет детали с номе­ром 'Р1'. При этом данный поставщик находится в Лондоне и поставляемые им детали хранятся также в Лондоне. В результате в представлении CITY PAIR будет присутствовать пара названий городов (' London', ' London').

4. VAR HEAVY REDPART VIEW

REDPART WHERE WT > WEIGHT ( 12.0 ) j

В этом примере демонстрируется, как одно представление определяется через другое.

Определение и удаление представлений

Синтаксис оператора определения представления выглядит следующим образом.

VAR <имя перемежой-отношения> VIEW реляционное выражетё>

<список определения потенциальных ключей>}

В приведенном выражении параметр <список определения потенциальных ключей> мо­жет быть пустым, поскольку система должна уметь определять потенциальные ключи пред­ставления самостоятельно [10.6]. Например, в случае представления G00D_SUPPLIER системе должно быть известно, что единственным потенциальным ключом, о котором может идти речь, является ключ {Si}, унаследованный от исходной базовой переменной-отношения S.

Как уже отмечалось (используя терминологию ANSI/SPARC, обсуждавшуюся в главе 2), определения представлений объединяют функции внешней схемы и функции отображения уровня "внешний-концептуальный", поскольку они описывают и сам внешний объект (т.е. представление), и способ его отображения на концептуальный уро­вень (т.е. на одну или несколько исходных базовых переменных-отношений).

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

Синтаксис оператора удаления представления имеет следующий вид.

DROP VAR <ит переменной-отношения> ;

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

Замечание. Стандартная версия языка SQL не поддерживает подобной опции в опера­торе определения представления, однако она включена в оператор DROP. Также не огово­рено, какое значение опции будет использоваться по умолчанию; требуется явно указы­вать одно из значений опции (см. раздел 9.6).

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