
- •Разработка многопользовательских баз данных
- •1. Многопользовательские базы данных.
- •If транзакция выполнена успешно then
- •2. Совместное использование данных предприятия
- •3. Применение представлений, хранимых запросов и хранимых процедур для работы в многопользовательской среде
- •Системные хранимые процедуры
- •Расширенные хранимые процедуры
- •Создание хранимой процедуры.
3. Применение представлений, хранимых запросов и хранимых процедур для работы в многопользовательской среде
Для решения текущих задач обработки информации БД в распределенной среде применяются такие механизмы как представления, хранимые запросы и процедуры.
Представление – это именованная таблица, определяемая перечнем тех столбцов таблиц и признаками тех их строк, которые хотелось бы в ней увидеть. Оно создается с помощью предложения CREATE VIEW (создать представление). Представление не поддерживается его собственными физическими хранимыми данными. Вместо этого в каталоге таблиц хранится определение, оговаривающее, из каких столбцов и строк других таблиц оно должно быть сформировано при реализации SQL-предложения на получение данных из представления или на модификацию таких данных. Одна из основных задач, которую позволяют решать представления, – обеспечение независимости пользовательских программ от изменения логической структуры базы данных при ее расширении и (или) изменении размещения столбцов, возникающего, например, при расщеплении таблиц. В последнем случае можно создать представление-соединение с именем и структурой расщепленной таблицы, позволяющее сохранить программы, существовавшие до изменения структуры базы данных.
Кроме того, представления дают возможность различным пользователям по-разному видеть одни и те же данные, возможно, даже в одно и то же время. Это особенно ценно при работе различных категорий пользователей с единой интегрированной базой данных. Пользователям предоставляют только интересующие их данные в наиболее удобной для них форме (окно в таблицу или в любое соединение любых таблиц).
Наконец, от определенных пользователей могут быть скрыты некоторые данные, невидимые через предложенное им представление. Таким образом, принуждение пользователя осуществлять доступ к базе данных через представления является простым, но эффективным механизмом для управления санкционированием доступа.
Синтаксис предложения CREATE VIEW имеет вид
CREATE VIEW имя_представления
[(столбец[,столбец] ...)]
AS подзапрос
[WITH CHECK OPTION];
где подзапрос, следующий за AS и являющийся определением данного представления, не исполняется, а просто сохраняется в каталоге; необязательная фраза "WITH CHECK OPTION" (с проверкой) указывает, что для операций INSERT и UPDATE над этим представлением должна осуществляться проверка, обеспечивающая удовлетворение WHERE фразы подзапроса; список имен столбцов должен быть обязательно определен лишь в тех случаях, когда:
а) хотя бы один из столбцов подзапроса не имеет имени (создается с помощью выражения, SQL-функции или константы);
б) два или более столбцов подзапроса имеют одно и то же имя;
если же список отсутствует, то представление наследует имена столбцов из подзапроса.
В операторе CREATE VIEW к именам баз данных и таблиц, на основе которых строится представление, добавляется префикс dbo, который должен однозначно определять пользователя БД. Присутствие префикса dbo гарантирует, что SQL Server будет обращаться к таблицам, владельцем которых является dbo.
Создать представление средствами MS Query Analyzer (самостоятельно).
Поскольку при определении представления может быть использован любой допустимый подзапрос, то выборка данных может осуществляться как из базовых таблиц, так и из представлений.
Создать запрос на выборку из представления средствами MS Query Analyzer (самостоятельно)
Чтобы создать представление с помощью графических средств, в Enterprise Manager необходимо щелкнуть правой кнопкой мыши на значке Views (Представления) и выбрать команду New View (Новое представление). Затем щелкнуть правой кнопкой мыши на пустой верхней панели и выбрать команду Add Table (Добавить таблицу). Чтобы создать представление нужно поставить флажки напротив имен соответствующих столбцов.
Обновляемые представления
Одни представления можно использовать для обновления данных, а другие – нет. Указать условия, которые делают представление обновляемым, трудно. Вообще говоря, любое представление, основывающееся на одной таблице, может быть использовано для обновления и удаления, если оно не содержит встроенных функций (например, COUNT или МАХ) и вычисляемых столбцов в предложении SELECT. Такое представление допускает и вставку данных, если оно включает в себя все ненулевые столбцы таблицы. В противном случае вставка невозможна. Представления, основывающиеся на соединениях, более сложны. В SQL Server представление, имеющее более одной таблицы в предложении FROM, не может использоваться для удаления. Многотабличные представления допускают вставку и обновление, если эти операции производятся только над одной из таблиц, входящих в представление, и опять-таки в предположении, что представление не имеет встроенных функций или производных столбцов в предложении SELECT.
Наконец, представления, которые иначе невозможно обновить, можно сделать обновляемыми, если создать замещающий триггер для операции обновления. Такой триггер представляет собой процедуру, написанную на TRANSACT-SQL, которая выполняет операции вставки, обновления или удаления вместо SQL Server (рассмотрим это более подробно, когда будем обсуждать триггеры).
Индексы
Индексы – это специальные структуры данных, создаваемые для повышения производительности базы данных. SQL Server автоматически создает индексы по всем первичным и внешним ключам. Разработчик может также с помощью SQL Server создавать индексы и по другим столбцам, которые часто фигурируют в предложениях WHERE или используются для сортировки данных при последовательной обработке таблицы для запросов и отчетов.
Чтобы создать индекс необходимо вызвать контекстное меню таблицы, содержащей столбец, который должен быть индексирован. Выбрать All Tasks (Все задачи), затем выбрать Manage Indexes (Управление индексами). Откроется диалоговое окно управления индексами. Для создания нового индекса необходимо нажать кнопку New... (Новый...), при этом появится диалоговое окно (рис. 5) (правая часть) Create New Indexes. На этом рисунке создается индекс по столбцу Col002 таблицы CUSTOMER. Индекс, который называется customers_col002_index, должен быть заполнен на 80% и отнесен к группе файлов PRIMARY. Перегрузка оставляет пространство в индексе открытым для вставок на всех уровнях, исключая самый нижний. Заполнение характеризует объем пустого пространства, оставляемого на нижнем уровне индекса.
Рис. 5. графические средства SQL Server 2000 создания индекса
SQL Server поддерживает два вида индексов: кластеризованные и некластеризованные. В кластеризованном индексе данные хранятся на нижнем уровне и в том же порядке, что и сам индекс. В некластеризованном индексе нижний уровень не содержит данных, но содержит указатели на данные. Поскольку строки могут быть отсортированы только в одном физическом порядке за один раз, для каждой таблицы допускается только один кластеризованный индекс. Кластеризованные индексы обеспечивают более быстрое получение данных, чем некластеризованные. Обычно они оказываются быстрее и при обновлении, но не в том случае, когда много обновлений происходит в одном и том же месте в середине отношения.
Логика приложения.
Существует много способов обработки баз данных SQL Server (с помощью прикладных программ на таких языках, как Visual Basic, Java, C# или C++, с использованием для доступа к данным технологий Active Data Objects, ODBC или JDBC). Еще один способ доступа к базе данных заключается в написании процедур на языке TRANSACT-SQL. Этот язык расширяет базовые возможности SQL, добавляя в него элементы программирования – параметры, переменные, условные операторы IF, циклы WHILE и т. п.
Программы, написанные на TRANSACT-SQL, можно передавать на выполнение СУБД через Query Analyzer, хранимые процедуры или триггеры. Рассмотрим каждый из этих способов. Процедуры на TRANSACT-SQL можно также вызывать из web-сценариев.
Хранимые запросы.
Хранимые запросы применяются в тех случаях, когда пользователям базы данных часто приходится выполнять однотипные запросы к базе данных. Хранимый запрос может быть написан в SQL Query Analyzer, сохранен и при необходимости вызываться пользователем БД. Однако для этого требуется, чтобы пользователь имел доступ к SQL Query Analyzer, что чревато последствиями для соблюдения правил администрирования. Кроме того, это накладывает требования знания пользователем языка SQL.
Хранимые процедуры
Другой подход к обработке баз данных SQL Server заключается в создании процедур на TRANSACT-SQL и хранении их на компьютерах пользователей или в базе данных. Эти – так называемые хранимые – процедуры могут вызываться по именам, и им можно передавать параметры. Такие процедуры могут быть сколь угодно сложными: они могут обрабатывать несколько баз данных, вызывать другие хранимые процедуры и функции и т. д.