Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Разрешение представлений




Удаление представлений (оператор DROP UIEW)

Пример 10.2. Создание вертикального представления.

Создание представлений (оператор CREATE VIEW)

Оператор CREATE VIEW имеет следующий формат:

CREATE VIEW имя_представления
[(имя_столбца1 [,... ])]
AS <оператор_Select>
[WITH CHECK OPTION]

Существует необязательная возможность присвоения собственного имени (параметр имя_столбца) каждому из столбцов представления. Если указывается список имен столбцов, то он должен иметь количество элементов, равное количеству столбцов в результирующей таблице запроса, заданного параметром <оператор_Select>.Если список имен столбцов опущен, каждый столбец представления будет иметь имя соответствующего столбца результирующей таблицы запроса. Список имен столбцов должен обязательно задаваться в том случае, если в именах столбцов результирующей таблицы имеет место неоднозначность. Подобная ситуация возникает в тех случаях, когда подзапрос включает вычисляемые поля, а фраза AS с именами столбцов результирующей таблицы не содержит для них имен или же когда результирующая таблица создается с помощью операции соединения и включает столбцы с одинаковыми именами.

Заданный параметром <оператор_Select>подзапрос принято называть определяющим запросом. Если указана фраза WITH СНЕСК OPTION, то гарантируется, что в тех случаях, когда вводимая строка данных не удовлетворяет условию, указанному в предложении WHERE определяющего запроса представления, она не будет добавлена в его базовую таблицу.

Пример 10.1. Создание горизонтального представления

Создайте представление, позволяющее менеджеру отделения компании с номером; 'B3' иметь доступ к данным только тех сотрудников, которые работают в этом отделении.

CREATE VIEW M3_S AS
SELECT * FROM Staff WHERE KodB = 'B3';

Горизонтальное представление позволяет ограничить доступ пользователей только определенными строками, выбранными из одной или нескольких таблиц.

В результате выполнения этого оператора будет создано представление, включающее все столбцы таблицы Staff, но содержащее только те ее строки, в которых номер отделения компании равен 'В3'. (В этом, представлении столбец KodB не является необходимым и вполне может быть исключен, поскольку он всегда будет содержать одно и то же значение — 'B3'.)

Чтобы гарантировать, что руководитель отделения компании сможет видеть только те строки таблицы Staff, доступ к которым ему разрешен, следует полностью запретить ему прямой доступ к этой таблице, но разрешить доступ к представлению M3_S. В результате менеджер отдела будет иметь собственное представление о таблице Staff, содержащее сведения только о тех сотрудниках, которые работают в подчиненном ему отделении компании.

Создайте представление, содержащее данные о работниках отделения компании с номером 'B3', но не включающее сведений об их зарплате, поскольку сведения о зарплате работников должны быть доступны только менеджерам тех отделений, в которых они работают.

Вертикальные представления позволяет ограничить доступ пользователей только несколькими столбцами, выбранными из одной или более таблиц базы данных.

CREATE VIEW S3
AS SELECT KodS, Lname, Fname, Pol, DR,Dol FROM Staff
WHERE KodB = 'BЗ';

Обратите внимание, что определение этого представления можно переписать, воспользовавшись вместо таблицы Staff представлением MЗ_S:

CREATE VIEW S3
AS SELECT KodS, Lname, Fname, Pol, DR,Dol FROM MЗ_S;

В том и другом случае будет создано представление под именем S3, содержащее все столбцы таблицы Staff, за исключением столбцов ZP и KodB.

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

Пример 10.3. Представление с группированием и соединением

Создайте представление, содержащее данные о работниках, отвечающих за сдаваемые в аренду объекты. Оно должно включать номер отделения компании, табельный номер работника и сведения о количестве объектов, за которые он отвечает.

CREATE VIEW staff prop cnt (branch по, staff по, cnt) AS SELECT s.bno, s.sno, COUNT(*) FROM staff s, property for rent p WHERE s.sno = р.sno GROUP BY s.bno, в.sno;

Этот пример иллюстрирует использование подзапроса, содержащего предложение: GROUP BY (в результате чего создается представление, называемое группированным: представлением) и обращающегося к данным нескольких таблиц (подобные представления называют соединенными представлениями). Одной из важнейших при-:, чин использования представлений является стремление к упрощению многотабличных запросов. После определения представления с соединением нескольких таблиц можно будет использовать простейшие однотабличные запросы к этому представлению вместо сложных запросов с выполнением того же самого многотабличного соединения. Отметим, что в приведенное выше определение представления потребовалось включить список имен столбцов, поскольку в нем использована I; обобщающая функция Count.

Представление удаляется из базы данных с помощью оператора DROP VIEW, имеющего следующий формат:

DROP VIEW <имя> [REEPRICP | CRECRDEI]

Если указано ключевое слово CASCADE, при выполнении оператора DROP VIEW будут удалены все связанные с ним или зависящие от него объекты. Другими словами, будут удалены все объекты, содержащие ссылки на удаляемое представление. Если указывается ключевое слово RESTRICT и существуют любые прочие объекты, зависящие от существования удаляемого представления, выполнение этого оператора блокируется. По умолчанию принимается значение RESTRICT.


 

Познакомившись с тем, как представления создаются и используются, давайте детально проанализируем процедуру выполнения запроса, обращающегося к некоторому представлению. Для иллюстрации процесса разрешения представления рассмотрим приведенный ниже запрос, предназначенный для подсчета сдаваемых в аренду объектов, за которые отвечает каждый из работников отделения компании с номером 'ВЗ'. Этот запрос обращается к представлению Staff Prop Cnt, определение которого приведенного в описании примера 10.3:

SELECT staff во, cnt FROM staff prop cnt

WHERE branch во = 'B3' ORDER BY staff no;

Разрешение представления заключается в слиянии приведенного выше запроса с определяющим запросом представления Staff Prop Cnt и выполняется следующим образом.

1. Имена столбцов, указанные в списке предложения SELECT запроса, транслиру- ются в соответствующие им имена.столбцов определяющего запроса. В результате предложение SELECT приобретает следующий вид:

SELECT s.sno AS staff по, COUNT(*) AS cnt

2. Имена представлений, указанные в предложении FROM запроса, замешаются соответствующими списками из предложений FROM определяющего запроса: FROM staff s, property for rent p

3. Предложение WHERE исходного запроса объединяется с предложением WHERE из определяющего запроса представления с помощью логического оператора AND: WHERE я.sno = р.sno AND bno = 'B3'

4. Предложения GROUP BY и HAVING из определяющего запроса представления про- сто копируются в исходный запрос. В нашем примере в определяющем запро-

Г' се присутствует только предложение GROUP BY:

GROUP BY s.sno, в.bno

5. Наконец, в объединенный запрос копируется предложение ORDER BY из исходного запроса, в котором имена столбцов представления транслируются в имена столбцов определяющего запроса: ORDER BY s.sno

6. В результате всех перечисленных выше операций объединенный запрос при- обретает следующий вид:

SELECT s.sno AS staff во, COUNT(*) AS cnt FROM staff s, property for rent p WHERE s.sno = р.sno AND bno = ВЗ- ~~011Р ву s.sno, s.bno ORDER BY s.sno;

Результаты выполнения объединенного запроса представлены.

Таблица 10.4. Результирующая таблица запроса, полученного в результате разрешения представления




Поделиться с друзьями:


Дата добавления: 2013-12-13; Просмотров: 312; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.