Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_6-15.doc
Скачиваний:
7
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

1.2.3Создание представлений — до 25 мин.

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

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

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

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. Например, можно запретить операцию модифицирования данных, применяемую к представлению для создания строки таблицы, которая не видна внутри этого представления. Предположим, что определяется представление для выборки информации обо всех служащих финансового отдела (finance department). Если ключевое слово WITH CHECK OPTION не включено в оператор, то вы можете изменить значение finance колонки department на значение, указывающее другой отдел. Но если это ключевое слово указано, то данное изменение не будет допускаться, поскольку изменение значения колонки department в какой-либо строке сделает эту строку недоступной из данного представления. Ключевое слово WITH CHECK OPTION указывает, что вы не можете сделать какую-либо строку недоступной из представления, внося какое-либо изменение внутри этого представления.

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

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

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

Рисунок 7.1 — Таблица Employee

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

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

CREATE VIEW emp_vw

AS SELECT name, phone, office FROM Employee

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

Рисунок 7.2 — Представление emp_vw

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

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

Рисунок 7.3. Таблица Employee с данными

В этом примере вместо ограничения колонок мы ограничим строки, задав их в предложении WHERE, как это показано ниже:

CREATE VIEW emp_vw2

AS SELECT * FROM Employee WHERE Dept = 1

Результирующее представление будет содержать только строки со служащими из отдела кадров (Dept = 1) (Рисунок 7.4). Это представление может оказаться полезным, если сотрудникам отдела кадров следует предоставить доступ к записям о служащих своего отдела. Представлению с подмножеством строк, как и представлению с подмножеством колонок можно присвоить уровень безопасности, отличный от базовой таблицы или таблиц представления.

Рисунок 7.4 — Представление emp_vw2

Связывание

Определяя связывание в представлении, вы можете упрощать операторы T-SQL, используемые для доступа к данным, по сравнению с операторами, содержащими оператор JOIN. Рассмотрим один пример. Предположим, у нас имеются две таблицы – Manager и Employee2 (см. рисунок 7.5).

Рисунок 7.5 — Таблицы Manager и Employee2

Следующий оператор выполняет связывание таблиц Employee2 и Manager в одну виртуальную таблицу:

CREATE VIEW org_chart

AS SELECT Employee.ename, Manager.mname

FROM Employee, MАnager

WHERE Employee.mАnager_id = mАnager.id

GROUP BY Manager.mname, Employee.ename

В данном примере указанные две таблицы связаны значением manager_id (идентификатор руководителя). Результирующие данные, содержащиеся в представлении org_chart, сгруппированы по имени руководителя (manager_name) (см. рисунок 7.6). Отметим, что если руководитель указан в таблице Manager, но в таблице Employee2 нет ни одного служащего (employee) для этого руководителя, то в представлении нет ни одной записи для этого руководителя. В представлении также нет ни одной записи для служащего, содержащегося в таблице Employee2, но не имеющего соответствующего руководителя в таблице Manager. Все это видят пользователи в виртуальной таблице со служащими и руководителями.

Агрегирование

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

Рисунок 7.6 — Представление org_chart

Функции агрегирования SQL Server выполняют расчеты по наборам значений и возвращают одно значение. Это функции AVG, COUNT, MAX, MIN и SUM.

Следующий оператор задает представление, в котором используется функция агрегирования SUM по таблице Employee:

CREATE VIEW sal_vw

AS SELECT dept, SUM(Salary) FROM Employee GROUP BY dept

В этом примере представление задает виртуальную таблицу, где показаны суммы выплат жалования (Salary) по каждому отделу (dept). Результирующий набор группируется по отделам (см. рисунок 7.7). Это очень простое агрегированное представление. Ваши представления могут иметь любой уровень сложности, необходимый для выполнения нужной функции.

Рисунок 7.7 — Представление sal_vw

Секционирование

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

Представление выглядит для пользователей как одна большая таблица, но она образована многими таблицами, каждая из которых имеет собственный индекс (см. рисунок 6.8). (На самом деле здесь подошел бы кластеризованный индекс по дате.)

Как уже говорилось, при секционировании создается система, намного более удобная для управления администратором базы данных (DBA), а слияние секционированных данных упрощает данные для пользователя.

Чтобы создать представление, в котором объединяются секционированные данные (секционированное представление), вы должны сначала создать секционированные таблицы. Эти таблицы будут, скорее всего, содержать данные по продажам. В каждой таблице будут храниться данные за определенный период – обычно за неделю или месяц. Создав эти таблицы, вы можете использовать оператор UNION ALL, чтобы создать представление, содержащее все данные. Например, предположим, что у вас четыре таблицы с именами table_1, table_2, table_3 и table_4. Следующий оператор создает одну большую виртуальную таблицу, содержащую все данные из этих таблиц:

Рисунок 7.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

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