Название: Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML (Токмаков Г. П.)

Жанр: Информационные системы и технологии

Просмотров: 1406


3.4. создание представлений (view)

 

Представление (view) является логической (виртуальной) таблицей, записи в которую отобраны с помощью оператора SELECT. Представлением называется запрос на выборку, которому присвоили имя, а затем сохранили в базе данных. Представление позволяет пользователю увидеть результаты сохраненного за- проса, а SQL обеспечивает доступ к этим результатам таким образом, как если бы они были простой таблицей.

Представления используются по нескольким причинам:

– они позволяют сделать так, что разные пользователи базы данных будут ви-

деть ее по-разному;

– с их помощью можно ограничить доступ к данным, разрешая пользовате-

лям видеть только некоторые из строк и столбцов таблицы;

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

Представление является «виртуальной таблицей», содержимое которой яв-

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

Преимущество представления заключается в том, что можно один раз ото-

брать записи и использовать их в дальнейшем без повторного выполнения опе- ратора SELECT. Это выгодно при частом использовании одинаковых запросов, особенно тех, в которых реализованы сложные условия отбора.

Представления могут использоваться для описания внешних моделей в ре- ляционной модели. В действительности представление содержит не данные, а лишь SQL-запрос типа SELECT, указывающий, какие именно колонки и из каких

таблиц нужно взять при обращении к этому представлению. Задание представ- лений входит в описание схемы базы данных в реляционных СУБД. Представ- ления позволяют скрыть ненужные детали для разных пользователей, модифи-

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

В отличие от реальной таблицы, представление в том виде, как оно сконст-

руировано, не существует в базе данных, это действительно только виртуальное отношение, хотя все данные, которые представлены в нем, действительно суще- ствуют в базе данных, но в разных отношениях. Они скомпонованы для пользо- вателя в удобном виде из реальных таблиц с помощью некоторого запроса.

Однако пользователь может этого не знать, он может обращаться с этим представлением как со стандартной таблицей. Представление при создании по-

лучает некоторое уникальное имя, его описание храниться в описании схемы базы данных, и СУБД в любой момент времени при обращении к этому пред- ставлению выполняет запрос, соответствующий его описанию, поэтому пользо-

ватель, работая с представлением, в каждый момент времени видит действи- тельно реальные, актуальные на настоящий момент данные. Оно формирует их как бы на лету, в момент обращения.

При необходимости в  представлении может задаваться новое имя для каж-

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

Для создания представления мы можем использовать SQL-предложение CREATE VIEW, для его модификации – предложение ALTER VIEW, а для удаления – предложение DROP VIEW. Предложение CREATE VIEW используется для создания

представлений, позволяющих извлекать данные, удовлетворяющие некоторым

требованиям. Представление создается в текущей базе данных и хранится как отдельный объект. Наилучший способ создания представления – создать запрос SELECT и, проверив его, добавить недостающую часть CREATE VIEW.

Если список имен столбцов в представлении не задан, то каждый столбец представления получает имя соответствующего столбца запроса. Рассмотрим

типичные виды представления и их назначение.

 

3.4.1. О БЩИЙ  ФОРМАТ  ОПЕРАТОРА  CREATE  VIEW

 

Создание просмотра базы данных осуществляется оператором

 

CREATE VIEW Имя_Представления

AS <Оператор SELECT>;

 

– Имя_Представления − имя просмотра после его создания можно использо-

вать как имя физической таблицы.

– Список столбцов − определяет состав столбцов просмотра. Если список не задан, то в просмотр отбираются все столбцы таблиц, указанных в операторе SE‐

LECT.

– WITH CHECK OPTION – для редактируемого просмотра запрещает добавление записей, не удовлетворяющих условиям отбора, заданным в операторе SELECT.

На Рис. 3.2.    изображено представление, определенное в соответствии с за-

просом

 

CREATE VIEW SLUZHASCHIE_OFFISY AS

SELECT С.FAMILY, С.NAME, О.CITY, О.REGION, С.QUOTA, С.SALES FROM SLUZHASCHIE С, OFFISY О

WHERE С.ID_OFC = O.ID_OFC

 

3.4.2.  Г ОРИЗОН ТАЛЬН О Е  ПРЕДСТАВЛЕНИЕ

 

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

 

CREATE VIEW SAL_DEPT AS SELECT *

FROM EMPLOYEE

WHERE DEPARTMENT = «отдел продаж»

 

3.4.3.  В ЕРТИКАЛЬНОЕ  П РЕДСТАВ ЛЕНИЕ

 

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

бавке должна быть закрыта. Для него можно создать следующее вертикальное представление:

 

CREATE VIEW TABLE AS

SELECT T_NUM, NAME, POSITION, DEPRT FROM        EMPLOYEE

 

Таблица SLUZHASCHIE

 

 

 

Представление

ID_SLZH         FAMILY         NAME AGE    …        QUOTA          SALES

 

105      Болгов            Виктор            37        …        $350 000.00    $367 911.00

 

109      Майоров         Олег    31        …        $300 000.00    $392 725.00

 

102      Сергеев           Игорь  48        …        $350 000.00    $474 050.00

 

106      Санкин           Петр    52        …        $275 000.00    $299 912.00

 

104      Бобров            Иван   33        …        $200 000.00    $142 594.00

 

101      Данилов         Сергей            45        …        $300 000.00    $305 673.00

SLUZHASCHIE_OFFISY

 

FAMILY         NAME CITY   REGION         QUOTA          SALES

 

Болгов            Виктор            Инза    Ульяновская   $350 000.00    $367 911.00

 

Майоров         Олег    Буинск            Татарстан       $300 000.00    $392 725.00

 

Сергеев           Игорь  Тверь  Московская    $350 000.00    $474 050.00

 

Санкин           Петр    Буинск            Татарстан       $275 000.00    $299 912.00

 

Бобров            Иван   Тверь  Московская    $200 000.00    $142 594.00

 

Данилов         Сергей            Инза    Ульяновская   $300 000.00    $305 673.00

 

Таблица OFFISY

 

ID_OFFICE    CITY   REGION         MGR

 

22        Инза    Ульяновская   104

 

11        Буинск            Татарстан       106

 

12        Тверь  Московская    108

 

Рис. 3.2.          Типичное представление с двумя исходными таблицами

 

В большинстве случаев представления используются для обеспечения безопасности данных. Например, некоторые категории пользователей могут иметь доступ к представлению, но не к таблицам, данные которых его форми- руют; кроме того, SQL-запрос может содержать параметр USER (имя, под кото- рым зарегистрировался пользователь), и в этом случае данные, доступные при обращении к представлению будут зависеть от имени пользователя.

 

3.4.4.  У ДАЛЕНИЕ  ПРЕД СТАВЛЕ НИЯ

Удалить просмотр можно следующим оператором:

 

DROP VIEW <ИмяПросмотра>;

Например,

DROP VIEW vStore;

 

3.4.5.  Н ЕДОСТ А ТКИ  ПР ЕДСТАВЛ Е НИЙ

 

Наряду с перечисленными выше преимуществами, представления облада-

ют и двумя существенными недостатками.

– Производительность. Представление создает лишь видимость существо-

вания соответствующей таблицы, и СУБД приходится преобразовывать запрос к представлению в запрос к исходным таблицам. Если представление отображает

многотабличный запрос, то простой запрос к представлению становится сложным объединением и на его выполнение может потребоваться много времени;

– Ограничения на обновление. Когда пользователь пытается обновить строки представления, СУБД должна установить их соответствие строкам исходных таб- лиц, а также обновить последние. Это возможно только для простых представле- ний (созданных на основе одной таблицы); сложные представления обновлять

нельзя, они доступны только для выборки.

Указанные недостатки означают, что не стоит без разбора применять пред-

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