Работаем на SQL
1.Создайте таблицу с именем Cityorders. В ней должны быть поля onum, amt, snum, как и в таблице Orders, и поля cnum и city, как в таблице Customers, при этом каж дый заказ покупателя должен храниться вместе с названием его города. Поле
onum должно быть первичным ключом таблицы Cityorders. Все поля таблицы Cityorders должны быть ограничены соответствующими строками из таблиц Customers и Orders. Предполагается, что родительские ключи этих таблиц уже
имеют соответствующие ограничения.
2.Расширим проблему. Переопределим таблицу Orders таким образом: добавим новый столбец с именем prev, который идентифицирует onum предыдущего за каза для текущего пользователя. Реализуйте это как внешний ключ, ссылающий ся на ту таблицу, в которой он определен (таблицу Orders). Внешний ключ должен ссылаться на поле cnum покупателя, обеспечивая связь между текущим
заказом и тем, на который он ссылается.
(Ответы см. в 11риложении А.)
210
20
1]
Глава 20. Введение в представления
Представление (view) - объект, который не содержит собственных данных. Это
своего рода таблица, содержимое которой берется из других таблиц посредством вы полнения запроса. Поскольку значения в таблицах меняются, это автоматически при
водит к соответствующим изменениям в представлениях.
Из этой главы вы узнаете, что такое "представления", как они создаются, и кое-что об их ограничениях и защите. Использование представлений базируется на возможно стях расширенных запросов, таких как соединения и подзапросы. Они будут рассмот рены более подробно, поскольку есть ряд существенных деталей, касающихся связи запросов и представлений.
Что такое представления?
Таблицы, о которых шла речь до сих пор, будут теперь называться базовы.111и табли ца.11ш (base taЬ/es). Это таблицы, которые содержат реальные данные. Существует и дру гой вид таблиц, получивший название "представления" (views). Представления - это таблицы, содержимое которых берется или выводится из других таблиц. Они использу ются в запросах и в предложениях DML так же, как и обычные таблицы, но они не со держат своих собственных данных. Представления подобны окнам, через которые просматривается информация, реально хранимая (содержащаяся) в базовых таблицах. В действительности же это запросы, выполняемые всякий раз, когда представление явля ется объектом команды. В этот момент выходные данные запроса и становятся содер
жимым представления.
Команда CREATE VIEW
Представление определяется с помощью команды CREATE VIEW, состоящей из ключевых слов CREATE VIEW (создать представление), имени создаваемого пред ставления и ключевого слова AS, после которого следует запрос.
Например:
CREATE VIEW Londonstaff
AS SELECT *
FROM Salespeople
WHERE city = 'London·;
В результате выполнения этой команды можно стать владельцем представления,
называемого Londonstaff. Как и любую другую таблицу представление можно исполь
зовать: формулировать к нему запросы, выполнять обновление, вставку, удаление и соединение с другими таблицами и представлениями. Давайте сформулируем запрос для просмотра представления (см. рис. 20.1):
212
Команда CREATE VJEW
Рис. 20.1. Представление Londonstaff
SELECT •
FROM Londonstaff;
При команде выбрать все строки из представления выполняется запрос, содержа щийся в определении Londonstaff, и возвращаются все его выходные данные. Если в
запросе для представления указан предикат, то представление содержит только стро
ки, вошедшие в состав выходных данных {удовлетворяющие заданному предикату). Преимущество использования представления вместо базовой таблицы состоит в
том, что оно обновляется автоматически при изменении формирующих его таблиц. Содержимое представления не фиксируется, а повторно вычисляется всякий раз, когда
вы ссылаетесь на представление в команде. Если завтрадобавится еще один продавец,
находящийся в Лондоне (city = 'London'), то он автоматически попадет в nредставле-
ние.
Представления значительно расширяют возможности управления данными. Они
предоставляют пользователям доступ не ко всей информации, хранящейся в таблице, а только к ее части. Если нужно, чтобы каждый продавец мог просмотреть таблицу Sa\espeople, но не мог видеть значения комиссионных, можно создать представление с помощью следующего предложения (результат представлен на рис. 20.2):
CREATE VIEW Salesown
AS SELECT snum,sname,city
FROM Salespeople;
213
Глава 20. Введение в 11редставления
Рис. 20.2. Представление Salesown
Другими словами, это представление есть то же самое, что и таблица Salespeople, за исключением столбца comm, имя которого не указано в запросе и, следовательно,
не включено в представление.
Обновление представлений
Это представление можно модифицировать командами обновления DML, но моди фикации воздействуют не на само представление, а только на лежащую в его основе таблицу:
UPDATE Salespeople
SET city = 'Palo Alto'
WHERE snum = 1004;
Действие команды аналогично выполнению этой же команды для таблицы Salespeople. Однако, если продавец попытается изменить величину своих комиссион
ных с помощью команды UPDATE:
UPDATE Salesown
SET comm = .20
WHERE snum = 1004;
214