Проектирование и реализация представлений

Перед созданием представления следует учесть следующие рекомендации.

  • Представления можно создавать только в текущей базе данных, хотя таблицы и представления, на которые ссылается создаваемое представление, могут находиться в других базах данных или даже на других серверах, если представление создается с использованием распределенных запросов.

  • Имена представлений должны соответствовать правилам именования идентификаторов и быть уникальными для каждой схемы. Имя также не должно совпадать с именами таблиц, содержащихся в схеме.

  • Представления можно создавать с использованием других представлений. Microsoft SQL Server позволяет использовать вложенные представления. Уровень вложенности не должен превышать 32. Реальное ограничение предела уровня вложенности представлений может быть и меньше; он зависит от сложности представлений и объема доступной памяти.

  • С представлениями нельзя связывать правила и использовать определения DEFAULT.

  • С представлениями нельзя использовать триггеры типа AFTER, но можно использовать триггеры типа INSTEAD OF.

  • Запрос, определяющий представление, не может включать предложения COMPUTE и COMPUTE BY, а также ключевое слово INTO.

  • Запрос, определяющий представление, не может включать предложение ORDER BY, если только в списке выборки инструкции SELECT не содержится предложение TOP.

  • Запрос, определяющий представление, не может содержать параметр OPTION с подсказкой.

  • Запрос, определяющий представление, не может содержать предложение TABLESAMPLE.

  • Для представлений нельзя определять полнотекстовые индексы.

  • Нельзя создавать временные представления, а также представления для временных таблиц.

  • Представления, таблицы и функции, участвующие в представлении, созданном с применением предложения SCHEMABINDING, нельзя удалить, пока предложение не будет удалено или изменено с отменой привязки к схеме. Кроме того, инструкции ALTER TABLE, изменяющие таблицы, на которые ссылаются представления с привязкой схемы, завершатся с ошибкой, если они затрагивают определение представления.

  • Если представление создано без применения предложения SCHEMABINDING, то при изменении объектов, влияющих на определение представления, необходимо выполнять хранимую процедуру sp_refreshview. В противном случае при обращении к представлению можно получить непредвиденные результаты.

  • К представлению нельзя применять запросы полнотекстового поиска, хотя его определение может содержать запрос полнотекстового поиска, если запрос ссылается на таблицу, для которой было настроено полнотекстовое индексирование.

  • В представлении необходимо указывать имена для каждого столбца в следующих случаях.

    • Какой-либо из столбцов в представлении является производным от арифметического выражения, встроенной функции или константы.

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

    • Необходимо какому-либо столбцу представления назначить имя, отличное от имени столбца, от которого столбец представления является производным (столбцы в представлении также можно переименовывать). Столбец представления наследует тип данных столбца, для которого он является производным, даже после переименования.

      ПримечаниеПримечание

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

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

Для создания представления требуются разрешения на эту операцию, предоставленные владельцем базы данных, кроме того, если при создании представления используется предложение SCHEMABINDING, требуются соответствующие разрешения доступа ко всем таблицам и представлениям, на которые ссылается определение представления.

По умолчанию строки, по мере их добавления или обновления через представление, исчезают из области видимости представления, когда перестают соответствовать критериям запроса, которые оно определяет. Например, можно создать запрос, который определяет следующее представление: выбирает из таблицы все строки, для которых заработная плата сотрудников ниже 30 тысяч рублей. Если заработная плата сотрудника возрастет до 32 тысяч рублей, то при выполнении запроса данные об этом сотруднике не будут возвращены, так как его заработная плата не соответствует критерию представления. Однако предложение WITH CHECK OPTION принудительно устанавливает режим, в котором все инструкции изменения данных, выполняемые над представлением, будут соответствовать критериям, заданным в определяющей представление инструкции SELECT. При использовании этого предложения изменение строк, которое привело бы к их исчезновению из представления, невозможно. Любые изменения, которые могли бы это вызвать, отменяются, и возвращается ошибка.

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