| Каталог | Индекс раздела |
| Назад | Оглавление | Вперед |
Представление - это виртуальная таблица, которая сама по себе не существует, но для пользователя выглядит таким образом, как будто она существует. Представление определяется перечнем тех столбцов таблиц и признаками тех их строк, которые хотелось бы в ней увидеть. Представление является как бы "окном" в одну или несколько базовых таблиц. Оно создается с помощью предложения CREATE VIEW, синтаксис которого показан на рис. 4.1.

Рисунок 4.1 - Синтаксис оператора CREATE VIEW
Список имен столбцов должен быть обязательно определен лишь в тех случаях, когда:
Если же список отсутствует, то представление наследует имена столбцов из подзапроса.
Представление может быть уничтожено оператором DROP VIEW (рис.4.2).

Рисунок 4.2 - Синтаксис оператора DROP VIEW
Представления создают для пользователя более удобный вид на базу данных, объединяя или выделяя те данные, которые нужны данному пользователю.
Представления обеспечивают некоторую независимость программ от данных. Если приложение работает с представлением, то при изменении структуры базы данных представление для этого приложения не меняется или для него может быть создано новое представление, эквивалентное старому.
Представление не поддерживается его собственными физическими хранимыми данными. Вместо этого в каталоге таблиц хранится определение, оговаривающее, из каких столбцов и строк других таблиц оно должно быть сформировано представление при выполнении SQL-оператора, выбирающего данные из представления или модифицирующего такие данные. В каталоге базы данных представление сохраняется в виде того запроса, который его определяет. При трансляции запроса, содержащего обращение к представлению, "SQL-машина" подставляет вместо него обращение к базовой таблице или таблицам и добавляет те условия, которые определяют представление.
Во всех выражениях выборки представление может быть использовано вместо таблицы без всяких ограничений. Сложнее обстоит дело с модификацией представления, более подробному его рассмотрению мы посвятим отдельный раздел.
Требование WITH CHECK OPTION в определении представления имеет смысл только в случае определения изменяемого представления, которое в своем определении содержит запрос с фразой WHERE. При наличии этого требования не допускаются такие изменения представления, которые приводят к появлению в базовой таблице строк, не видимых в представлении (то есть, таких строк, которые не удовлетворяют условию поиска фразы WHERE спецификации запроса). Если WITH CHECK OPTION в определении представления отсутствует, такой контроль не производится.
Проиллюстрируем работу на примере. Создадим базовую таблицу:
CREATE TABLE bt (
a1 INTEGER,
a2 INTEGER )
Заполним ее значениями таким образом, чтобы содержимое таблицы стало следующим:
A1 A2
--------- ---------
1 10
2 20
3 30
4 40
5 50
6 60
7 70
8 80
9 90
10 100
11 110
Создадим представление:
CREATE VIEW v1 AS
(SELECT * FROM bt WHERE a2>80);
Теперь выполним следующие операторы:
1) INSERT INTO v1 VALUES(12, 35)
2) DELETE FROM v1 WHERE a1=3
3) DELETE FROM v1 WHERE a2=10
4) UPDATE v1 SET a2=10 WHERE a2=110
5) UPDATE v1 SET a2=200 WHERE a2=20
6) UPDATE v1 SET a2=210 WHERE a1=1
Все операторы выполняться без ошибок, но для операторов 1 и 5 будет выведено сообщение о вставке или изменении 1 строки, для остальных - об удалении или изменении 0 строк. Результирующее содержимое таблицы bt будет таким:
A1 A2
--------- ---------
1 10
2 20
3 30
4 40
5 50
6 60
7 70
8 80
9 90
10 100
11 10
12 35
Из приведенного примера видно, что если представление создано без требования WITH CHECK OPTION, то строки базовой таблицы, не удовлетворяющие условию WHERE в определении представления, не видны для запроса к представлению и не могут быть изменены или удалены. Но при вставке или изменении строк может быть получена результирующая строка, не удовлетворяющие условию WHERE в определении представления. Такая строка сохранится в базовой таблице, но не будет видна в представлении.
Теперь восстановим прежнее содержимое таблицы bt и пересоздадим представление:
DROP VIEW v1;
CREATE VIEW v1 AS
(SELECT * FROM bt WHERE a2>80)
WITH CHECK OPTION
При выполнении теперь тех же операторов модификации данных операторы 1 и 5 не выполнятся, для них будет выведено сообщение об ошибке, остальные операторы по-прежнему завершатся без ошибок, но с удалением или изменением 0 строк. Требование WITH CHECK OPTION исключает возможность любых модификаций строк базовой таблицы, выходящих за пределы видимости представления.
| Назад | Оглавление | Вперед |
| Каталог | Индекс раздела |