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

       

Средства определения представлений


Представляемая таблица, или просто представление создается с помощью оператора CREATEVIEW, который похож на соответствующий оператор языка SQL/89, но обладает существенно расширенными возможностями. Для полноты мы опишем этот оператор достаточно подробно. Как обычно, начнем со сводки синтаксических правил:

<view definition> ::= CREATE VIEW <table name> [ <left paren> <view column list> <right paren> ] AS <query expression> [ WITH [ <levels clause> ] CHECK OPTION ] <levels clause> ::= CASCADED | LOCAL <view column list> ::= <column name list>

Пояснения:

  • Выражение запроса не должно содержать спецификацию цели или динамического параметра.
  • Имя определяемого представления не должно содержаться в какой-либо ссылке на таблицу, содержащейся в выражении запроса (другими словами, не допускаются рекурсивные определения представлений).
  • В выражении запросов не должны встречаться имена временных объявляемых таблиц.
  • Если выражение запроса является обновляемым, то и определяемое представление является обновляемым. В противном случае представляемая таблица - только читаемая.

      (a) выражение запроса является обновляемым в том и только в том случае, когда содержит только выражение запроса QE или спецификацию запроса QS и

      (i) выражение запроса содержит QS или QS, не включающие выражение запроса без соединения с операторами UNION или EXCEPT;

      (ii) выражение запроса содержит QE или QS, не включающие терм запроса без соединения с оператором INTERSECT;

      (iii) QE или QS являются обновляемыми;

      (b) спецификация запроса QS является обновляемой в том и только в том случае, когда

      (i) в QS не специфицировано DISTINCT;

      (ii) каждое выражение, содержащееся в списке выборки QS, состоит из ссылки на столбец, и ни одна ссылка на столбец не появляется более одного раза;

      (iii) раздел FROM табличного выражения, непосредственно входящего в QS, содержит в точности одну ссылку на таблицу, указывающую на базовую таблицу или на обновляемую порождаемую таблицу;


      (iv) таблица, на которую содержится ссылка в разделе FROM верхнего уровня, не должна использоваться в подзапросах, входящих в раздел FROM;

      (v) табличное выражение, непосредственно содержащееся в QS, не должно включать разделы GROUPBY и HAVING;

      (c) порождаемая таблица является обновляемой в том и только в том случае, когда обновляемым является выражение запроса, содержащееся в табличном подзапросе;

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



  • Число имен столбцов в списке столбцов представления должно совпадать со степенью таблицы, специфицированной выражением запроса.
  • Если в определении представления содержится раздел WITHCHECKOPTION, то представление должно быть обновляемым.
  • Если специфицировано WITHCHECKOPTION без задания раздела уровней (levelsclause), то по умолчанию полагается указание класса CASCADED.
  • Если в определении представления специфицирован список столбцов представления, то i-тый столбец представления имеет i-тое имя из этого списка. В противном случае имена столбцов представления совпадают с именами столбцов таблицы, специфицируемой выражением запроса.
  • Набор привилегий, которые получает создатель по отношению к определяемому представлению, определяется сравнительно громоздким набором правил и в конечном счете зависит от набора привилегий, которыми располагает создатель по отношению к базовым таблицам, лежащим в основе представления, и от того, является ли представление обновляемым.
  • В соответствии с правилами обновляемости представления, для каждой строки обновляемого представления существует и только одна строка базовой таблицы, на которой в конечном счете основывается это представление. Занесение новой строки, удаление или модификация существующей строки приводит к выполнению соответствующей операции над строками этой базовой таблицы.
  • Пусть V1 - представление. По определению V1 перекрывает (span) V1, и V1 перекрывает представление V2, если V2 используется в определении V1.
  • Под операцией обновления понимаются операция INSERT и позиционная, поисковая, динамическая позиционная и подготавливаемая динамическая позиционная операции UPDATE.
  • Если представление V1 перекрывает представление V2, в определении V2 содержался раздел WITHCHECKOPTION, и в результате выполнения операции обновления V1 возникает строка, невидимая в V2, то


      (a) если в определении V1 было указано CASCADED, то вырабатывается исключительное условие;

      (b) если в определении V1 было указано LOCAL и в результате выполнения операции обновления возникает строка, видимое в таблице, на которой непосредственно определено представление V2, то вырабатывается исключительное условие.



  • Проверка ограничения WITHCHECKOPTION выполняется в конце каждой операции обновления.



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