Скачиваний:
32
Добавлен:
01.04.2014
Размер:
418.3 Кб
Скачать

Часть 5

Глава 17 Представления

17.1. Введение

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

CREATE VIEW GOOD_SUPPLIERS AS

( S WHERE STATUS > 15 ) [ S#, STATUS, CITY ] ;

Когда данное выражение выполняется, то часть, следующая за инструкцией as и являющаяся собственно определением представления, на самом деле не выполняется, а "запоминается" системой посредством записи этого выражения в каталоге базы данных под именем GOOD_SUPPLIERS. Тем не менее, пользователю представляется, будто в базе данных существует реальное отношение GOOD_SUPPLIERS со своими кортежами и атрибутами, показанными в незатененной части таблицы на рис. 17.1. Другими словами, имя GOOD_SUPPLIERS ссылается на виртуальное отношение, т.е. на отношение, которое является результатом вычисления выражения, определяющего представление.

GOOD_SUPPLIERS

S#

SNAME

STATUS

CITY

S1

S2

S3

S4

S5

Smith

Jones

Blake

Clark

Adams

20

10

30

20

30

London

Paris

Paris

London

Athens

Рис. 17.1. GOOD_SUPPLIERS как представление исходного отношения S. В представление не входят дан­ные, приведенные курсивом.

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

Теперь, в зависимости от опыта работы (и, возможно, от сложности используемо­го приложения), пользователь может не догадываться, что GOOD_SUPPLIERS — представление. Некоторые пользователи знают об этом, а также о том, что существу­ет реальное отношение S; другие могут искренне верить, что GOOD_SUPPLIERS — настоящее отношение. Независимо от догадок пользователей, суть представления со­стоит в том, что с ним можно работать так, как будто оно является настоящим отно­шением. Приведем пример запроса к GOOD_SUPPLIERS:

Т1 := GOOD SUPPLIERS WHERE CITY <> 'London' ;

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

T1

S#

STATUS

CITY

S3

S5

30

30

Paris

Athens

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

Т1 :=( ( S WHERE STATUS > 15 ) [ S#, STATUS, CITY ] )

WHERE CITY <> 'London' ;

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

Т1 := ( S WHERE STATUS > 15 AND CITY <> 'London' )

[ S#, STATUS, CITY ] ;

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

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

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

UPDATE GOOD_SUPPLIERS WHERE CITY = 'Paris'

STATUS := STATUS + 10 ;

будет преобразована в операцию

UPDATE S WHERE STATUS > 15 AND CITY=’Paris’

STATUS:= STATUS + 10 ;

Операции INSERT и DELETE обрабатываются аналогично.

Соседние файлы в папке Дейтл Введ в БД