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

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


Отношения таблицы и представления

Программисты 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 не должно содержать Л.



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

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