Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_BD.doc
Скачиваний:
12
Добавлен:
14.04.2019
Размер:
1.55 Mб
Скачать

4.5.2 Оператор определения представлений create view

Представление - это виртуальная таблица, которая сама по себе не существует, но для пользователя выглядит таким образом, как будто она существует. Представление не поддерживаются его собственными физическими хранимыми данными. Вместо этого в каталоге таблиц хранится определение, оговаривающее, из каких столбцов и строк других таблиц оно должно быть сформировано. Механизм представлений (view) является мощным средством языка SQL, позволяющим скрыть реальную структуру БД от некоторых пользователей за счет определения представления БД, которое реально является некоторым хранимым в БД запросом с именованными столбцами, а для пользователя ничем не отличается от базовой таблицы БД (с учетом технических ограничений). Любая реализация должна гарантировать, что состояние представляемой таблицы точно соответствует состоянию базовых таблиц, на которых определено представление. Синтаксис предложения CREATE VIEW имеет вид:

CREATE VIEW <имя_представления>

[(<столбец>[,<столбец>] ...)]

AS подзапрос

[WITH CHECK OPTION];

где подзапрос, следующий за AS и являющийся определением данного представления, не исполняется, а просто сохраняется в каталоге;

необязательная фраза «WITH CHECK OPTION» (с опцией проверки) указывает, что для операций INSERT и UPDATE над этим представлением должна осуществляться проверка, обеспечивающая удовлетворение WHERE фразы подзапроса;

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

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

б) два или более столбцов подзапроса имеют одно и то же имя;

если же список отсутствует, то представление наследует имена столбцов из подзапроса.

Пример 4.52 Например, создадим представление Лондон_продавцы, которое может рассматриваться пользователем как новая таблица в базе данных:

CREATE VIEW Лондон_продавцы AS SELECT *

FROM Продавцы WHERE city = 'Лондон';

Пример 4. 53 Следующее представление содержит данные о количестве заказчиков с каждым значением рейтинга: CREATE VIEW Оценка (rating, number)

AS SELECT rating, COUNT (*) FROM Заказчики GROUP BY rating;

Пример 4. 54 Предположим, что компания предусматривает премию для тех продавцов, которые имеют заказчика с самым высоким порядком для любой указанной даты. Можно проследить эту информацию с помощью представления:

CREATE VIEW Максимум AS

SELECT b.odate, a.snum, a.sname, FROM Продавцы a, Порядки b WHERE a.snum = b.snum

AND b.amt = (SELECT MAX (amt) FROM Порядки c WHERE c.odate = b.odate);

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

  • в списке выборки не указано ключевое слово DISTINCT;

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

  • в разделе FROM указана только одна таблица, являющаяся либо базовой таблицей, либо модифицируемым представлением;

  • в условии выборки раздела WHERE не используются подзапросы;

  • отсутствуют разделы GROUP BY и HAVING.

Таким образом, могут быть модифицируемые представления (пример 4.52) и представления только для чтения, которые разрешается использовать только в команде SELECT (примеры 4.53, 4.54). С помощью представлений можно создать библиотеку сложных запросов и работать с сохраненными представлением как с таблицами.

Возможна ситуация, когда в модифицируемое представление добавляются данные, которые «проглатываются» (swallowed) в базовой таблице.

Пример 4. 55 Рассмотрим такое представление:

CREATE VIEW Рейтинг

AS SELECT cnum, rating FROM Заказчики WHERE rating = 300;

Это - представление модифицируемое. Оно просто ограничивает доступ к определенным строкам и столбцам в таблице. Предположим, что вы вставляете (INSERT) следующую строку:

INSERT INTO Рейтинг VALUES (2018, 200);

Это - допустимая команда INSERT в этом представлении. Строка будет вставлена с помощью представления Рейтинг в таблицу Заказчики. Однако когда она появится там, она исчезнет из представления, поскольку значение оценки не равно 300. Это - обычная проблема. Пользователь не сможет понять, почему введя строку, он не может ее увидеть, и будет неспособен при этом удалить ее. Вы можете быть гарантированы от модификаций такого типа с помощью предложения WITH CHECK OPTION в определение представления.

Пример 4. 56 Добавим это предложение в команду примера 4.55:

CREATE VIEW Рейтинг

AS SELECT cnum, rating FROM Заказчики WHERE rating = 300 WITH CHECK OPTION;

Вышеупомянутая вставка будет отклонена.

Замечание. Требование WITH CHECK OPTION в определении представления имеет смысл только в случае определения модифицируемой представляемой таблицы.

Для удаления представления используется оператор:

DROP VIEW <имя_представления>;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]