Программирование >>  Реляционные базы данных 

1 ... 78 79 80 [ 81 ] 82 83 84 ... 125


Предложение SELECT должно содержать достаточное число атрибутов для каждого вставляемого в представление кортежа так, чтобы недостакэшие атрибуты можно было заполнить значениями NULL или собственными значениями по умолчанию и получить кортеж отношении базы, который дает вста1У1яемыП я представление кортеж.

Пример 5.41. Допустим, hjokho вставить кортеж в представление ParamountMovie из примера 5.37:

INSERT INTO ParamountMovie VALUESCStarTrek. 1979);

Представление ParamountMovie почти удовлетворяет условиям обновляемости представлений в SQL2, поскольку представление запрашивает только некоторые компоненты отдельных кортежей таблицы базы

Movie(title, year. Iengtti inColor, studioName, producerCS)

Единственная проблема в том, что атрибут studioName из Movie не является атрибутом представления и поэтому кортеж, вводимый в Movie, имеет для атрибута studoName значение NULL вместо Paramount .

Значит, чтобы сделать представление ParamountMovie обновляемым, нужно ввести атрибут StudioName в предложение SELECT, даже если очевидно, что названием студии будет Paramount, Измененное определение представления ParamountMovie выглядит следующим образом:

1) CREATE VIEW ParamountMovie AS

2) SELECT StudioName, title, year

3) FROM Movie

4) WHERE StudioName =Paramount ;

Теперь можно записать вставку в обновляемое представление ParamountMovie:

INSERT INTO ParamountMovie VALUES( Paramount ,StarTrek, 1979);

В результате образуется кортеж из Movie, который дает вставляемый в представление кортеж, когда определение представления применяется к отношению Movie. Здесь компонентом studioName является Paramount , компонентом title - Star Trek , а компонентом year - 1979.

Остальные не входащие в представление атрибугы - length, InCotor и producerC* - должны присутствовать во вставляемом кортеже Movie. Однако их значения вывес ти невозможно. Поэтому новый кортеж Movie должен иметь в компонентах для каждого из этих атрибутов подходящее значение по умолчанию: NULL или другое подобное значение, установленное для атрибута или его области. Например, если для атрибута length установлено значение по умолчанию О, а для двух других - NULL, вставляемым кортежем Movie будет

title

year

! Iengtti

inCofor

StudioName

ргобисегСй

Star Trek

1979

NULL

Paramount

NULL

к обновляемому представлению можно применять также операцию удаления. Удаление, как и ввод, проходит через базовое отношение /?, из которого удаляется каждый кортеж, порождающий удаляемый из препставления кортеж.



Почем> некоторые представления необновляемы

Рассмотрим представление MovieProd из примера 5.40, связывающее с названиями фильмов и имена продюсеров. Согласно определению SQL2 оно не является обновляемым, так как в предложение FROM входят два отношения - Movie и MovieExec. Допустим, мы пытаемся вставить кортеж

( Greatest Sliow on Earth . Cecil В. DeMllle)

Его нужно всггавить в оба отношения - Movie и MovieExec. Для атрибутов типа length или address можно использовать значение по умолчанию NULL, ио что делать с двумя равными атрибутами - prodtJcerC# и cert#? Для них тоже можно было бы использовать NULL, но при объединении отношений SQL не считает два значения NULL равными (см. раздел 5.9.1). Поэтому Greatest Show on Earth не связывается с Cecil В. DeMille в отношении MovieProd н ввод оказывается некорректным.

Пример 5.42. Допустим, из обновляемого представления ParamountMovie нужно удалить все фильмы, в названиях которых есть слово Trek. Используем следующее предложение удаления:

DELETE FROM ParamountMovie WHERE title LIKE %Trek%;

Это удаление переводится в эквивалентное удаление на таблице базы Movie с той лишь разницей, что условие, определяющее представление ParamountMovie, добавляется к условию пункта WHERE. В результате получается предложение удаления:

DELETE FROM Movie

WHERE title LIKE %Trek% AND studioName = Paramount ; □

Обновление представления тоже проходит через базовое отношение. При этом обновляются все кортежи отиошения, порождающие обновляемые кортежи представления.

Пример 5.43. Обновление представления:

UPDATE ParamountMovie SET year - 1979

WHERE title = Star Trek the Movie;

это преобразование nanpibviep в такой avm

UPDATE Movie SET year = 1979

WHERE title Star Trek the Movie AND

StudioName = Paramount; □





Рие. 5.14. Подсгоноеио определений представлений амеао ссылок но предстоаленип

При создании запроса к таблицам базы вместо каждого листа в дереве Q, являющегося представлением, подставляется корень экземпляра дерева, определяющего это представление. На рис. 5.14 показано, что листья К и Ж заменены определениями представлений. Результирующее дерево - это запрос к таблицам базы, эквива-легггный исходному запросу к представлениям.

Пример 5.44. Рассмотрим определение представления и запрос из примера 5.38. Определение представления выглядит следующим образом:

1) CREATE VIEW ParamountMovie AS

2) SELECT title, year

3) FROM Movie

4) WHERE StudioName =Paramount;

Последний вид изменения представления - это удаление его иеликом. Это изменение можно выполнять независимо от того, обноапяемо удаляемое предсгавле-ние или нет. Типичное предложение удаления DROP:

DROP VIEW ParamountMovie:

Оно удаляет определение представления, и после этого уже нельзя формулировать запросы или команды изменений, содержашие это представление. Однако такое удаление не влияет иа кортежи базового отношения Movie. Напротив, предложение

DROP TABLE Movie

удаляет таблицу Movie и делает представление ParamountMovie недоступным, так как адресованный этому представлению запрос относится уже к несушествуюшему отношению Movie.

5.8-5 Интерпретация запросов,

содержащих представления

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

Основная идея интерпретации проиллюстрирована на рис. 5.14. Запрос Q представлен здесь в виде дерева выражения реляционной алгебры. В качестве листьев этого дерева используются отношения, являющиеся представлениями: У и IV. Их определения тоже имеют форму деревьев выражений реляционной алгебры.



1 ... 78 79 80 [ 81 ] 82 83 84 ... 125

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика