Наряду с перечисленными выше преимуществами, представления обладают и двумя существенными недостатками:
• Производительность. Представление создает лишь видимость существования соответствующей таблицы, и СУБД приходится преобразовывать запрос к представлению в запрос к исходным таблицам. Если представление отображает многотабличный запрос, то простой запрос к представлению становится сложным объединением и на его выполнение может потребоваться много времени.
• Ограничения на обновление. Когда пользователь пытается обновить строки представления, СУБД должна установить их соответствие строкам исходных таблиц, а также обновить последние. Это возможно только для простых представлений; сложные представления обновлять нельзя, они доступны только для выборки.
Указанные недостатки означают, что не стоит без разбора применять представления вместо исходных таблиц. В каждом конкретном случае необходимо учитывать перечисленные преимущества и недостатки представлений.
Как уже указывалось выше для некоторых типов представлений (простых представлений) операции добавления, изменения и удаления можно преобразовать в эквивалентные операции по отношению к исходным таблицам представления. Например, вернемся к представлению Minsk, рассмотренному ранее в примере. Это простое горизонтальное представление, основанное на одной исходной таблице, как показано на рисунке 9.
Рисунок 9 Обновление данных с использованием
представлений
Как видно из рисунка, добавление строки в данное представление имеет смысл; оно означает, что новая строка должна быть вставлена в таблицу STAFF, лежащую в основе представления. Аналогично, имеет смысл удаление строки из представления Minsk – это удаление соответствующей строки из таблицы STAFF. Наконец, обновление строки представления Minsk также имеет смысл: оно будет обновлением соответствующей строки таблицы STAFF. Во всех случаях требуемое действие можно выполнить по отношению к соответствующей строке исходной таблицы, тем самым, сохраняя целостность исходной таблицы и представления.
Обобщая сказанное можно отметить, что если между строками представления и строками исходной таблицы есть соответствие “один – к - одному”, то такое представление можно считать обновляемым. Если между строками представления и исходной таблицы нет однозначного соответствия, то добавление, удаление и изменение строк представления не имеет смысла и поэтому запрещены. Однако некоторые коммерческие СУБД позволяют обновлять “неоднозначные” представления. Так в ORACLE такие обновления возможны посредством триггеров INSTEAD OF . Триггеры рассматриваются в последующих разделах настоящего пособия.