В лекции 17 вы узнали об индексах – вспомогательных структурах, существующих отдельно от данных базы данных, но используемых для доступа к этим данным. Иными словами, индекс – это независимая структура, но она неотъемлемо связана с данными. В этой лекции мы рассмотрим еще одну вспомогательную структуру базы данных: представления. Представление, как и индекс, существует независимо от данных, но непосредственно связано с этими данными. Представление используется для фильтрации (обработки) данных перед доступом пользователей к этим данным. В этой лекции вы узнаете, что такое представление, каким образом представления связаны с данными, почему и когда используются представления и как создавать представления и управлять ими. Кроме того, мы рассмотрим некоторые расширения возможностей представлений в Microsoft SQL Server 2000.
Представление – это SELECT. Эта TrАnsАсt-SQL (T-SQL) таким же образом, как и к таблицам. К представлению можно применять операции SELECT, INSERT, UPDATE и DELETE.
На самом деле представление хранится просто как заранее определенный оператор SQL. При доступе к представлению
Преимущество использования представлений заключается в том, что можно создавать представления с различными атрибутами без необходимости
Теперь, когда вы ознакомились с основами представлений, рассмотрим их более подробно. В этом разделе вы узнаете о типах представлений, о преимуществах использования представлений и ограничениях, которые налагает SQL Server на использование представления.
Можно создавать несколько типов представлений, каждый из которых имеет свои преимущества в определенных ситуациях. Тип представления, которое вы создаете, целиком зависит от цели, для которой вы хотите его использовать. Вы можете создавать представления в любой из следующих форм:
Примеры использования этих типов представлений см. в разделе "Использование T-SQL для создания представления" далее.
Представления можно также использовать для объединения
Одним из преимуществ использования представлений является то, что они всегда содержат самые свежие данные. Оператор SELECT, определяющий представление, выполняется только при доступе к этому представлению, поэтому все изменения, внесенные в
Еще одним преимуществом использования представлений является то, что представление может иметь уровень безопасности, отличный от его
SQL Server налагает несколько ограничений на создание и использование представлений. Это следующие ограничения:
null -значений, то они также не допускаются этим представлением.SELECT не может содержать оператора ORDER BY, COMPUTE или COMPUTE BY или ключевого слова INTO.Представления, как и индексы, можно создавать с помощью целого ряда способов. Вы можете создать представление с помощью оператора T-SQL . Этот метод предпочтительнее других, если существует вероятность, что вы будете создавать другие представления в будущем, поскольку вы можете помещать операторы
T-SQL в файл сценария и затем редактировать и использовать этот файл снова и снова. SQL Server Enterprise MАnager поддерживает графическую среду, в которой вы можете создавать представление. И наконец, вы можете использовать мастер создания представлений
Создание представлений с помощью T-SQL – достаточно простой процесс: вы запускаете оператор для создания представления с помощью ISQL, OSQL или Query Аnalyzer. Как уже говорилось, использование операторов T-SQL в сценарии предпочтительнее, поскольку эти операторы можно модифицировать и повторно использовать. (Вам следует также хранить определения вашей базы данных в сценариях в случае, если вам нужно воссоздать вашу базу данных.)
Оператор имеет следующий синтаксис:
CREATE VIEW имя_представления [(колонка, колонка ...)] [WITH ENCRYPTION] AS ваш оператор SELECT [WITH CHECK OPTION]
Создавая представление, вы можете активизировать два средства, которые изменяют поведение представления. Для активизирования этих средств нужно включить в оператор T-SQL ключевые слова WITH ENCRYPTION и/или WITH CHECK OPTION. Рассмотрим эти средства более подробно.
Ключевое слово WITH ENCRYPTION указывает, что определение представления (оператор SELECT, определяющий представление) должно шифроваться. SQL Server использует для шифрования операторов SQL тот же метод, что и для паролей. Этот метод обеспечения безопасности может оказаться полезным, если вы не хотите, чтобы определенные классы пользователей знали, к каким таблицам осуществляется доступ.
Ключевое слово WITH CHECK OPTION указывает, что операции модифицирования данных, применяемые к представлению, должны отвечать критериям, содержащимся в операторе SELECT. Например, можно запретить операцию модифицирования данных, применяемую к представлению для WITH CHECK OPTION не включено в оператор, то вы можете изменить значение finАnce колонки WITH CHECK OPTION указывает, что вы не можете сделать какую-либо строку недоступной из представления, внося какое-либо изменение внутри этого представления.
Оператор SELECT можно изменять для создания любого нужного вам представления. Его можно использовать для выборки подмножества колонок или подмножества строк либо для выполнения какой-либо операции связывания (join). В следующих разделах вы узнаете, как использовать T-SQL для создания различных типов представлений.
Представление, содержащее подмножество колонок, может оказаться полезным, если вам требуется обеспечить безопасность таблицы, которая должна быть доступна пользователям лишь частично. Рассмотрим один пример. Предположим, что база данных сотрудников предприятия содержит таблицу с именем Employee (Служащие) с колонками данных (рис. 18.1).
(рис 18.1) Таблица EmployeeБольшинство из этих данных являются критически важными и должны быть доступны для просмотра только определенным сотрудникам. Однако может оказаться полезным разрешить всем пользователям просмотр некоторых из этих данных. Для этого можно создать представление, которое разрешает всем пользователям доступ только к определенным данным. Это представление можно также использовать, чтобы избежать
Чтобы создать представление по таблице Employee, в котором имеется доступ только к колонкам name (имя), phone (телефон) и office (комната), используйте следующий оператор T-SQL:
CREATE VIEW emp_vw
AS
SELECT name,
phone,
office
FROM Employee
Результирующее представление будет содержать колонки (рис. 18.2). Хотя эти колонки также существуют в
(рис 18.2) Представление emp_vw
Представление, состоящее из подмножества строк, можно использовать для ограничения доступа путем
(рис 18.3) Таблица Employee с даннымиВ этом примере вместо ограничения колонок мы ограничим строки, задав их в предложении WHERE, как это показано ниже:
CREATE VIEW emp_vw2 AS SELECT * FROM Employee WHERE Dept = 1
Результирующее представление будет содержать только строки со служащими из отдела кадров (Dept = 1) (рис. 18.4). Это представление может оказаться полезным, если сотрудникам отдела кадров следует предоставить доступ к записям о служащих своего отдела. Представлению с подмножеством строк, как и представлению с подмножеством колонок можно присвоить уровень безопасности, отличный от
(рис 18.4) Представление emp_vw2
Определяя связывание в представлении, вы можете упрощать операторы T-SQL, используемые для доступа к данным, по сравнению с операторами, содержащими оператор JOIN. Рассмотрим один пример. Предположим, у нас имеются две таблицы – MАnager и Employee2 (рис. 18.5).
(рис 18.5) Таблицы MАnager и Employee2Следующий оператор выполняет связывание таблиц Employee2 и MАnager в одну виртуальную таблицу:
CREATE VIEW org_chart
AS
SELECT Employee.ename,
MАnager.mname
FROM Employee, MАnager
WHERE Employee.manager_id = mАnager.id
GROUP BY MАnager.mname, Employee.ename
В данном примере указанные две таблицы связаны значением mАnager_id (идентификатор руководителя). Результирующие данные, содержащиеся в представлении org_chart, сгруппированы по имени руководителя (mАnager_name) (рис. 18.6). Отметим, что если руководитель указан в таблице MАnager, но в таблице Employee2 нет ни одного служащего (employee) для этого руководителя, то в представлении нет ни одной записи для этого руководителя. В представлении также нет ни одной записи для служащего, содержащегося в таблице Employee2, но не имеющего соответствующего руководителя в таблице MАnager. Все это видят пользователи в
Агрегированные представления могут оказаться полезными во многих случаях, таких как считывание средних значений и сумм по отделам. Например, вы можете использовать агрегированное представление для бюджетных целей, чтобы просматривать денежные суммы, относящиеся к выплатам жалования по каждому отделу. Вы можете также выполнить эту задачу с помощью запроса T-SQL.
(рис 18.6) Представление org_chartAVG, COUNT, MAX, MIN и SUM.Следующий оператор задает представление, в котором используется функция агрегирования SUM по таблице Employee:
CREATE VIEW sal_vw
AS
SELECT dept,
SUM(Salary)
FROM Employee
GROUP BY dept
В этом примере представление задает виртуальную таблицу, где показаны суммы выплат жалования (Salary) по каждому отделу (dept). Результирующий набор группируется по отделам (рис. 18.7). Это очень простое агрегированное представление. Ваши представления могут иметь любой уровень сложности, необходимый для выполнения нужной функции.
(рис 18.7) Представление sal_vw
Представления обычно используются для слияния
Представление выглядит для пользователей как одна большая таблица, но она образована многими таблицами, каждая из которых имеет собственный индекс (рис. 18.8). (На самом деле здесь подошел бы
Как уже говорилось, при секционировании создается система, намного более удобная для управления администратором базы данных (
Чтобы создать представление, в котором объединяются UNION ALL, чтобы создать представление, содержащее все данные. Например, предположим, что у вас четыре таблицы с именами table_1, table_2, table_3 и table_4. Следующий оператор создает одну большую виртуальную таблицу, содержащую все данные из этих таблиц:
(рис 18.8) Использование представлений для слияния секционированных данныхCREATE VIEW partview AS SELECT * FROM table_1 UNION ALL SELECT * FROM table_2 UNION ALL SELECT * FROM table_3 UNION ALL SELECT * FROM table_4
Теперь все данные доступны в одной таблице, но ими по-прежнему можно управлять. По мере создания новых и удаления старых секций данных представление нужно будет создавать снова.
В этом разделе мы будем использовать Enterprise MАnager для создания представления в базе данных Northwind. Следующие шаги позволят вам пройти через этот процесс:
(рис 18.10) Информация по базе данных Northwind(рис 18.9) Окно New View (Создание представления)Окно New View состоит из следующих четырех панелей:
GROUP BY к оператору в панели SQL.SELECT в панели SQL в соответствии с оператором SELECT (рис. 18.11). Представление будет содержать колонки CompАnyName, ContАсtName и Phone. Набрав текст оператора SELECT, щелкните на кнопке Verify SQL, чтобы проверить правильность данного запроса. Если это так, то вы должны щелкнуть на кнопке OK в появившемся диалоговом окне, чтобы Enterprise MАnager заполнил панель схемы и панель-сетку. Ваше окно New View будет выглядеть (рис. 18.11).Ваше представление теперь доступно для использования. Вы можете использовать Enterprise MАnager, чтобы задать свойства нового представления, включая полномочия доступа. Окно View Properties (Свойства представления) описывается в разделе "Изменение и удаление представлений" далее.
(рис 18.11) Заполненное окно New View (Создание представления)
Чтобы использовать мастер Create View Wizard для создания представления, выполните следующие шаги.
(рис 18.13) Начальное окно Create View Wizard(рис 18.12) Окно Select Objects (Выбор объектов)
(рис 18.14) Окно Select Columns (Выбор колонок)WHERE, ограничивающее строки базы данных, выбираемые в данном представлении.Создавая представление, помните, что представление – это оператор SQL, выполняющий доступ к базовым данным, и что именно вы контролируете этот оператор SQL. Кроме того, помните следующие рекомендации, которые могут оказаться полезными для улучшения производительности, управляемости и применимости ваших баз: данных.
WHERE оператора SELECT для данного представления. Индекс может использоваться для выбора данных, только если соответствующая колонка является частью представления и используется в предложении WHERE. Например, если таблица Employee содержит индекс по колонке Dept и эта колонка включена в представление, то можно использовать этот индекс.Удаление и изменение представлений выполняется с помощью Enterprise MАnager или операторов T-SQL. Работать с Enterprise MАnager проще, как и при выполнении других процедур SQL Server, но операторы T-SQL обеспечивают повторяемость. В этом разделе мы рассмотрим оба метода.
Для изменения и удаления представлений с помощью Enterprise MАnager выполните следующие шаги.
(рис 18.19) Контекстное меню для выбранного представления(рис 18.18) Диалоговое окно Drop Objects (Удаление объектов)Если в контекстном меню выбран пункт Design View, то появится окно Design View (рис. 18.20). Отметим его сходство с окном (рис. 18.10). Вы можете использовать окно Design View для модифицирования вашего представления таким же способом, что и при создании представления в окне New View.
(рис 18.20) Окно Design ViewЗакончив модифицирование представления, вы можете задать полномочия доступа к этому представлению. Сначала откройте окно View Properties, щелкнув правой кнопкой мыши на имени представления в окне Enterprise MАnager и выбрав из контекстного меню пункт Properties. Затем щелкните на Permissions (Полномочия), чтобы вывести на экран полномочия доступа для данного представления. (О процессе задания полномочий см. лекцию 34.)
Как видите, модифицирование представления с помощью Enterprise MАnager происходит просто. Но если вы модифицируете или удаляете большое число представлений, то будет намного удобнее использовать язык T-SQL, поскольку его можно использовать в сценариях.
Для изменения представлений с помощью T-SQL используйте оператор ALTER VIEW. Оператор ALTER VIEW аналогичен оператору и имеет следующий синтаксис:
ALTER VIEW имя_представления [(колонка, колонка, ...)] [WITH ENCRYPTION] AS ваш оператор SELECT [WITH CHECK OPTION]
Единственным отличием между операторами ALTER VIEW и является то, что оператор не будет выполняться, если представление уже существует, а оператор ALTER VIEW не будет выполняться, если указанное представление не существует. (Необязательные ключевые слова WITH ENCRYPTION и WITH CHECK OPTION описаны в разделе "Использование T-SQL для создания представления" выше.)
Чтобы увидеть, как действует оператор ALTER VIEW, вернемся к нашему примеру
ALTER VIEW partview AS SELECT * FROM table_2 UNION ALL SELECT * FROM table_3 UNION ALL SELECT * FROM table_4 UNION ALL SELECT * FROM table_5
Модифицированное представление будет выглядеть аналогично прежнему виду (до выполнения оператора ALTER VIEW ), но теперь будет выбран другой набор данных. Представление теперь не использует таблицу table_1 и использует таблицу table_5.
Для удаления представления используйте оператор DROP VIEW. Оператор DROP VIEW имеет следующий простой синтаксис:
DROP VIEW имя_представления
Как видите, оба метода – использование Enterprise MАnager и команд T-SQL – удобны для использования. Выберите метод, который наиболее отвечает вашим требованиям.
В SQL Server 2000 включены два расширения по представлениям:
В Microsoft SQL Server версии 7 и более ранних версий данные представлений были статическими и отражали реальное состояние
(рис 18.21) Объединение систем SQL ServerПрежде чем реализовать
При формировании таблиц-участниц вы секционируете их по горизонтали. Каждая таблица-участница хранит горизонтальный "срез" исходных данных. Это CHECK секционируемой колонки. При секционировании ваших данных следите за ситуациями, когда эти диапазоны данных не полностью охватывают ваши данные. Рассмотрим пример горизонтального CREATE TABLE:
Server 1:
CREATE TABLE Customer_Table_1
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 1 АND 3000),
.
. (Дополнительные определения колонки)
.
Server 2:
CREATE TABLE Customer_Table_2
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 3001 АND 6000),
.
. (Дополнительные определения колонки)
.
Server 3:
CREATE TABLE Customer_Table_3
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 6001 АND 9000),
.
. (Дополнительные определения колонки)
.
Server 4:
CREATE TABLE Customer_Table_4
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 9001 АND 12000),
.
. (Дополнительные определения колонки)
.
После создания таблиц-участниц вы можете определить распределенное
Для поддержки прозрачности данных вам потребуется создать определения присоединенного сервера на каждом сервере-участнике. Эти определения обеспечивают сервер-участник всей информацией о соединениях для всех других серверов-участников данного объединения. Это позволяет секционированному представлению на любом сервере осуществлять доступ к данным на других серверах-участниках. Определения присоединенных серверов создаются с помощью операторов T-SQL или Enterprise MАnager.
Оператор T-SQL, используемый для определения присоединенного сервера, имеет следующий вид:
sp_addlinkedserver [ @server = ] 'сервер'
[ , [ @srvproduct = ] 'имя_продукта' ]
[ , [ @provider = ] 'имя_провайдера' ]
[ , [ @datasrc = ] 'источник_данных' ]
[ , [ @location = ] 'местоположение' ]
[ , [ @provstr = ] 'строка_провайдера' ]
[ , [ @catalog = ] 'каталог' ]
Хранимая процедура sp_addlinkedserver имеет следующие параметры:
имя_сервера\имя_экземпляра.@srvproduct.@srvproduct. Если вы присоединяете систему SQL Server 2000 к другой системе SQL Server 2000, то вам не нужно указывать @provider.@datasrc, если только вы не подсоединяетесь к определенному экземпляру присоединенного сервера. В этом случае вы должны задать для источника данных имя_сервера\имя_экземпляра.@location.@provstr.Например, следующий оператор T-SQL создает определения присоединенного сервера для обмена данными между серверами Server1, Server2, Server3 и Server4.
Server 1: sp_addlinkedserver 'Server2' sp_setnetname 'Server2', 'sql-server-02' sp_addlinkedserverlogin Server2, 'false', 'sa', 'sa' sp_addlinkedserver 'Server3' sp_setnetname 'Server3', 'sql-server-03' sp_addlinkedserverlogin Server3, 'false', 'sa', 'sa' sp_addlinkedserver 'Server4' sp_setnetname 'Server4', 'sql-server-04' sp_addlinkedserverlogin Server4, 'false', 'sa', 'sa' Server 2: sp_addlinkedserver 'Server1' sp_setnetname 'Server1', 'sql-server-01' sp_addlinkedsrvlogin Server1, 'false', 'sa', 'sa' sp_addlinkedserver 'Server3' sp_setnetname 'Server3', 'sql-server-03' sp_addlinkedserverlogin Server3, 'false', 'sa', 'sa' sp_addlinkedserver 'Server4' sp_setnetname 'Server4', 'sql-server-04' sp_addlinkedserverlogin Server4, 'false', 'sa', 'sa' Server 3: sp_addlinkedserver 'Server1' sp_setnetname 'Server1', 'sql-server-01' sp_addlinkedsrvlogin Server1, 'false', 'sa', 'sa' sp_addlinkedserver 'Server2' sp_setnetname 'Server2', 'sql-server-02' sp_addlinkedsrvlogin Server2, 'false', 'sa', 'sa' sp_addlinkedserver 'Server4' sp_setnetname 'Server4', 'sql-server-04' sp_addlinkedsrvlogin Server4, 'false', 'sa', 'sa' Server 4: sp_addlinkedserver 'Server1' sp_setnetname 'Server1', 'sql-server-01' sp_addlinkedsrvlogin Server1, 'false', 'sa', 'sa' sp_addlinkedserver 'Server2' sp_setnetname 'Server2', 'sql-server-02' sp_addlinkedsrvlogin Server2, 'false', 'sa', 'sa' sp_addlinkedserver 'Server3' sp_setnetname 'Server3', 'sql-server-03' sp_addlinkedsrvlogin Server3, 'false', 'sa', 'sa'
В дополнение к оператору T-SQL sp_addlinkedserver были использованы два оператора. Эти операторы требуются для улучшения обработки распределенного секционированного представления. Обращение к sp_setnetname связывает имя присоединенного сервера в SQL Server с сетевым именем сервера, на котором находится база данных. В этом примере имя присоединенного сервера Server2 находится на сервере с сетевым именем sql-server-02. Мы также задали "верительные данные" для входа на присоединенный сервер. Обращение к sp_addlinkedsrvlogin указывает системе SQL Server, что для доступа к присоединенному серверу нужно использовать заданный идентификатор пользователя (user ID) и пароль.
Enterprise MАnager тоже позволяет присоединять серверы. Для использования этого метода выполните следующие шаги:
(рис 18.23) Раскрытие папки Security на сервере(рис 18.22) Вкладка General (Общие) окна Linked Server Properties
(рис 18.25) Выбор типа присоединенного сервера(рис 18.24) Вкладка Security окна Linked Server PropertiesПрисоединенный сервер теперь доступен для использования. Вы можете также использовать Enterprise MАnager для модифицирования или удаления свойств присоединенного сервера. Кроме того, вы можете использовать Enterprise MАnager для просмотра таблиц и представлений, имеющихся на присоединенном сервере.
После того как сделаны все определения присоединенных серверов, вы можете создать реальное представление. В следующем примере создается представление с именем sales (продажи), в котором объединяются данные по продажам из таблицы sales на четырех серверах:
CREATE VIEW sales
AS
SELECT * FROM /*Server1.bicycle.dbo.*/l_sales
UNION ALL
SELECT * FROM Server2.bicycle.dbo.l_sales
UNION ALL
SELECT * FROM Server3.bicycle.dbo.l_sales
UNION ALL
SELECT * FROM Server4.bicycle.dbo.l_sales
GO
SQL Server 2000 также позволяет вам создать индекс по представлению. Поскольку представление – это просто CREATE INDEX, который вы уже использовали для создания индекса по таблице. (Этот оператор описан в лекции 17.) Единственным отличием является то, что вместо имени таблицы вы указываете имя представления. Например, следующий оператор T-SQL создает
CREATE UNIQUE CLUSTERED INDEX partview_cluidx ON partview (part_num ASC) WITH FILLFАСTOR=95 ON partfilegroup
Создание индексов по представлениям имеет несколько факторов влияния на производительность. Очевидно, что индекс по представлению повышает производительность при доступе к данным в представлении точно так же, как и индекс по таблице.
Кроме того, если вы создаете индекс по представлению, SQL Server сохраняет результирующий набор представления в памяти и не обязан "материализовать" его для будущих запросов. Термин "материализовать" относится к процессу, который используется системой SQL Server для динамического слияния данных, необходимого для создания результирующего набора представления каждый раз, когда какой-либо запрос ссылается на представление. (Напомним, что представление – это динамическая структура.) Процесс материализации представления может существенно увеличить дополнительную нагрузку, которая требуется для реализации запроса. Влияние, оказываемое на производительность повторяющейся материализацией представления, может оказаться значительным в случае сложного представления или большого количества данных в представлении.
Кроме того, если вы создаете индекс по представлению, FROM оператора SELECT. Иными словами, если существующий запрос в приложении или хранимой процедуре может получить преимущества от использования индексированного представления, то
Эти преимущества не достаются "бесплатно". Индексированные представления могут оказаться со временем слишком сложными, чтобы их мог поддерживать SQL Server. При каждом модифицировании
В этой лекции вы узнали, что представление – это вспомогательная структура данных, которую можно использовать для создания виртуальных таблиц. Эти виртуальные таблицы выглядят, как реальные таблицы базы данных, но это на самом деле просто сохраненные запросы SQL. Эти запросы объединяются с другими запросами для доступа к
Вы можете обращаться к представлению в операторах T-SQL таким же образом, как и к таблицам. Представления можно использовать как средство безопасности для скрытия критически важных данных. Они также позволяют осуществлять более простой доступ к данным. И, кроме того, представления позволяют осуществлять логическую презентацию данных. Вы можете также использовать представления для создания виртуальной таблицы из отдельных секций.
В этой лекции вы также узнали о некоторых ограничениях и рекомендациях, касающихся использования представлений. И вы также увидели, что в определенных ситуациях вам следует создавать индексы по вашим представлениям. В лекции 19 мы рассмотрим транзакции и блокировки транзакций.
В лекции 17 вы узнали об индексах – вспомогательных структурах, существующих отдельно от данных базы данных, но используемых для доступа к этим данным. Иными словами, индекс – это независимая структура, но она неотъемлемо связана с данными. В этой лекции мы рассмотрим еще одну вспомогательную структуру базы данных: представления. Представление, как и индекс, существует независимо от данных, но непосредственно связано с этими данными. Представление используется для фильтрации (обработки) данных перед доступом пользователей к этим данным. В этой лекции вы узнаете, что такое представление, каким образом представления связаны с данными, почему и когда используются представления и как создавать представления и управлять ими. Кроме того, мы рассмотрим некоторые расширения возможностей представлений в Microsoft SQL Server 2000.
Представление – это SELECT. Эта TrАnsАсt-SQL (T-SQL) таким же образом, как и к таблицам. К представлению можно применять операции SELECT, INSERT, UPDATE и DELETE.
На самом деле представление хранится просто как заранее определенный оператор SQL. При доступе к представлению
Преимущество использования представлений заключается в том, что можно создавать представления с различными атрибутами без необходимости
Теперь, когда вы ознакомились с основами представлений, рассмотрим их более подробно. В этом разделе вы узнаете о типах представлений, о преимуществах использования представлений и ограничениях, которые налагает SQL Server на использование представления.
Можно создавать несколько типов представлений, каждый из которых имеет свои преимущества в определенных ситуациях. Тип представления, которое вы создаете, целиком зависит от цели, для которой вы хотите его использовать. Вы можете создавать представления в любой из следующих форм:
Примеры использования этих типов представлений см. в разделе "Использование T-SQL для создания представления" далее.
Представления можно также использовать для объединения
Одним из преимуществ использования представлений является то, что они всегда содержат самые свежие данные. Оператор SELECT, определяющий представление, выполняется только при доступе к этому представлению, поэтому все изменения, внесенные в
Еще одним преимуществом использования представлений является то, что представление может иметь уровень безопасности, отличный от его
SQL Server налагает несколько ограничений на создание и использование представлений. Это следующие ограничения:
null -значений, то они также не допускаются этим представлением.SELECT не может содержать оператора ORDER BY, COMPUTE или COMPUTE BY или ключевого слова INTO.Представления, как и индексы, можно создавать с помощью целого ряда способов. Вы можете создать представление с помощью оператора T-SQL . Этот метод предпочтительнее других, если существует вероятность, что вы будете создавать другие представления в будущем, поскольку вы можете помещать операторы
T-SQL в файл сценария и затем редактировать и использовать этот файл снова и снова. SQL Server Enterprise MАnager поддерживает графическую среду, в которой вы можете создавать представление. И наконец, вы можете использовать мастер создания представлений
Создание представлений с помощью T-SQL – достаточно простой процесс: вы запускаете оператор для создания представления с помощью ISQL, OSQL или Query Аnalyzer. Как уже говорилось, использование операторов T-SQL в сценарии предпочтительнее, поскольку эти операторы можно модифицировать и повторно использовать. (Вам следует также хранить определения вашей базы данных в сценариях в случае, если вам нужно воссоздать вашу базу данных.)
Оператор имеет следующий синтаксис:
CREATE VIEW имя_представления [(колонка, колонка ...)] [WITH ENCRYPTION] AS ваш оператор SELECT [WITH CHECK OPTION]
Создавая представление, вы можете активизировать два средства, которые изменяют поведение представления. Для активизирования этих средств нужно включить в оператор T-SQL ключевые слова WITH ENCRYPTION и/или WITH CHECK OPTION. Рассмотрим эти средства более подробно.
Ключевое слово WITH ENCRYPTION указывает, что определение представления (оператор SELECT, определяющий представление) должно шифроваться. SQL Server использует для шифрования операторов SQL тот же метод, что и для паролей. Этот метод обеспечения безопасности может оказаться полезным, если вы не хотите, чтобы определенные классы пользователей знали, к каким таблицам осуществляется доступ.
Ключевое слово WITH CHECK OPTION указывает, что операции модифицирования данных, применяемые к представлению, должны отвечать критериям, содержащимся в операторе SELECT. Например, можно запретить операцию модифицирования данных, применяемую к представлению для WITH CHECK OPTION не включено в оператор, то вы можете изменить значение finАnce колонки WITH CHECK OPTION указывает, что вы не можете сделать какую-либо строку недоступной из представления, внося какое-либо изменение внутри этого представления.
Оператор SELECT можно изменять для создания любого нужного вам представления. Его можно использовать для выборки подмножества колонок или подмножества строк либо для выполнения какой-либо операции связывания (join). В следующих разделах вы узнаете, как использовать T-SQL для создания различных типов представлений.
Представление, содержащее подмножество колонок, может оказаться полезным, если вам требуется обеспечить безопасность таблицы, которая должна быть доступна пользователям лишь частично. Рассмотрим один пример. Предположим, что база данных сотрудников предприятия содержит таблицу с именем Employee (Служащие) с колонками данных (рис. 18.1).
(рис 18.1) Таблица EmployeeБольшинство из этих данных являются критически важными и должны быть доступны для просмотра только определенным сотрудникам. Однако может оказаться полезным разрешить всем пользователям просмотр некоторых из этих данных. Для этого можно создать представление, которое разрешает всем пользователям доступ только к определенным данным. Это представление можно также использовать, чтобы избежать
Чтобы создать представление по таблице Employee, в котором имеется доступ только к колонкам name (имя), phone (телефон) и office (комната), используйте следующий оператор T-SQL:
CREATE VIEW emp_vw
AS
SELECT name,
phone,
office
FROM Employee
Результирующее представление будет содержать колонки (рис. 18.2). Хотя эти колонки также существуют в
(рис 18.2) Представление emp_vw
Представление, состоящее из подмножества строк, можно использовать для ограничения доступа путем
(рис 18.3) Таблица Employee с даннымиВ этом примере вместо ограничения колонок мы ограничим строки, задав их в предложении WHERE, как это показано ниже:
CREATE VIEW emp_vw2 AS SELECT * FROM Employee WHERE Dept = 1
Результирующее представление будет содержать только строки со служащими из отдела кадров (Dept = 1) (рис. 18.4). Это представление может оказаться полезным, если сотрудникам отдела кадров следует предоставить доступ к записям о служащих своего отдела. Представлению с подмножеством строк, как и представлению с подмножеством колонок можно присвоить уровень безопасности, отличный от
(рис 18.4) Представление emp_vw2
Определяя связывание в представлении, вы можете упрощать операторы T-SQL, используемые для доступа к данным, по сравнению с операторами, содержащими оператор JOIN. Рассмотрим один пример. Предположим, у нас имеются две таблицы – MАnager и Employee2 (рис. 18.5).
(рис 18.5) Таблицы MАnager и Employee2Следующий оператор выполняет связывание таблиц Employee2 и MАnager в одну виртуальную таблицу:
CREATE VIEW org_chart
AS
SELECT Employee.ename,
MАnager.mname
FROM Employee, MАnager
WHERE Employee.manager_id = mАnager.id
GROUP BY MАnager.mname, Employee.ename
В данном примере указанные две таблицы связаны значением mАnager_id (идентификатор руководителя). Результирующие данные, содержащиеся в представлении org_chart, сгруппированы по имени руководителя (mАnager_name) (рис. 18.6). Отметим, что если руководитель указан в таблице MАnager, но в таблице Employee2 нет ни одного служащего (employee) для этого руководителя, то в представлении нет ни одной записи для этого руководителя. В представлении также нет ни одной записи для служащего, содержащегося в таблице Employee2, но не имеющего соответствующего руководителя в таблице MАnager. Все это видят пользователи в
Агрегированные представления могут оказаться полезными во многих случаях, таких как считывание средних значений и сумм по отделам. Например, вы можете использовать агрегированное представление для бюджетных целей, чтобы просматривать денежные суммы, относящиеся к выплатам жалования по каждому отделу. Вы можете также выполнить эту задачу с помощью запроса T-SQL.
(рис 18.6) Представление org_chartAVG, COUNT, MAX, MIN и SUM.Следующий оператор задает представление, в котором используется функция агрегирования SUM по таблице Employee:
CREATE VIEW sal_vw
AS
SELECT dept,
SUM(Salary)
FROM Employee
GROUP BY dept
В этом примере представление задает виртуальную таблицу, где показаны суммы выплат жалования (Salary) по каждому отделу (dept). Результирующий набор группируется по отделам (рис. 18.7). Это очень простое агрегированное представление. Ваши представления могут иметь любой уровень сложности, необходимый для выполнения нужной функции.
(рис 18.7) Представление sal_vw
Представления обычно используются для слияния
Представление выглядит для пользователей как одна большая таблица, но она образована многими таблицами, каждая из которых имеет собственный индекс (рис. 18.8). (На самом деле здесь подошел бы
Как уже говорилось, при секционировании создается система, намного более удобная для управления администратором базы данных (
Чтобы создать представление, в котором объединяются UNION ALL, чтобы создать представление, содержащее все данные. Например, предположим, что у вас четыре таблицы с именами table_1, table_2, table_3 и table_4. Следующий оператор создает одну большую виртуальную таблицу, содержащую все данные из этих таблиц:
(рис 18.8) Использование представлений для слияния секционированных данныхCREATE VIEW partview AS SELECT * FROM table_1 UNION ALL SELECT * FROM table_2 UNION ALL SELECT * FROM table_3 UNION ALL SELECT * FROM table_4
Теперь все данные доступны в одной таблице, но ими по-прежнему можно управлять. По мере создания новых и удаления старых секций данных представление нужно будет создавать снова.
В этом разделе мы будем использовать Enterprise MАnager для создания представления в базе данных Northwind. Следующие шаги позволят вам пройти через этот процесс:
(рис 18.10) Информация по базе данных Northwind(рис 18.9) Окно New View (Создание представления)Окно New View состоит из следующих четырех панелей:
GROUP BY к оператору в панели SQL.SELECT в панели SQL в соответствии с оператором SELECT (рис. 18.11). Представление будет содержать колонки CompАnyName, ContАсtName и Phone. Набрав текст оператора SELECT, щелкните на кнопке Verify SQL, чтобы проверить правильность данного запроса. Если это так, то вы должны щелкнуть на кнопке OK в появившемся диалоговом окне, чтобы Enterprise MАnager заполнил панель схемы и панель-сетку. Ваше окно New View будет выглядеть (рис. 18.11).Ваше представление теперь доступно для использования. Вы можете использовать Enterprise MАnager, чтобы задать свойства нового представления, включая полномочия доступа. Окно View Properties (Свойства представления) описывается в разделе "Изменение и удаление представлений" далее.
(рис 18.11) Заполненное окно New View (Создание представления)
Чтобы использовать мастер Create View Wizard для создания представления, выполните следующие шаги.
(рис 18.13) Начальное окно Create View Wizard(рис 18.12) Окно Select Objects (Выбор объектов)
(рис 18.14) Окно Select Columns (Выбор колонок)WHERE, ограничивающее строки базы данных, выбираемые в данном представлении.Создавая представление, помните, что представление – это оператор SQL, выполняющий доступ к базовым данным, и что именно вы контролируете этот оператор SQL. Кроме того, помните следующие рекомендации, которые могут оказаться полезными для улучшения производительности, управляемости и применимости ваших баз: данных.
WHERE оператора SELECT для данного представления. Индекс может использоваться для выбора данных, только если соответствующая колонка является частью представления и используется в предложении WHERE. Например, если таблица Employee содержит индекс по колонке Dept и эта колонка включена в представление, то можно использовать этот индекс.Удаление и изменение представлений выполняется с помощью Enterprise MАnager или операторов T-SQL. Работать с Enterprise MАnager проще, как и при выполнении других процедур SQL Server, но операторы T-SQL обеспечивают повторяемость. В этом разделе мы рассмотрим оба метода.
Для изменения и удаления представлений с помощью Enterprise MАnager выполните следующие шаги.
(рис 18.19) Контекстное меню для выбранного представления(рис 18.18) Диалоговое окно Drop Objects (Удаление объектов)Если в контекстном меню выбран пункт Design View, то появится окно Design View (рис. 18.20). Отметим его сходство с окном (рис. 18.10). Вы можете использовать окно Design View для модифицирования вашего представления таким же способом, что и при создании представления в окне New View.
(рис 18.20) Окно Design ViewЗакончив модифицирование представления, вы можете задать полномочия доступа к этому представлению. Сначала откройте окно View Properties, щелкнув правой кнопкой мыши на имени представления в окне Enterprise MАnager и выбрав из контекстного меню пункт Properties. Затем щелкните на Permissions (Полномочия), чтобы вывести на экран полномочия доступа для данного представления. (О процессе задания полномочий см. лекцию 34.)
Как видите, модифицирование представления с помощью Enterprise MАnager происходит просто. Но если вы модифицируете или удаляете большое число представлений, то будет намного удобнее использовать язык T-SQL, поскольку его можно использовать в сценариях.
Для изменения представлений с помощью T-SQL используйте оператор ALTER VIEW. Оператор ALTER VIEW аналогичен оператору и имеет следующий синтаксис:
ALTER VIEW имя_представления [(колонка, колонка, ...)] [WITH ENCRYPTION] AS ваш оператор SELECT [WITH CHECK OPTION]
Единственным отличием между операторами ALTER VIEW и является то, что оператор не будет выполняться, если представление уже существует, а оператор ALTER VIEW не будет выполняться, если указанное представление не существует. (Необязательные ключевые слова WITH ENCRYPTION и WITH CHECK OPTION описаны в разделе "Использование T-SQL для создания представления" выше.)
Чтобы увидеть, как действует оператор ALTER VIEW, вернемся к нашему примеру
ALTER VIEW partview AS SELECT * FROM table_2 UNION ALL SELECT * FROM table_3 UNION ALL SELECT * FROM table_4 UNION ALL SELECT * FROM table_5
Модифицированное представление будет выглядеть аналогично прежнему виду (до выполнения оператора ALTER VIEW ), но теперь будет выбран другой набор данных. Представление теперь не использует таблицу table_1 и использует таблицу table_5.
Для удаления представления используйте оператор DROP VIEW. Оператор DROP VIEW имеет следующий простой синтаксис:
DROP VIEW имя_представления
Как видите, оба метода – использование Enterprise MАnager и команд T-SQL – удобны для использования. Выберите метод, который наиболее отвечает вашим требованиям.
В SQL Server 2000 включены два расширения по представлениям:
В Microsoft SQL Server версии 7 и более ранних версий данные представлений были статическими и отражали реальное состояние
(рис 18.21) Объединение систем SQL ServerПрежде чем реализовать
При формировании таблиц-участниц вы секционируете их по горизонтали. Каждая таблица-участница хранит горизонтальный "срез" исходных данных. Это CHECK секционируемой колонки. При секционировании ваших данных следите за ситуациями, когда эти диапазоны данных не полностью охватывают ваши данные. Рассмотрим пример горизонтального CREATE TABLE:
Server 1:
CREATE TABLE Customer_Table_1
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 1 АND 3000),
.
. (Дополнительные определения колонки)
.
Server 2:
CREATE TABLE Customer_Table_2
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 3001 АND 6000),
.
. (Дополнительные определения колонки)
.
Server 3:
CREATE TABLE Customer_Table_3
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 6001 АND 9000),
.
. (Дополнительные определения колонки)
.
Server 4:
CREATE TABLE Customer_Table_4
(CustomerID INTEGER PRIMARY KEY
CHECK (CustomerID BETWEEN 9001 АND 12000),
.
. (Дополнительные определения колонки)
.
После создания таблиц-участниц вы можете определить распределенное
Для поддержки прозрачности данных вам потребуется создать определения присоединенного сервера на каждом сервере-участнике. Эти определения обеспечивают сервер-участник всей информацией о соединениях для всех других серверов-участников данного объединения. Это позволяет секционированному представлению на любом сервере осуществлять доступ к данным на других серверах-участниках. Определения присоединенных серверов создаются с помощью операторов T-SQL или Enterprise MАnager.
Оператор T-SQL, используемый для определения присоединенного сервера, имеет следующий вид:
sp_addlinkedserver [ @server = ] 'сервер'
[ , [ @srvproduct = ] 'имя_продукта' ]
[ , [ @provider = ] 'имя_провайдера' ]
[ , [ @datasrc = ] 'источник_данных' ]
[ , [ @location = ] 'местоположение' ]
[ , [ @provstr = ] 'строка_провайдера' ]
[ , [ @catalog = ] 'каталог' ]
Хранимая процедура sp_addlinkedserver имеет следующие параметры:
имя_сервера\имя_экземпляра.@srvproduct.@srvproduct. Если вы присоединяете систему SQL Server 2000 к другой системе SQL Server 2000, то вам не нужно указывать @provider.@datasrc, если только вы не подсоединяетесь к определенному экземпляру присоединенного сервера. В этом случае вы должны задать для источника данных имя_сервера\имя_экземпляра.@location.@provstr.Например, следующий оператор T-SQL создает определения присоединенного сервера для обмена данными между серверами Server1, Server2, Server3 и Server4.
Server 1: sp_addlinkedserver 'Server2' sp_setnetname 'Server2', 'sql-server-02' sp_addlinkedserverlogin Server2, 'false', 'sa', 'sa' sp_addlinkedserver 'Server3' sp_setnetname 'Server3', 'sql-server-03' sp_addlinkedserverlogin Server3, 'false', 'sa', 'sa' sp_addlinkedserver 'Server4' sp_setnetname 'Server4', 'sql-server-04' sp_addlinkedserverlogin Server4, 'false', 'sa', 'sa' Server 2: sp_addlinkedserver 'Server1' sp_setnetname 'Server1', 'sql-server-01' sp_addlinkedsrvlogin Server1, 'false', 'sa', 'sa' sp_addlinkedserver 'Server3' sp_setnetname 'Server3', 'sql-server-03' sp_addlinkedserverlogin Server3, 'false', 'sa', 'sa' sp_addlinkedserver 'Server4' sp_setnetname 'Server4', 'sql-server-04' sp_addlinkedserverlogin Server4, 'false', 'sa', 'sa' Server 3: sp_addlinkedserver 'Server1' sp_setnetname 'Server1', 'sql-server-01' sp_addlinkedsrvlogin Server1, 'false', 'sa', 'sa' sp_addlinkedserver 'Server2' sp_setnetname 'Server2', 'sql-server-02' sp_addlinkedsrvlogin Server2, 'false', 'sa', 'sa' sp_addlinkedserver 'Server4' sp_setnetname 'Server4', 'sql-server-04' sp_addlinkedsrvlogin Server4, 'false', 'sa', 'sa' Server 4: sp_addlinkedserver 'Server1' sp_setnetname 'Server1', 'sql-server-01' sp_addlinkedsrvlogin Server1, 'false', 'sa', 'sa' sp_addlinkedserver 'Server2' sp_setnetname 'Server2', 'sql-server-02' sp_addlinkedsrvlogin Server2, 'false', 'sa', 'sa' sp_addlinkedserver 'Server3' sp_setnetname 'Server3', 'sql-server-03' sp_addlinkedsrvlogin Server3, 'false', 'sa', 'sa'
В дополнение к оператору T-SQL sp_addlinkedserver были использованы два оператора. Эти операторы требуются для улучшения обработки распределенного секционированного представления. Обращение к sp_setnetname связывает имя присоединенного сервера в SQL Server с сетевым именем сервера, на котором находится база данных. В этом примере имя присоединенного сервера Server2 находится на сервере с сетевым именем sql-server-02. Мы также задали "верительные данные" для входа на присоединенный сервер. Обращение к sp_addlinkedsrvlogin указывает системе SQL Server, что для доступа к присоединенному серверу нужно использовать заданный идентификатор пользователя (user ID) и пароль.
Enterprise MАnager тоже позволяет присоединять серверы. Для использования этого метода выполните следующие шаги:
(рис 18.23) Раскрытие папки Security на сервере(рис 18.22) Вкладка General (Общие) окна Linked Server Properties
(рис 18.25) Выбор типа присоединенного сервера(рис 18.24) Вкладка Security окна Linked Server PropertiesПрисоединенный сервер теперь доступен для использования. Вы можете также использовать Enterprise MАnager для модифицирования или удаления свойств присоединенного сервера. Кроме того, вы можете использовать Enterprise MАnager для просмотра таблиц и представлений, имеющихся на присоединенном сервере.
После того как сделаны все определения присоединенных серверов, вы можете создать реальное представление. В следующем примере создается представление с именем sales (продажи), в котором объединяются данные по продажам из таблицы sales на четырех серверах:
CREATE VIEW sales
AS
SELECT * FROM /*Server1.bicycle.dbo.*/l_sales
UNION ALL
SELECT * FROM Server2.bicycle.dbo.l_sales
UNION ALL
SELECT * FROM Server3.bicycle.dbo.l_sales
UNION ALL
SELECT * FROM Server4.bicycle.dbo.l_sales
GO
SQL Server 2000 также позволяет вам создать индекс по представлению. Поскольку представление – это просто CREATE INDEX, который вы уже использовали для создания индекса по таблице. (Этот оператор описан в лекции 17.) Единственным отличием является то, что вместо имени таблицы вы указываете имя представления. Например, следующий оператор T-SQL создает
CREATE UNIQUE CLUSTERED INDEX partview_cluidx ON partview (part_num ASC) WITH FILLFАСTOR=95 ON partfilegroup
Создание индексов по представлениям имеет несколько факторов влияния на производительность. Очевидно, что индекс по представлению повышает производительность при доступе к данным в представлении точно так же, как и индекс по таблице.
Кроме того, если вы создаете индекс по представлению, SQL Server сохраняет результирующий набор представления в памяти и не обязан "материализовать" его для будущих запросов. Термин "материализовать" относится к процессу, который используется системой SQL Server для динамического слияния данных, необходимого для создания результирующего набора представления каждый раз, когда какой-либо запрос ссылается на представление. (Напомним, что представление – это динамическая структура.) Процесс материализации представления может существенно увеличить дополнительную нагрузку, которая требуется для реализации запроса. Влияние, оказываемое на производительность повторяющейся материализацией представления, может оказаться значительным в случае сложного представления или большого количества данных в представлении.
Кроме того, если вы создаете индекс по представлению, FROM оператора SELECT. Иными словами, если существующий запрос в приложении или хранимой процедуре может получить преимущества от использования индексированного представления, то
Эти преимущества не достаются "бесплатно". Индексированные представления могут оказаться со временем слишком сложными, чтобы их мог поддерживать SQL Server. При каждом модифицировании
В этой лекции вы узнали, что представление – это вспомогательная структура данных, которую можно использовать для создания виртуальных таблиц. Эти виртуальные таблицы выглядят, как реальные таблицы базы данных, но это на самом деле просто сохраненные запросы SQL. Эти запросы объединяются с другими запросами для доступа к
Вы можете обращаться к представлению в операторах T-SQL таким же образом, как и к таблицам. Представления можно использовать как средство безопасности для скрытия критически важных данных. Они также позволяют осуществлять более простой доступ к данным. И, кроме того, представления позволяют осуществлять логическую презентацию данных. Вы можете также использовать представления для создания виртуальной таблицы из отдельных секций.
В этой лекции вы также узнали о некоторых ограничениях и рекомендациях, касающихся использования представлений. И вы также увидели, что в определенных ситуациях вам следует создавать индексы по вашим представлениям. В лекции 19 мы рассмотрим транзакции и блокировки транзакций.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.