Введение в стандарты языка баз данных SQL

       

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


Механизм представлений (view) является мощным средством языка SQL, позволяющим скрыть реальную структуру БД от некоторых пользователей за счет определения представления БД, которое реально является некоторым хранимым в БД запросом с именованными столбцами, а для пользователя ничем не отличается от базовой таблицы БД (с учетом технических ограничений). Любая реализация должна гарантировать, что состояние представляемой таблицы точно соответствует состоянию базовых таблиц, на которых определено представление. Обычно вычисление представляемой таблицы (материализация соответствующего запроса) производится каждый раз при использовании представления.

В стандарте SQL/89 оператор определения представления имеет следующий синтаксис:

<view definition> ::= CREATE VIEW <table name> [(<view column list>)] AS <query specification> [WITH CHECK OPTION] <view column list> ::= <column name> [{,<column name>}...]

Определяемая представляемая таблица V является обновляемой (т.е. по отношению к V можно использовать операторы DELETE и UPDATE) в том и только в том случае, если выполняются следующие условия для спецификации запроса:

  • в списке выборки не указано ключевое слово DISTINCT;
  • каждое арифметическое выражение в списке выборки представляет собой одну спецификацию столбца, и спецификация одного столбца не появляется более одного раза;
  • в разделе FROM указана только одна таблица, являющаяся либо базовой таблицей, либо обновляемой представляемой таблицей;
  • в условии выборки раздела WHERE не используются подзапросы;
  • в табличном выражении отсутствуют разделы GROUPBY и HAVING.

Замечание: Эти ограничения являются очень сильными. В реализациях они могут быть ослаблены. Но если стремиться к мобильности, не следует пользоваться расширенными возможностями.

Если в списке выборки спецификации запроса имеется хотя бы одно арифметическое выражение, состоящее не из одной спецификации столбца, или если одно имя столбца участвует в списке выборки более одного раза, определение представления должно содержать список имен столбцов представляемой таблицы. Если выражаться более лаконично, это означает, что нужно явно именовать столбцы представляемой таблицы, если эти имена не наследуются от столбцов таблиц раздела FROM спецификации запроса.

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



Содержание раздела