6. Щелкните на кнопке Close, чтобы закрыть диалоговое окно Add Table.
7. Выберите поля в каждой таблице, т.е. поле job_desc в таблице jobs и поля fname и lname в таблице employee.
8. Проверьте созданное представление, щелкнув на кнопке Run с изображением восклицательного знака или щелкнув правой кнопкой мыши на пустом поле со схемой представления, а затем выбрав из контекстного меню команду Run. Результат проверки созданного представления показан на рис. 3.17.
РИС. 3.17. Результаты создания и выполнения нового представления в окне конструктора представлений программы SQL Enterprise Manager
9. Сохраните новое представление, щелкнув на кнопке Save или щелкнув правой кнопкой мыши на пустом поле со схемой представления, а затем выбрав из контекстного меню команду Save.
НА ЗАМЕТКУ
Для указания имени представления можно использовать соглашение об именах с суффиксом _view, например SpecialCustomers_view. Это позволяет пользователям сразу же определить, что они имеют дело с представлением, а не с таблицей. Конечно, для этого можно использовать любое соглашение об именах, либо вообще не использовать его.
10. В диалоговом окне Save As (Сохранить как) введите имя представления и щелкните на кнопке OK. Здесь можно указать любое имя, но в данном примере используется EmployeeJobs_view.
После создания представления EmployeeJobs_view в базе данных появится еще один объект, которым можно манипулировать так же, как любой простой таблицей, несмотря на то что это результат объединения двух таблиц. Таким образом, можно получить более короткие и простые команды SQL на основе этого одного объекта, но по отношению к прежней корректно структурированной (нормализованной) базе данных.
Аналогично можно создать представление на основе вычислений или манипуляций с данными таблицы. Предположим, что нужно извлечь имена сотрудников в виде одного поля с именем и фамилией в формате имя, фамилия. Для этого можно создать следующее представление:
CREATE VIEW EmployeeNames_view AS
SELECT lname + ', ' + fname AS Name FROM employee
Использование представлений в приложениях
Представление — это конструкция, которая позволяет управлять процессом извлечения информации из базы данных SQL Server. Это управление может осуществляться несколькими способами. В представлении можно ограничить количество строк или столбцов, что позволяет управлять данными, возвращаемыми пользователю. Для этого необходимо создать критерий отбора, который известен только разработчику базы данных, или предоставить пользователям доступ к данным на основе разрешений системы безопасности. Каждый объект базы данных — таблица, представление, хранимая процедура — может быть ассоциирован с пользователем или группой системы безопасности. В базах данных, которые используют преимущества представлений и хранимых процедур, прямой доступ к таблицам обычно ограничивается администратором базы данных. Клиентские приложения при этом ограничены только доступом к связанным представлениям или хранимым процедурам, которые, в свою очередь, отвечают за извлечение данных из основных таблиц.
Создание скрытого поля — еще один способ ограничения доступа. При этом данные такого поля не возвращаются пользователю, а отфильтровываются с помощью представления. Клиентскому приложению даже не будет известно, что существуют еще какие-либо данные, поскольку оно будет ограничено лишь данными представления.
Практически все профессиональные серверы баз данных SQL ограничивают непосредственный доступ к базе данных. Помимо ограничения доступа к строкам и полям, сокрытие таблиц баз данных с помощью представлений позволяет изменять их незаметно для клиентских приложений.
Кроме этого, с помощью компонентов среднего уровня можно отделить изменения структуры базы данных от изменений бизнес-правил. Эти компоненты аналогичны представлениям и хранимым процедурам тем, что скрывают изменения структуры базы данных от клиентского приложения. Помимо этого, существует еще одно преимущество использования таких компонентов по сравнению с представлениями и хранимыми процедурам SQL Server: они упрощают процесс программирования, возвращают данные в виде объектов, а не строк и столбцов, а также не привязаны к конкретной СУБД или языку программирования. Более подробно компоненты среднего уровня рассматриваются в главе 12, "Web-службы и технологии промежуточного уровня".
Создание представления с помощью программы SQL Query Analyzer
Для создания представлений можно использовать программу SQL Query Analyzer. Процесс создания представления в ней аналогичен подобному процессу в программе SQL Server Enterprise Manager, но обладает большей гибкостью, несмотря на использование более скромных графических инструментов. Для создания представления tblEmployee без конфиденциального поля Salary в программе SQL Query Analyzer выполните приведенные ниже действия.
1. Введите в окно программы SQL Query Analyzer следующий код (он организован таким образом, чтобы представление создавалось независимо от того, существует оно уже или нет):
USE novelty GO
DROP VIEW Employee_view GO
CREATE VIEW Employee_view AS
SELECT ID, FirstName, LastName, DepartmentID
FROM tblEmployee GO SELECT * FROM Employee_view
2. Для выполнения этой последовательности команд нажмите клавишу <F5> или щелкните на кнопке Execute Query. Представление будет создано и запущено, а результаты будут показаны во вкладке Grids (или Results).
3. Проверьте работоспособность представления с помощью программы SQL Server Enterprise Manager, в которой нужно выбрать вкладку Views для базы данных Novelty.
НА ЗАМЕТКУ
Ранее в этой главе рассматривалось, как создать представление графическими средствами в программе SQL Server Enterprise Manager, щелкая на нем правой кнопкой мыши и выбирая команду Design View (Создать представление) из контекстного меню. Текст команды SQL для создания представления можно редактировать, дважды щелкнув на представлении и изменяя этот текст в диалоговом окне.
В рассматриваемом примере, кроме создания представления с помощью программы SQL Server Enterprise Manager, демонстрируется удобство использования пакетов команд SQL. Приведенный выше пакет команд SQL не только создает новое представление, но и связывает его с нужной базой данных и извлекает данные для него. Полученный результат подтверждает, что представление работает именно так, как и предполагалось.
Пакеты можно создавать для упрощения процесса создания объектов базы данных с помощью программы SQL Server Enterprise Manager, потому что в большинстве случаев при создании объектов базы данных приходится выполнять сразу несколько операций. Типичным примером пакета команд SQL является удаление старой таблицы, создание новой таблицы и наполнение ее данными. Кроме этой и других задач, пакет команд SQL может использоваться для проверки наличия учетной записи и создания учетной записи с используемым по умолчанию паролем.
Создание и запуск хранимых процедур
С помощью представления можно контролировать данные, возвращаемые SQL Server, однако существует еще более мощное средство — хранимые процедуры (stored procedures). Хранимые процедуры подобны представлениям, но могут выполнять более сложные операции над данными. Например, с помощью хранимых процедур можно выполнять следующие операции:
• вычисления;
• установка или возврат параметров;
• реализация логики приложения, для чего требуется выполнить несколько этапов или запросов с помощью языка программирования, предназначенного для использования с базой данных;
• возврат данных в форме, которая наилучшим образом подходит для приложения-клиента.
Заметьте: не все эти операции можно выполнить с помощью представлений.
Хранимую процедуру можно представить себе как особый вид процедуры, так как она хранится в самой базе данных, а не является частью приложения, которое выполняется на клиентском компьютере или прикладном сервере (именно поэтому она так и называется). В предыдущем списке операций указано, что хранимая процедура может содержать не только простой однострочный запрос, но и сложный многострочный запрос, который способен выполнить несколько действий, прежде чем возвратить результат.
Хранимые процедуры создаются на специальном языке программирования, который применяется в используемой базе данных. Этот язык содержит практически все распространенные программные конструкции, хотя его синтаксис не всегда очевиден. В SQL Server для создания хранимых процедур используется язык Transact SQL.
НА ЗАМЕТКУ
Компания Microsoft заявила, что будущие версии SQL Server позволят создавать хранимые процедуры на любом языке, который совместим с платформой .NET (например, Visual Basic .NET), а не только на языке Transact SQL. Это позволит разработчикам легко переходить от одного аспекта программирования к другому, не изучая синтаксиса нового языка программирования.