Представления – View
Этот раздел посвящена исключительно объектам базы данных, называемым представлениями (view). Структура этой главы соответствует структуре, в которых были описаны операторы DDL и DML для базовых таблиц. В первом разделе этой главы рассматриваются операторы DDL, связанные с представлениями: create view, alter view и drop view. Затем описываются операторы DDL для представлений: select, insert, update и delete. Оператор select будет рассмотрен отдельно от других трех операторов. В отличие от базовых таблиц представления не могут быть использованы для операций модификации без некоторых ограничений.
В предыдущих главах базовые таблицы описывались с использованием операторов DDL и DML. Базовая таблица содержит данные, хранимые на диске. В отличие от них представления по умолчанию не существуют физически, т. е. их содержимое не хранится на диске. Это неверно для так называемых индексированных представлений, которые обсуждаются позже В этом разделе. Представления являются объектами базы данных, которые всегда наследуют одну или более базовых таблиц (или представлений), используя информацию метаданных. Эта информация (включая имя представления и тот способ, который используется для выборки строк из базовых таблиц) является единственной информацией представления, которая сохраняется физически. Поэтому представления также часто называют виртуальными таблицами.
Представление создается при использовании оператора create view. Общая форма этого оператора: create view view_name {(column_list)] [with [encryption i schemabinding i view_metadata}] as select_statement [with check option] Здесь view_name- имя определяемого представления; coiumn_iist- список имен, которые будут использованы для столбцов в представлении. Если эта необязательная спецификация опущена, то будут использованы имена столбцов из таблиц, лежащих в основе представления. seiect_statement задает оператор select, который отыскивает строки и столбцы из одной или более таблиц (и/или представлений). Опция with encryption кодирует оператор select, повышая, таким образом, безопасность системы баз данных. Предложение schemabinding связывает представление со схемой таблицы, лежащей в основе представления. Когда задано schemabinding,…
Язык Transact-SQL поддерживает нестандартный оператор alter view, который используется для изменения запроса в представлении. Синтаксис оператора alter view аналогичен синтаксису оператора create view. Вы можете использовать оператор alter view для исключения переназначения привилегий для представления. Изменение существующего представления с использованием этого оператора также не влияет на объекты базы данных (обычно хранимые процедуры), которые зависят от данного представления. В противном случае, если вы используете операторы drop view и create view для удаления и пересоздания представления, любые объекты базы данных, которые используют данное представление, не будут работать правильно, по крайней мере, в промежуток времени, когда представление удаляется и создается заново. В примере…
Представление sys.objects является наиболее важным представлением просмотра каталогов, имеющим отношение к представлениям. Как вы уже знаете, это представление просмотра каталогов содержит информацию, связанную со всеми объектами текущей базы данных. Все строки этого представления, которые имеют значение v для столбца type, являются представлениями. Другое представление просмотра каталогов sys.views отображает дополнительную информацию о существующих представлениях. Наиболее важным столбцом этого представления является with_check_option, который сообщает, была ли задана опция with check option. Используя системную процедуру spheiptext, вы можете отобразить запрос, принадлежащий конкретному представлению.
Представления отыскиваются и модифицируются при помощи тех же самых операторов Transact-SQL, которые используются для поиска и модификации базовых таблиц. В следующих подразделах описываются все четыре оператора DML, имеющие отношение к представлениям.
Представление используется точно так же, как и любая базовая таблица базы данных. Вы можете думать о выборке данных из представления, как если бы оператор выборки был бы преобразован в эквивалентный оператор выборки данных из базовых таблиц, лежащих в основе представления. Пример 11.9 демонстрирует это. Оператор select из примера 11.9 трансформируется в следующую эквивалентную форму с использованием базовой таблицы из представления v_d2: select emp_lname from employee where emp_lname like 'j%' and dept_no = 'd21; Следующие три раздела описывают использование представлений с тремя другими операторами DML: insert, update и delete. Изменение данных этими операторами трактуется в виде, аналогичном выборке данных. Единственным…
Представление может быть использовано с оператором insert, как если бы оно было обычной базовой таблицей. Когда представление используется для добавления строк, строки фактически добавляются в соответствующую базовую таблицу. Представление vdept, которое было создано в примере 11.10, содержит первые два столбца таблицы department. Последующий оператор insert добавляет строку в таблицу, связанную с представлением, используя значения 'd4' и 'Development'. Столбцу location, который не описан в представлении v_dept, присваивается значение null. При использовании представления обычно допустимо добавлять в представление новую строку, которая не удовлетворяет условиям в предложении where запроса в представлении. Опция with check option используется для ограничения добавления только тех…
Представление может быть использовано с оператором update, как если бы этот оператор применялся к базовой таблице. Когда представление используется для модификации строк, содержимое лежащей в основе базовой таблицы изменяется фактически. В примере 11.14 создается представление, которое затем используется для изменения таблицы workson. Вы можете рассматривать обновление представления в примере 11.14, как если бы оператор update был преобразован к следующему эквивалентному оператору: update works_on set job = null where job = 'Manager' and project_no = 'pi' Опция with check option имеет то же самое логическое значение для оператора update, что и для оператора insert. В примере 11.15 показано использование опции…
Представление может быть использовано для удаления строк из таблицы представления, как показано в примере 11.17. В примере 11.17 создается представление, которое затем используется для удаления строк из таблицы workson. Удаление строк из лежащих в основе представления таблиц нельзя выполнить, если соответствующее представление содержит любую из следующих возможностей: ♦ предложение from в определении представления включает две или более таблиц, и список столбцов содержит столбцы более чем из одной таблицы; ♦ столбец в представлении наследуется из агрегатной функции; ♦ оператор select в представлении содержит предложение group by или опцию distinct. В отличие от операторов insert и update оператор delete допускает…
Как вы уже знаете из предыдущей главы, существуют два специальных типа индексов: индексы для вычисляемых столбцов и индексы для представлений. В этом разделе описываются индексы для представлений. Представление всегда содержит запрос, который работает как фильтр. При отсутствии индексов, созданных для конкретного представления, Database Engine динамически создает результирующий набор при каждом запросе, ссылающемся на представление. («Динамически» означает, что если вы изменяете содержимое таблицы, соответствующее представление всегда вернет новую информацию.) Если представление содержит вычисления, основанные на одном или более столбцов таблицы, это вычисление будет выполняться каждый раз, когда вы обращаетесь к представлению. Динамическое создание результирующего набора для запроса может снизить производительность, если…
© 2021 serversql.ru. Все права защищены.