![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Таблицы, ранее рассматриваемые, называются базовыми. Эти таблицы содержат реальные данные. В отличии от них представления – это таблицы, которые содержат данные других таблиц. Эти таблицы могут использоваться в запросах, предложениях языка манипулирования данными так же, как и базовые таблицы. В действительности, представления – это запросы, выполняемые всякий раз, когда представление является объектом команды.
Преимуществом представления является то, что оно обновляется автоматически при изменении формирующих его таблиц. Создание представления не фиксируется и вычисляется повторно всякий раз, когда в команде ссылаются на представление. запрос для представления – это фактически запрос к запросу
Однако даже с обновляемыми представлениями часто бывают проблемы.
Команды обновления применительно к представлениям работают следующим образом: воздействуют на базовую таблицу представления. Существуют критерии для определения обновленовляемого представления представления:
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; Прочитано: 539 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!