Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции СУБД.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6.32 Mб
Скачать

14.5.Обновление представлений

Как уже указывалось выше для некоторых типов представлений (простых представлений) операции добавления, изменения и удаления можно преобразовать в эквивалентные операции по отношению к исходным таблицам представления. Например, вернемся к представлению Minsk, рассмотренному ранее в примере. Это простое горизонтальное представление, основанное на одной исходной таблице, как показано на рисунке 9.

Рисунок 9 Обновление данных с использованием

представлений

Как видно из рисунка, добавление строки в данное представление имеет смысл; оно означает, что новая строка должна быть вставлена в таблицу STAFF, лежащую в основе представления. Аналогично, имеет смысл удаление строки из представления Minsk – это удаление соответствующей строки из таблицы STAFF. Наконец, обновление строки представления Minsk также имеет смысл: оно будет обновлением соответствующей строки таблицы STAFF. Во всех случаях требуемое действие можно выполнить по отношению к соответствующей строке исходной таблицы, тем самым, сохраняя целостность исходной таблицы и представления.

Обобщая сказанное можно отметить, что если между строками представления и строками исходной таблицы есть соответствие “один – к - одному”, то такое представление можно считать обновляемым. Если между строками представления и исходной таблицы нет однозначного соответствия, то добавление, удаление и изменение строк представления не имеет смысла и поэтому запрещены. Однако некоторые коммерческие СУБД позволяют обновлять “неоднозначные” представления. Так в ORACLE такие обновления возможны посредством триггеров INSTEAD OF . Триггеры рассматриваются в последующих разделах настоящего пособия.

14.6.Контроль над обновлением представлений (предложение with check option)

Если представление создается посредством запроса с предложением WHERE, то в представлении будут видны только строки, удовлетворяющие условию отбора. Остальные строки в исходной таблице присутствуют, но в представлении их нет. Например, представление Minsk, которое уже рассматривалось ранее в настоящем разделе, содержит только строки таблицы STAFF с определенными значениями в столбце Bno .

Это представление является обновляемым как по стандарту ANSI/ISO, так и в большинстве коммерческих СУБД. В него можно добавить информацию о новом служащем посредством инструкции INSERT:

insert into Minsk (Sno, fname, lname, address, position, sex, DOB, salary, bno)

values ( ‘s129’, ‘…’, ‘…’, ‘…’, ‘менеджер’, ‘f’, ’01-Jan-81’, 300, 1).

СУБД добавит новую строку в исходную таблицу STAFF; она будет видна также в представлении Minsk. Однако если воспользоваться следующей инструкцией для добавления строки в представление Minsk:

insert into Minsk (Sno, fname, lname, address, position, sex, DOB, salary, bno)

values ( ‘s129’, ‘…’, ‘…’, ‘…’, ‘менеджер’, ‘f’, ’01-Jan-81’, 300, 2),

и сразу после неё выполнить запрос: select * from Minsk, то только что добавленная строка в ней будет отсутствовать. Тот факт, что в результате выполнения инструкции INSERT или UPDATE из представления исчезают строки, в лучшем случае вызывает замешательство. SQL позволяет организовать своеобразный контроль целостности представлений путем создания их с режимом контроля. Данный режим задается в инструкции CREATE VIEW посредством предложения WITH CHECK OPTION:

create view Minsk as

select * from staff

where bno in (select bno

from branch

where city = ‘Минск’)

with check option;

Когда для представления установлен режим контроля, СУБД автоматически проверяет каждую операцию INSERT или UPDATE, выполняемую над представлением, чтобы удостовериться в том, что полученные в результате строки удовлетворяют условиям отбора в определении представления. Если добавляемая или обновляемая строка не удовлетворяет этим условиям, то выполнение инструкции INSERT или UPDATE завершается ошибкой; другими словами, операция не выполняется.

В заключение текущего раздела следует отметить, что удаляются представления посредством инструкции DROP VIEW . Так представление Minsk может быть удалено при выполнении инструкции:

drop view Minsk;.