|
Программирование >> Реляционные базы данных
Отношения таблицы и представления Программисты SQL чаще употребляют термин таблица , а не отношен1 . Дело в том, что различие между хранимыми в БД отношениями ( таблицами ) и виртуальными отношениями { представлениями ) имеет важное значение. Зная теперь разницу между таблицей и представ;1ением, мы можем применять термин отношение только тогда, когда речь идет о таблице или о представлении. Чтобы подчеркнуть, что отношение хрангггся в памяти, а не является прсдставлениеу, .мы иногда будем употреблять термин отношение базы или таблица базы Есть и третий вид отношений, которые не относятся к преяставлениям и не хранятся постоянно, а являются вре51енными результатами подзапросов. В дальнейшем они тоже будут называться отношениями 5-8.2 Запросы к представлениям Отношение ParamountMovie не имеет кортежей в обычном смысле, но при н;ьпнчин запроса к этому отношению в ответ на него извлекаются кортежи из таблицы базы Movie. В результате можно дважды адресовать PaamountMovie один и тот же запрос и получить на него разные ответы, даже если ParamountMov е не 5.8.1 Описание представлений Простейшая форма определения представления: 1. Ключевое слово CREATE VIEW. 2. Имя представления, 3. Ключевое слово AS. 4. Запрос Q, являющийся определением представления. При наличии запроса к самому представлению SQL действует так, словно к этому моменту запрос Q уже выполнен и к его результату применен запрос, адресованный представлению. Простая форма описания предсгавления. CREATE VIEW <имя представления> AS <определенис представления>; Пример 5.37. Допустим, нужно создать представление, являющееся частью отношения Movie(titIe, year, length, inColor, studfoName, producerC#) состоящей из названий и голов выпуска фильмов, созданных студиями Paramount. Определение этого представления: 1) CREATE VIEW ParamountMovie AS 2) SELECT title, year 3) FROM Movie 4) WHERE StudioName =Paramount ; Имя представления ParamountWovie указано на строке (1), а его атрибуты title и year перечислены на строке (2). Определением представления являются строки (2) - (4). а изменялось - ведь таблица базы могла измениться за время, прошедшее между этими запросами. Пример 5.38. Представление ParamountMovie можно запрашивать так же, как и хранимую таблицу: SELECT Btle FROM ParamountMovie WHERE year = 1979; Определение представления ParamountMovie используется для преобразования этого запроса в другой запрос, ааресованиый только к таблице базы Movie. В разделе 5.8.5 будет показано, как запросы к представлениям преобразуются в запросы к таблицам базы. В данном простом примере легко установить, что означает запрос к представлению. ParamountMovie отличается от Movie по двум параметрам: 1. ParamountMovie порождает только атрибуты title и year. 2. Условие StudioName = Paramount - это часть любого пункта WHERE, касающегося ParamountMovie. Поскольку запрос относится только к атрибуту title, с пунктом (I) проблем не возникает. Для пункта (2) достаточно ввести условие studioName =Paramount в пункт запроса WHERE. Затем Movie можно использовать вместо ParamountMovie в пункте FROM, сохранив прежний смысл запроса. Итак, запрос SELECT title FROM Movie WHERE StudioName = Paramount AND year = 1979; относится к таблице базы Movie и дает тот же результат, что и исходный запрос к ParamountMovie. Заметим, что такой перевод выполняется системой SQL Мы привели здесь процесс рассуждений только для того, чтобы показать смысл запроса к представлению. □ Пример 5.39. Можно также писать запросы, содержащие представление и таблицы базы. Например: SELECT DISTINCT StarNeme FROM ParamountMovie, Starsin WHERE title = movieTitle AND year = movieYear; Это запрос об именах всех кинозвезд, снимающихся в фильмах, выпущенных студиями Paramount. Применение DISTINCT гарантирует, что и.мя каждой кинозвезды будет упомянуто только один раз, даже если оиа снималась во многих фильмах. □ Пример 5.40. Рассмотрим более сложный запрос, применяемый для определения представления. Наша цель - построить отношение MovieProd, содержащее названия фильмов и имена их продюсеров. Запрос, определяющий представление, включает в себя отношение Movie(title, year, iengtti. inColor. studioName, producerC#) из которого мы получаем номер сертификата продюсера, и отношение MovieExec(nanie, address, cert#, netWorth) в котором сертификат связывается с именем продюсера. Можно создать слелуюнке презстапленн!?; 1) CREATE VIEW MovieProd AS 2) SELECT title, name 3) FROM Movie, MovieExec 4) WHERE producerC* = cers#, К нем\ можно адресовать запрос как к хранимому в БД отно1иеннго. Например, ддя поиска продюсера фильма Gone Wijh (he Ига/ формулируется запрос: SELECT name FROM MovieProd WHERE title = Gone With ttie Wind; Как и использование любого предстаапения. этот запрос считается эквивалентным запросу, адресованному исключительно таблицам базы, например: SELECT name FROM Movie, MovieExec WHERE producerC# = cert# AND title = Gone Witti the Wind; - □ 5.8.3 Переименование атрибутов Иногда удобнее давать имена атрибугам представления по собственному усмотрению, а не нспол1>зопать имена из запроса, определяющего представление. Атрибуты представления можно определить, перечислив их в скобках вслед за именем представления в предложении CREATE VIEW. Например, опредсение представления из примера 5.40 можно записать следуюишм образом: CREATE VIEW MovieProd(movleTille, prodName) AS SELECT title, name FROM Movie, MovieExec WHERE producerC# = cert#, Предстаанение остается прежним, но его столбцы теперь озаглавлены movieTitle и prodName вместо title и name. 5.8.4 И.зменеиие представлений При некоторых обстоятельствах к представлениям можно применять операции вставки, удаления и изменения. Поначалу может показаться, что такая идея вообще бессмысленна, поскольку представление не существует так. как существует таблица базы (хранимое отношение). Что означает вставка нового кортежа в представление? Куда попадает этот кортеж и как система БД может помнить о том, что он должен быть в представлении? Для многих представлений ответ: Этого делать нельзя . Однако изменения достаточно простых представлений называемых обиовляемымы представлениями, 1южц0 перевести в эквивалентные изменения та6л1шы базы и выполнить и\ на той таблице. В SQL2 есть формальные определения случаев, в которых изменения представления, говоря упрощенно, допустимы. Правила SQL2 достаточно сложны, но они позволяк>т модифицировать предстапления, определяемые птем выбора (с помощью SELECT, но не SELECT DISTINCT) некоторых а рнбутов из одного отношения R (которое само может быть обновляемым представлением). При этом должны выпйпняться два важных технических условия: Предложение подзапроса WHERE не должно содержать Л.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |