Что такое представления VIEWS в базах данных? И зачем они нужны? Представления и табличные объекты.

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

Удаление

Переименование

Изменение

Управление хранимыми процедурами

Для изменения существующей процедуры используется оператор ALTER PROC, параметры этой команды аналогичны параметрам команды создания процедуры.

Для этого необходимо использовать специальную системную хранимую процедуру:

sp_rename ‘ИмяОбъекта’ ‘НовоеИмяОбъекта’.

Для удаления хранимой процедуры используется команда Transact‑SQL:

DROP PROC ИмяПроцедуры.

Представление (View) является еще одним объектом, составляющим логическую структуру любой базы данных. Представление для конечных пользователей выглядит как таблица, однако при этом не содержит данных, а лишь представляет их. Физически же представляемые данные расположены в различных таблицах базы данных.

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

Представления обладают следующими преимуществами:

· обеспечивают конфиденциальность информации, т.к. позволяют отобразить только необходимую информацию, скрывая определенные поля;

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

· управляют правами доступа к данным, например, вместо того чтобы предоставлять права на выполнение запросов к определенным полям таблиц, проще разрешить выполнение запросов через представление.

MS SQL Server предоставляет различные способы создания представлений: с помощью средств Transact-SQL и в утилите администрирования Management Studio .

Для создания представления используется команда CREATE VIEW, правом ее выполнения обладают члены ролей sysadmin, db_owner, db_dlladmin :

CREATE VIEW ИмяПредставления [(поле [,...n])]

ЗапросВыборки

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

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

Например, создадим представление, содержащее лишь такую информацию о сотрудниках компании AdventureWorks , как: должность и логин сотрудника, дата рождения.

CREATE VIEW InfoEmployees ([Номер], [Фамилия], [Дата рождения]) AS

SELECT BusinessEntityID, JobTitle + "(" + LoginID + ")",

CONVERT (char(10), BirthDate, 104)

FROM HumanResources.Employee

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

SELECT * FROM InfoEmployees

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

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

CREATE VIEW OnlineVendors

FROM Purchasing.Vendor

WHERE PurchasingWebServiceURL IS NOT NULL

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

Например, создадим представление, отображающее суммарную стоимость каждого заказа с указанием заказчика и его номера:

CREATE VIEW InfoOrders

SELECT FirstName + " " + LastName as [Название компании],

SalesOrderHeader.SalesOrderID as [Номер заказа],

Convert (money, sum(UnitPrice*OrderQty*(1-UnitPriceDiscount)),0) as [Итог]

FROM (Person.Contact INNER JOIN Sales.SalesOrderHeader

ON Contact.ContactID=SalesOrderHeader.ContactID)

INNER JOIN Sales.SalesOrderDetail

ON SalesOrderHeader.SalesOrderID=SalesOrderDetail.SalesOrderID

GROUP BY SalesOrderHeader.SalesOrderID, FirstName + " " + LastName

Следует помнить, что использование представлений не способствует производительности. Обращение к представлению вызывает выполнение его внутреннего кода, таким образом, в лучшем случае представления НЕ снизят производительность БД.

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

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

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

Механизм представлений может использоваться по нескольким причинам.

  • Он предоставляет мощный и гибкий механизм защиты, позволяющий скрыть некоторые части базы данных от определенных пользователей. Пользователь не будет иметь сведений о существовании каких-либо атрибутов или кортежей, отсутствующих в доступных ему представлениях. (Горизонтальное и вертикальное разбиение таблиц).
  • Он позволяет организовать доступ пользователей к данным наиболее удобным для них образом, поэтому одни и те же данные в одно и то же время могут рассматриваться разными пользователями совершенно различными способами. (В частности переименование атрибутов).
  • Он позволяет упрощать сложные операции с базовыми отношениями. Например, если представление будет определено на основе соединения двух отношений, то пользователь сможет выполнять над ним простые унарные операции выборки и проекции, которые будут автоматически преобразованы средствами СУБД в эквивалентные операции с выполнением соединения базовых отношений. Одной из важнейших причин использования представлений является стремление к упрощению многотабличных запросов. После определения представления с соединением нескольких таблиц можно будет использовать простейшие однотабличные запросы к этому представлению вместо сложных запросов с выполнением того же самого многотабличного соединения.

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

Создание представлений в Management Studio

В утилите SQL Server Management Studio представления можно создавать, редактировать, выполнять и вставлять в другие запросы. Поскольку представление является ничем иным, как сохраненной инструкцией SELECT, его создание начинается с проектирования этой инструкции. Инструкция SELECT, если она является корректной, может быть вырезана и вставлена в представление практически из любого инструмента. В утилите Management Studio представления перечислены в собственном узле в каждой базе данных.

Команда «Создать представление» в контекстном меню позволит запустить конструктор запросов в режиме создания представлений.

Конструктор запросов утилиты Management Studio способен одновременно отображать множество панелей, выбранных на панели инструментов .

Фактический код SQL отображается и редактируется в панели SQL кода. Столбцы в представление можно добавлять в панелях диаграммы, сетки и SQL кода. Функция добавления таблиц доступна в контекстном меню, а также на панели инструментов. Здесь можно добавлять таблицы, другие представления, синонимы и табличные функции.

Таблицы и другие представления могут быть добавлены посредством перетаскивания их на панель диаграммы из окна «Обозреватель объектов» или с помощью команды «Добавить таблицу» на панели инструментов или в контекстном меню.

Функция добавления производных таблиц способна добавить в предложение FROM представления в качестве источника данных подзапрос. Код SQL этого подзапроса можно ввести вручную на панели SQL. Кнопка «Проверить синтаксис SQL» позволяет проверить синтаксис введенных инструкций SQL. В то же время она не проверяет имена таблиц, столбцов и представлений в инструкции SELECT.

После создания представления его можно редактировать в Management Studio, выделяя название и выбирая в контекстном меню команду «Проект».

Для тестирования инструкции SELECT представления в конструкторе запросов щелкните на кнопке «Выполнить код SQL» или нажмите клавишу.

Контекстное меню представления также содержит команды управления его полнотекстовой индексацией и его переименования. Свойства приложения содержат расширенные параметры и разрешения системы безопасности. Для удаления представления из базы данных достаточно выделить его, выбрать в контекстном меню команду «Удалить» или нажать одноименную клавишу.

Создание представлений с помощью кода SQL

Представлениями можно управлять в редакторе запросов, выполняя сценарии SQL, которые используют команды языка DDL: CREATE, ALTER и DROP. Основной синтаксис создания представления следующий:

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

инструкция_SELECT

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

CREATE VIEW .

SELECT dbo.Customer.IdCust, dbo.Customer.FName, dbo.Customer.LName, dbo.City.CityName

FROM dbo.Customer INNER JOIN

dbo.City ON dbo.Customer.IdCity = dbo.City.IdCity

Попытка создать представление, которое уже существует, вызовет ошибку. Когда представление создано, инструкцию SELECT можно с легкостью отредактировать с помощью команды ALTER:

ALTER имя_представления

измененная_инструкция_SELECT

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

Чтобы удалить представление из базы данных, используйте команду DROP:

DROP VIEW имя_представления

Предложение ORDER BY и представления

Представления служат источником данных для других запросов и не поддерживают сортировку внутри себя. Например, следующий код извлекает данные из представления v_Customer и упорядочивает их по полям LName и FName. Предложение ORDER BY не является частью представления v_Customer, а применяется к нему с помощью вызова инструкции SQL:

SELECT IdCust, FName, LName, CityName

FROM dbo.v_Customer

ORDER BY LName, FName

Выполнение представлений

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

Именно поэтому контекстное меню «Открыть представление» утилиты Management Studio автоматически генерирует простой запрос, извлекая из представления все столбцы. Представление отображает только результаты. Однако включение других панелей конструктора запросов позволяет увидеть и сам запрос, извлеченный из представления.

Панель SQL отобразит представление в предложении FROM инструкции SELECT. Именно в такой форме на представление ссылаются пользователи:

SELECT *

FROM v_Customer

Задание для самостоятельной работы: Создайте представление возвращающее список заказов с указанием имени клиента и количества товаров в каждом заказе. Таким образом, результат должен включать следующие атрибуты: IdOrd, OrdDate, IdCust, FName, LName, Количество видов товаров в заказе.

1) Понятие представления
Представления (View) – это объекты БД, которые не содержат собственных таблиц, но их содержимое берется из других таблиц или представлений посредством выполнения запроса.

2) Создание представлений
CREATE VIEW
[()]
AS
CHECK OPTION]

Примечания:
В SQL Server текст представления можно зашифровать с помощью опции WITH ENCRYPTION, указав её после имени представления.

3) Удаление представлений
DROP VIEW CASDADE|RESTRICT

Примечание:
RESTRICT – не должно существовать никаких ссылок на удаляемое представление в представлении и ограничениях, иначе в удалении будет отказано.
CASADE – означает удаление всех объектов, ссылающихся на данное представление.

4) Ключевые слова
a) RECURSIVE
Создается представление, которое получает значения из себя самого.
b) WITH CHECK OPTION
Запрещает обновление таблиц, на основе представлений, если изменяемые или добавляемые данные не отражаются в представлении.
Запрет действует только на значения, не подпадающие под условия, указанные в разделе WHERE .
c) LOCAL
Контролирует, чтобы изменения в базовых таблицах отражались только в текущем представлении.
d) CASCADED
Контролирует отражение изменений во всех представлениях, определенных на данном представлении.

5) Ограничения и особенности
1. Имена столбцов обычно указываются тогда, когда некоторые столбцы являются вычисляемыми и, следовательно, не поименованы, а также тогда, когда два или более столбца имеют одинаковые имена в соответствующих таблицах в запросе. В InterBase всегда.
2. В ряде СУБД нельзя использовать раздел ORDER BY, обеспечивающий сортировку.
3. Представления можно соединять как с базовыми таблицами, так и с другими представлениями с помощью запросов к обоим объектам.

6) Критерии обновляемости представлений
1. Оно должно базироваться только на одной таблице. Желательно, чтобы оно включало первичный ключ таблицы.
2. Оно не должно содержать столбцов, полученных в результате применения функций агрегирования.
3. Оно не может содержать спецификацию DISTINCT в своем определении.
4. Оно не может использовать GROUP BY или HAVING в своем определении.
5. Оно не должно содержать подзапросов.
6. Если оно определено на другом представлении, то и оно должно быть обновляемым.
7. Оно не может включать константы, строки или выражения в списке выходных полей. Перестановка и переименование полей не допустима.
8. Для оператора INSERT оно должно включать любые поля из лежащей в основе представлений базовой таблицы, которые имеют ограничения NOT NULL, однако в качестве значения по умолчанию может быть указано другое значение.

7) Примеры

1. CREATE VIEW LondonStaff
AS SELECT * FROM SalesPeople WHERE City=’London’

2. CREATE VIEW SalesOwn
AS SELECT SNum, SName, City FROM SalesPeople

3. CREATE VIEW NameOrders
AS SELECT ONum, Amt, A.SNum, SName, CName
FROM Orders A, Customer B, SalesPeople C
WHERE A.CNum=B.CNum AND A.SNUM=C.SNum

Примеры на запрет обновления:

1. CREATE VIEW HighRating AS SELECT CNum, Rating

2. Добавляем строку, которую представление не видит:
INSERT INTO HighRating VALUES(2018, 200)
3. Запрещаем добавлять строки вне видимости:
CREATE VIEW HighRating AS SELECT CNum, Rating
FROM Customer WHERE Rating=300
WITH CHECK OPTION
4. Создаем новое, которое разрешает вновь добавлять:
CREATE VIEW MyRating AS SELECT * FROM HighRating

CREATE VIEW . Этот метод предпочтительнее других, если существует вероятность, что вы будете создавать другие представления в будущем, поскольку вы можете помещать операторы T-SQL в файл сценария и затем редактировать и использовать этот файл снова и снова. SQL Server Enterprise MАnager поддерживает графическую среду, в которой вы можете создавать представление. И наконец, вы можете использовать мастер создания представлений Create View Wizard, когда вам требуется помощь, чтобы пройти через процесс создания представления, что может оказаться полезным как для новичка, так и специалиста.
Использование T-SQL для создания представления

Создание представлений с помощью T-SQL – достаточно простой процесс: вы запускаете оператор CREATE VIEW для создания представления с помощью ISQL, OSQL или Query Аnalyzer. Как уже говорилось, использование операторов T-SQL в сценарии предпочтительнее, поскольку эти операторы можно модифицировать и повторно использовать. (Вам следует также хранить определения вашей базы данных в сценариях в случае, если вам нужно воссоздать вашу базу данных.)

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

CREATE VIEW имя_представления [(колонка, колонка...)] AS ваш оператор SELECT

Создавая представление, вы можете активизировать два средства, которые изменяют поведение представления. Для активизирования этих средств нужно включить в оператор T-SQL ключевые слова WITH ENCRYPTION и/или WITH CHECK OPTION . Рассмотрим эти средства более подробно.

Ключевое слово WITH ENCRYPTION указывает, что определение представления (оператор SELECT , определяющий представление) должно шифроваться. SQL Server использует для шифрования операторов SQL тот же метод, что и для паролей. Этот метод обеспечения безопасности может оказаться полезным, если вы не хотите, чтобы определенные классы пользователей знали, к каким таблицам осуществляется доступ.

Ключевое слово WITH CHECK OPTION указывает, что операции модифицирования данных, применяемые к представлению, должны отвечать критериям, содержащимся в операторе SELECT . Например, можно запретить операцию модифицирования данных, применяемую к представлению для создания строки таблицы, которая не видна внутри этого представления. Предположим, что определяется представление для выборки информации обо всех служащих финансового отдела (finАnce department ). Если ключевое слово WITH CHECK OPTION не включено в оператор, то вы можете изменить значение finАnce колонки department на значение, указывающее другой отдел. Но если это ключевое слово указано, то данное изменение не будет допускаться, поскольку изменение значения колонки department в какой-либо строке сделает эту строку недоступной из данного представления. Ключевое слово WITH CHECK OPTION указывает, что вы не можете сделать какую-либо строку недоступной из представления, внося какое-либо изменение внутри этого представления.

Оператор SELECT можно изменять для создания любого нужного вам представления. Его можно использовать для выборки подмножества колонок или подмножества строк либо для выполнения какой-либо операции связывания (join). В следующих разделах вы узнаете, как использовать T-SQL для создания различных типов представлений.

Подмножество колонок

Представление, содержащее подмножество колонок, может оказаться полезным, если вам требуется обеспечить безопасность таблицы, которая должна быть доступна пользователям лишь частично. Рассмотрим один пример. Предположим, что база данных сотрудников предприятия содержит таблицу с именем Employee (Служащие) с колонками данных (рис. 18.1).


Рис. 18.1.

Большинство из этих данных являются критически важными и должны быть доступны для просмотра только определенным сотрудникам. Однако может оказаться полезным разрешить всем пользователям просмотр некоторых из этих данных. Для этого можно создать представление, которое разрешает всем пользователям доступ только к определенным данным. Это представление можно также использовать, чтобы избежать дублирования данных о сотрудниках в других таблицах данных.

Чтобы создать представление по таблице Employee, в котором имеется доступ только к колонкам name (имя), phone (телефон) и office (комната), используйте следующий оператор T-SQL:

CREATE VIEW emp_vw AS SELECT name, phone, office FROM Employee

Результирующее представление будет содержать колонки (рис. 18.2). Хотя эти колонки также существуют в базовой таблице , пользователи, имеющие доступ к данным через это представление, могут видеть эти колонки только в этом представлении. А поскольку представление может иметь уровень безопасности, отличный от базовой таблицы представления, это представление можно предоставлять для доступа любому пользователю, в то время как образующая таблица останется защищенной. Иными словами, вы можете ограничить доступ к таблице Employee, разрешив его, например, только отделу кадров, и можете предоставить всем пользователям доступ к этому представлению.

Дается понятие представлений. Определяется роль представлений в вопросах безопасности данных. Описывается процесс управления представлениями: создание, изменение, применение, удаление представлений.

Определение представления

Представления , или просмотры (VIEW ), представляют собой временные, производные (иначе - виртуальные) таблицы и являются объектами базы данных, информация в которых не хранится постоянно, как в базовых таблицах, а формируется динамически при обращении к ним. Обычные таблицы относятся к базовым, т.е. содержащим данные и постоянно находящимся на устройстве хранения информации. Представление не может существовать само по себе, а определяется только в терминах одной или нескольких таблиц. Применение представлений позволяет разработчику базы данных обеспечить каждому пользователю или группе пользователей наиболее подходящие способы работы с данными, что решает проблему простоты их использования и безопасности. Содержимое представлений выбирается из других таблиц с помощью выполнения запроса, причем при изменении значений в таблицах данные в представлении автоматически меняются. Представление - это фактически тот же запрос, который выполняется всякий раз при участии в какой-либо команде. Результат выполнения этого запроса в каждый момент времени становится содержанием представления . У пользователя создается впечатление, что он работает с настоящей, реально существующей таблицей.

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

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

Создания и изменения представлений в стандарте языка и реализации в MS SQL Server совпадают и представлены следующей командой:

<определение_просмотра> ::= { CREATE| ALTER} VIEW имя_просмотра [(имя_столбца [,...n])] AS SELECT_оператор

Рассмотрим назначение основных параметров.

По умолчанию имена столбцов в представлении соответствуют именам столбцов в исходных таблицах. Явное указание имени столбца требуется для вычисляемых столбцов или при объединении нескольких таблиц, имеющих столбцы с одинаковыми именами. Имена столбцов перечисляются через запятую, в соответствии с порядком их следования в представлении .

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

Параметр WITH CHECK OPTION предписывает серверу исполнять проверку изменений, производимых через представление , на соответствие критериям, определенным в операторе SELECT . Это означает, что не допускается выполнение изменений, которые приведут к исчезновению строки из представления . Такое случается, если для представления установлен горизонтальный фильтр и изменение данных приводит к несоответствию строки установленным фильтрам. Использование аргумента WITH CHECK OPTION гарантирует, что сделанные изменения будут отображены в представлении . Если пользователь пытается выполнить изменения, приводящие к исключению строки из представления , при заданном аргументе WITH CHECK OPTION сервер выдаст сообщение об ошибке и все изменения будут отклонены.

Пример 10.1. Показать в представлении клиентов из Москвы.

Создание представления:

Выборка данных из представления:

SELECT * FROM view1

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

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

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

Выполним команду:

INSERT INTO view1 VALUES (12,"Петров", "Самара")

Это допустимая команда в представлении , и строка будет добавлена с помощью представления view1 в таблицу Клиент . Однако, когда информация будет добавлена, строка исчезнет из представления , поскольку название города отлично от Москвы. Иногда такой подход может стать проблемой, т.к. данные уже находятся в таблице, но пользователь их не видит и не в состоянии выполнить их удаление или модификацию. Для исключения подобных моментов служит WITH CHECK OPTION в определении представления . Фраза размещается в определении представления , и все команды модификации будут подвергаться проверке.

Для такого представления вышеупомянутая вставка значений будет отклонена системой.

Таким образом, представление может изменяться командами модификации DML, но фактически модификация воздействует не на само представление , а на базовую таблицу.

Представление удаляется командой:

DROP VIEW имя_просмотра [,...n]

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

Не все представления в SQL могут быть модифицированы. Модифицируемое представление определяется следующими критериями:

  • основывается только на одной базовой таблице;
  • содержит первичный ключ этой таблицы;
  • не содержит DISTINCT в своем определении;
  • не использует GROUP BY или HAVING в своем определении;
  • по возможности не применяет в своем определении подзапросы;
  • не использует константы или выражения значений среди выбранных полей вывода;
  • в просмотр должен быть включен каждый столбец таблицы, имеющий атрибут NOT NULL ;
  • оператор SELECT просмотра не использует агрегирующие (итоговые) функции, соединения таблиц, хранимые процедуры и функции, определенные пользователем;
  • основывается на одиночном запросе, поэтому объединение UNION не разрешено.

Если просмотр удовлетворяет этим условиям, к нему могут применяться операторы INSERT , UPDATE , DELETE . Различия между и представлениями , предназначенными только для чтения, не случайны. Цели, для которых их используют, различны. С модифицируемыми представлениями в основном обходятся точно так же, как и с базовыми таблицами. Фактически, пользователи не могут даже осознать, является ли объект, который они запрашивают, базовой таблицей или представлением , т.е. прежде всего это средство защиты для сокрытия конфиденциальных или не относящихся к потребностям данного пользователя частей таблицы. Представления в режиме <только для чтения> позволяют получать и форматировать данные более рационально. Они создают целый арсенал сложных запросов, которые можно выполнить и повторить снова, сохраняя полученную информацию. Результаты этих запросов могут затем использоваться в других запросах, что позволит избежать сложных предикатов и снизить вероятность ошибочных действий.

CREATE VIEW view2 AS SELECT Клиент.Фамилия, Клиент.Фирма, Сделка.Количество FROM Клиент INNER JOIN Сделка ON Клиент.КодКлиента=Сделка.КодКлиента Пример 10.3. Немодифицируемое представление с данными из разных таблиц.

CREATE VIEW view3(Тип, Общ_остаток) AS SELECT Тип, Sum(Остаток) FROM Товар GROUP BY Тип Пример 10.4. Немодифицируемое представление с группировкой и итоговыми функциями.

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

CREATE VIEW view4(Код, Название, Тип, Цена, Налог) AS SELECT КодТовара, Название, Тип, Цена, Цена*0.05 FROM Товар Пример 10.5. Модифицируемое представление с вычислениями.

Преимущества и недостатки представлений

Механизм представления - мощное средство СУБД, позволяющее скрыть реальную структуру БД от некоторых пользователей за счет определения представлений . Любая реализация представления должна гарантировать, что состояние представляемого отношения точно соответствует состоянию данных, на которых определено это представление . Обычно вычисление представления производится каждый раз при его использовании. Когда представление создается, информация о нем записывается в каталог БД под собственным именем. Любые изменения в данных адекватно отобразятся в представлении - в этом его отличие от очень похожего на него запроса к БД. В то же время запрос представляет собой как бы <мгновенную фотографию> данных и при изменении последних запрос к БД необходимо повторить. Наличие представлений в БД необходимо для обеспечения логической независимости данных. Если система обеспечивает физическую независимость данных, то изменения в физической структуре БД не влияют на работу пользовательских программ. Логическая независимость подразумевает тот факт, что при изменении логической структуры данных влияние на пользовательские программы также не оказывается, а значит, система должна уметь решать проблемы, связанные с ростом и реструктуризацией БД. Очевидно, что с увеличением количества данных, хранимых в БД, возникает необходимость ее расширения за счет добавления новых атрибутов или отношений - это называется ростом БД. Реструктуризация данных подразумевает сохранение той же самой информации, но изменяется ее расположение, например, за счет перегруппировки атрибутов в отношениях. Предположим, некоторое отношение в силу каких-либо причин необходимо разделить на два. Соединение полученных отношений в представлении воссоздает исходное отношение, а у пользователя складывается впечатление, что никакой реструктуризации не производилось. Помимо решения проблемы реструктуризации представление можно применять для просмотра одних и тех же данных разными пользователями и в различных вариантах. С помощью представлений пользователь имеет возможность ограничить объем данных для удобства работы. Наконец, механизм представлений позволяет скрыть служебные данные, не интересные пользователям.

В случае выполнения СУБД на отдельно стоящем персональном компьютере использование представлений обычно имеет целью лишь упрощение структуры запросов к базе данных. Однако в случае многопользовательской сетевой СУБД представления играют ключевую роль в определении структуры базы данных и организации защиты информации. Рассмотрим основные преимущества применения представлений в подобной среде.

Независимость от данных

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

Актуальность

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

Повышение защищенности данных

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

Снижение стоимости

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

Дополнительные удобства

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

Возможность настройки

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

Обеспечение целостности данных

Если в операторе CREATE VIEW будет указана фраза WITH CHECK OPTION , то СУБД станет осуществлять контроль за тем, чтобы в исходные таблицы базы данных не была введена ни одна из строк, не удовлетворяющих предложению WHERE в определяющем запросе. Этот механизм гарантирует целостность данных в представлении .

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

Однако использование представлений в среде SQL не лишено недостатков .

Ограниченные возможности обновления

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

Структурные ограничения

Структура представления устанавливается в момент его создания. Если определяющий запрос представлен в форме SELECT * FROM_ , то символ * ссылается на все столбцы, существующие в исходной таблице на момент создания представления . Если впоследствии в исходную таблицу базы данных добавятся новые столбцы, то они не появятся в данном представлении до тех пор, пока это представление не будет удалено и вновь создано.

Снижение производительности

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