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

17.9. Поддержка sql

В этом разделе будут подытожены средства поддержки языка SQL для представлений (к сожалению, на данный момент SQL не поддерживает снимков данных в какой-либо форме). Прежде всего рассмотрим синтаксис инструкции create view:

CREATE VIEW представление AS та6личное_выражение [ WITH CHECK OPTION ] ;

Пояснения:

1. Выражение табличное_выражение определяет представление. Подобные выражения уже описывались ранее в этой книге.

2. Оператор with check option (если он указан) означает, что операции insert и update на представлении будут отменяться, если они будут нарушать условие, опре­деляющее представление. Поэтому заметьте, что подобные операции будут завер­шаться неудачей (только когда указан оператор with check option), по умолчанию операции вставки и обновления кортежей будут завершаться успешно. Из сказан­ного можно сделать вывод, что подобный результат логически не корректен. Поэто­му настоятельно рекомендуется для обновляемых представлений всегда указывать оператор with check option. (Конечно, здесь обновляемые представления рассмат­ривается в контексте стандарта SQL (см. далее). Действительно, оператор with check option нельзя применять для представлений, не являющихся обновляемыми.)

Замечание. Оператор with check option обладает множеством нюансов, обсуждение которых выходит за рамки этой книги. Более детально, с примерами этот оператор описан в [8.5], а критический обзор понятия дан в [17.4].

Примеры:

1. CREATE VIEW REDPARTS

AS SELECT P.P#, P.NAME, P.WEIGHT, P.CITY FROM P WHERE P.COLOR = 'Red'

WITH CHECK OPTION ;

2. CREATE VIEW LREDPARTS

AS SELECT REDPARTS. P#, REDPARTS. WEIGHT FROM REDPARTS

WHERE REDPARTS.CITY = 'London'

WITH CHECK OPTION ;

3. CREATE VIEW CITYPAIRS

AS SELECT DISTINCT S.CITY AS SCITY, P. CITY AS PCITY FROM S, SP, P

WHERE S.S# = SP.S#

AND SP.P# = P.P# ;

4. CREATE VIEW PQ

AS SELECT SP.P#, SUM ( SP.QTY ) AS ТОТQТУ FROM SP GROUP BY SP.P# ;

Существующее представление может быть уничтожено с помощью операции drop view, синтаксис которой показан ниже.

DROP VIEW представление опция ;

В этом операторе (как и в операторах drop table и drop domain) опция— это опера­торы restrict или cascade. Если используется оператор restrict и на данное представ­ление существуют ссылки из определений других представлений или из условий це­лостности, то операция drop завершится неудачей. Если используется оператор cascade, то операция drop будет завершена успешно и приведет к каскадному удалению всех представлений и ограничений целостности, определения которых ссылаются на удаляемое представление.

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

Операции обновления представлений. Стандарт SQL поддерживает весьма огра­ниченный набор операций обновления представлений. В основном как обновляемые рассматриваются только те представления, которые получены на основе одной таб­лицы базы данных с помощью некоторых комбинаций операций выборки и проекции. Более того, даже этот простой тип представлений трактуется неправильно. Причина заключается в том, что в стандарте SQL недостаточно развиты средства работы с предикатами отношений, в частности, таблицы стандарта SQL могут содержать дуб­лирующиеся строки.

Ниже более точно изложен критерий обновляемости представлений в стандарте SQL (этот список взят из [8.5]). Стандарт SQL предполагает, что представление явля­ется обновляемым тогда и только тогда, когда для него истинны утверждения 1-8. |,

1. Табличное выражение, которое определяет область действия представления, должно быть выражением выборки. Следовательно, в это выражение не должны входить операторы join, union, intersect и except.

2. Оператор select в табличном выражении не должен непосредственно содержать ключевого слова distinct.

3. Каждый элемент выборки в операторе select состоит из классифицированного имени столбца (возможно, сопровождаемого инструкцией as), который представ­ляет простую ссылку на столбец исходной таблицы (см. пункт 5).

4. Оператор FROM в выражении выборки содержит единственную ссылку на таблицу.

5. Ссылка на таблицу представляет собой либо таблицу базы данных, либо обнов­ляемое представление. Замечание. Таблица, указанная с помощью ссылки, являет­ся единственной исходной таблицей для рассматриваемого представления.

6. В выражение выборки не входит оператор where, содержащий вложенное таблич­ное выражение, которое включает оператор from, ссылающийся на ту же таблицу, что и оператор from, описанный в пункте 4.

7. Выражение выборки не содержит инструкции group by.

8. Выражение выборки не содержит инструкции having.

Замечание 1. Обновляемость в стандарте SQL реализована по принципу "все или ничего". Это значит, что все три операции, insert, update и delete, либо можно приме­нять на представлении, либо все три операции применять на представлении нельзя. Например, в контексте стандарта SQL невозможна ситуация, когда на представлении можно применять операцию delete и нельзя применять операцию insert (хотя некото­рые коммерческие программные продукты обладают такой возможностью).

Замечание 2. В стандарте SQL операция update либо применима к данному пред­ставлению, либо нет. В контексте стандарта SQL недопустима ситуация, когда одни столбцы представления являются обновляемыми, а другие — нет (хотя некоторые коммерческие программные продукты пошли дальше стандарта в этом отношении).

И, наконец, из изложенного материала следует, что целевым отношением в стан­дарте SQL может быть только именованное отношение (таблица базы данных или представление), а не более общее выражение.

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