Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Представления. Изменение значений с помощью представлений



Таблицы, ранее рассматриваемые, называются базовыми. Эти таблицы содержат реальные данные. В отличии от них представления – это таблицы, которые содержат данные других таблиц. Эти таблицы могут использоваться в запросах, предложениях языка манипулирования данными так же, как и базовые таблицы. В действительности, представления – это запросы, выполняемые всякий раз, когда представление является объектом команды.

Преимуществом представления является то, что оно обновляется автоматически при изменении формирующих его таблиц. Создание представления не фиксируется и вычисляется повторно всякий раз, когда в команде ссылаются на представление. запрос для представления – это фактически запрос к запросу

Однако даже с обновляемыми представлениями часто бывают проблемы.

Команды обновления применительно к представлениям работают следующим образом: воздействуют на базовую таблицу представления. Существуют критерии для определения обновленовляемого представления представления:

10)Оно базируется только на одной таблице.

11)Должно включать первичный ключ таблицы.

12)Не должно содержать ключей, полученных агрегированием.

13)Не должно содержать DISTINCT в своем определении.

14)Не должно содержать GROUP BY и HAVING в своем определении.

15)Не должно содержать подзапросов.

16)Может быть ограничено на обновляемом представлении.

17)Не может содержать констант, строк или выражений в списке выбираемых выходных полей.

18)Для команды INSERT должно включать любые поля, которые имеют ограничения NOT NULL.

Представления, которые не отвечают выше указанным критериям, являются представлениями только для чтения. Однако, даже с обновляемыми представлениями часто бывают проблемы. Например:

CREATE VIEW Highrating

AS SELECT cnum, rating FROM Customers

WHERE rating = 300;

Выполняется следующая команда:

INSERT INTO Highrating

VALUES (2000, 200);

Обновление выполнено не будет. Эта проблема в SQL решается следующим образом: в определение представления добавляется команда:

WITH CHECK OPTION

Эта команда вводится в определения представления и она не имеет отношения к базовой таблице. Будут контролироваться все команды. При выполнении команды будут выдаваться сообщения. Аналогичная проблема возникает, если необходимо в представление включить строки, которые базируются на полях, которые не представлены в представлении:

CREATE VIEW Londonstaff

AS SELECT cnum, cname, comm

FROM Salespeople

WHERE city =’London’;

Если в такое представление попытаться вставить строчку, то она не будет видна в представлении, а будет вставлена в базовую таблицу. Чтобы решить эту проблему, необходимо всегда в представлении задавать все поля, которые есть в базовой таблице.

Получится представление, в котором будут одинаковые значения для поля city. Чтобы исключить это из выходных данных нужно:

SELECT snum, sname

FROM Londonstaff;

Опция WITH CHECK OPTION действует только на представление, в котором она указана, но не действует на представление, которое базируется на этом представлении. Например имеется:

CREATE VIEW Highrating

AS SELECT cnum, rating FROM Customers

WHERE rating = 300

WHITH CHECK OPTION;





Дата публикования: 2014-11-29; Прочитано: 521 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...