|
Программирование >> Реляционные базы данных
Предложение 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 будет
□ к обновляемому представлению можно применять также операцию удаления. Удаление, как и ввод, проходит через базовое отношение /?, из которого удаляется каждый кортеж, порождающий удаляемый из препставления кортеж. Почем> некоторые представления необновляемы Рассмотрим представление 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. Их определения тоже имеют форму деревьев выражений реляционной алгебры.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |