- •Санкт-Петербург
- •Часть I. Общие сведения о субд Microsoft sql Server 2000 5
- •Часть II. Администрирование sql Server 2000 116
- •Введение
- •Часть I. Общие сведения о субд Microsoft sql server 2000
- •1.1. Возможности sql server 2000
- •1.2. Компоненты sql server 2000
- •Утилита Server Network
- •Встроенные мастера sql Server 2000
- •1.3. Архитектур бдв среде sql Server 2000
- •Логические компоненты базы данных
- •Режимы сопоставления
- •Идентификаторы пользователей, учетные имена, роли и группы
- •Физическая структура базы данных Страницы и экстенты
- •Файлы и группы файлов баз данных
- •Протокол tds
- •Архитектура обработчика запросов
- •Архитектура памяти
- •Архитектура ввода-вывода
- •Архитектура полнотекстовых запросов
- •Организация транзакций
- •Хранилища данных и оперативная аналитическая обработка (olap)
- •Oltp-системы
- •Olap-системы
- •Архитектура разработки приложений
- •Язык баз данных
- •1.4. Инструменты программирования sql server
- •Окно Query
- •Панель Results
- •Вкладка Grids
- •Окно Object Browser
- •Окно отладчика Transact-sql
- •Окно Object Search
- •Утилита командной строки isql
- •Утилита командной строки osql
- •1.5.Язык transact - sql
- •Операторы Transact-sql
- •Язык определения данных
- •Язык управления данными
- •Язык манипулирования данными
- •Идентификаторы
- •Переменные
- •Функции
- •Встроенные функции
- •Функции получения набора строк
- •Агрегатные функции
- •Скалярные функции
- •Скалярные функции
- •Табличные функции
- •Детерминированность функций
- •Типы данных
- •Выражения
- •Использование операторов в выражениях
- •Элементы языка управления ходом выполнения
- •Обработка оператора select
- •Обработка других операторов
- •Команда go
- •Обработка пакета
- •Хранимые процедуры и триггеры
- •Исполнение хранимых процедур и триггеров
- •Сценарии Transact-sql
- •Часть II. Администрирование sql server 2000
- •2.1. Создание и управление бд sql server 2000
- •Методы создания баз данных sql Server
- •Оператор create database
- •Управление базой данных sql Server
- •Просмотр сведений о базе данных
- •Модификация базы данных
- •Настройка параметров базы данных
- •Удаление базы данных sql Server
- •2.2. Импорт и экспорт данных
- •Использование утилиты Ьср и оператора bulk insert
- •Использование различных форматов данных
- •Использование dts
- •Инструменты dts
- •Задачи dts
- •Соединения dts
- •2.3. Копирование в среде sql server 2000
- •Терминология резервного копирования
- •Резервное копирование с использованием Transact-sql
- •Полное резервное копирование базы данных
- •Резервное копирование файла или группы файлов
- •Репликация
- •2.4. Восстановление в среде sql server 2000 Определение последовательности восстановления данных
- •2.5. Репликация Процесс репликации
- •Репликация моментальных снимков
- •2.6. Проверка подлинности в sql server 2000
- •Проверка подлинности средствами Windows
- •Проверка подлинности средствами sql Server 2000
- •Сравнение типов проверки подлинности
- •Клиентские сетевые библиотеки и проверка подлинности.
- •Выбор режима проверки подлинности для sql Server 2000
- •Проверка подлинности Windows
- •Смешанный режим проверки подлинности
- •Делегирование учетной записи пользователя
- •2.7.Разрешение уровня сервера
- •Фиксированные роли базы данных
- •2.8.1. Оптимизация работы sql server 2000
- •2.8.1. Конфигурация сети
- •2.8.2. Индексы
- •Назначение и структура индексов
- •Кластерные индексы
- •Не кластерные индексы
- •Свойства индекса
- •Уникальный индекс.
- •Составной индекс
- •Коэффициент заполнения и разреженность индекса
- •Порядок сортировки
- •2.8.3. Триггеры
- •Исполнение триггеров
- •2.8.4. Хранимые процедуры
- •Производительность
- •Временные хранимые процедуры
- •Расширенные хранимые процедуры
- •Удаленные хранимые процедуры
- •2.8.5. Представления
- •2.8.6. Мониторинг
- •Утилита System Monitor
- •Утилита Task Manager
- •Утилита sql Profiler
- •Утилита sql Query Analyzer
- •Использование Transact-sql
- •Системные хранимые процедуры
- •Команды dbcc
- •Встроенные функции
- •Флаги трассировки
- •Использование snmp
- •2.9. Системы безопасности
- •Шифрование объектов
- •Список литературы
2.8.3. Триггеры
Обеспечение целостности данных имеет решающее значение для поддержания точности и согласованности базы данных. Триггеры представляют собой особый вид хранимых процедур, привязанных к таблицам и представлениям. Они позволяют реализовать в базе данных сложные процедурные методы поддержания целостности данных и бизнес-логику. События при модификации данных вызывают автоматическое срабатывание триггеров. В этом занятии рассказано, когда следует использовать триггеры, а когда применять другие, менее ресурсоемкие средства, например каскадную ссылочную целостность. Вы также познакомитесь с различными типами и классами триггеров, с их особенностями и ограничениями.
Расширение возможностей защиты целостности данных с помощью триггеров
При оценке базы данных, как правило, обращают внимание на согласованность и точность содержащейся в ней информации. Для поддержания согласованности и точности используются декларативная и процедурная целостности данных.
Триггеры позволяют писать процедуры, вызываемые при модификации табличных данных в результате исполнения операторов INSERT, UPDATE или DELETE. Как к таблицам, так и к представлениям можно привязать триггеры, реализующие бизнес-правила в базе данных. Например, одно из бизнес-правил, определенных для базы данных BookShopDB, утверждает, что при добавлении книги к заказу необходимо пометить ее в инвентарном списке как проданную. К таблице BookOrders можно привязать триггер, срабатывающий при размещении заказа на книгу. Бизнес-логика триггера находит книгу в таблице Books и помечает ее как проданную.
Процедурная целостность данных
Прежде чем реализовывать триггер, следует выяснить, нельзя ли получить аналогичные результаты с использованием ограничений или правил. Для уникальной идентификации строк табличных данных используют целостность сущностей (ограничения primary key и unique key). Доменная целостность служит для определения значений по умолчанию (определения default) и ограничения диапазона значений, разрешенных для ввода в данное поле (ограничения check и ссылочные ограничения). Ссылочная целостность используется для реализации логических связей между таблицами (ограничения foreign key и check). Если значение обязательного поля не задано в операторе INSERT, то оно определяется с помощью определения default. Лучше применять ограничения, чем триггеры и правила.
Правила оставлены в SQL Server 2000 для совместимости, а использование большого числа триггеров зачастую снижает производительность системы. Оптимизатор запросов использует определения ограничений для построения высокопроизводительных планов исполнения запросов. Триггеры особенно полезны, поскольку позволяют описывать значительно более сложную логику по сравнению с той, что доступна методам декларативной целостности. Триггеры применяются в следующих случаях:
если использование методов декларативной целостности данных не отвечает функциональным потребностям приложения. Например, для изменения числового значения в таблице при удалении записи из этой же таблицы следует создать триггер;
если необходимо каскадное изменение через связанные таблицы в базе данных. Например, чтобы изменять объем складских запасов при размещении заказа, следует создать риггер, привязанный к таблице Orders. Другой триггер, привязанный к таблице Inventory, при изменении количества товара на складе добавляет к таблице Purchasing запрос на закупку товара. Чтобы обновить или удалить данные в столбцах с ограничением foreign key, вместо пользовательского триггера следует применять ограничения каскадной ссылочной целостности;
если база данных денормализована и требуется способ автоматизированного обновления избыточных данных в нескольких таблицах;
если необходимо сверить значение в одной таблице с неидентичным значением в другой таблице;
если требуется вывод пользовательских сообщений и сложная обработка ошибок.
Каскадная ссылочная целостность расширяет возможности обеспечения точности и согласованности данных, обновляя и удаляя внешние ключи в базе данных. Триггеры расширяют эти возможности, обеспечивая защиту целостности данных в столбцах любой таблицы из базы данных и даже в объектах, расположенных за пределами текущей базы данных. Кроме того, триггеры разрешается привязывать и к представлениям.
Один триггер способен выполнять несколько действий и реагировать на несколько разных событий. Например, можно создать триггер, который реагирует на любое из событий INSERT, UPDATE или DELETE, или в программе на языке Transact-SQL описать бизнес-логику для обработки каждого типа событий.
Нельзя устанавливать триггеры на временные или системные таблицы, хотя на такие таблицы разрешено ссылаться в операторах Transact-SQL самого триггера. Следует помнить о следующем важном ограничении: триггеры INSTEAD OF DELETE и INSTEAD OF UPDATE нельзя определять в таблицах, где заданы ограничения каскадной ссылочной целостности ON DELETE или ON UPDATE соответственно.
Автоматическое срабатывание триггера вызывают три события: INSERT, UPDATE и DELETE, которые происходят в таблице или представлении. Триггеры нельзя запустить вручную. В синтаксисе триггеров перед фрагментом программы, уникально определяющим выполняемую триггером задачу, всегда определено одно или несколько таких событий. Типы триггеров соответствуют этим событиям. Например, можно создать триггер на обновление, срабатывающий при обновлении данных таблицы. Один триггер разрешается запрограммировать для реакции на несколько событий, поэтому несложно создать процедуру, которая одновременно является триггером на обновление и добавление. Порядок этих событий в определении триггера не ограничен.
Есть определенные обстоятельства, при которых событие модификации или удаления данных не вызывает срабатывания соответствующего триггера. Например, при исполнении оператора TRUNCATE TABLE не происходит срабатывание DELETE-триггера. Важной особенностью триггеров является автоматический откат неудачных транзакций. Поскольку TRUNCATE TABLE — непротоколируемое событие, его откат невозможен и оно не вызывает срабатывание DELETE-триггера. Кроме того, исполнение оператора WRITE-ТЕХТ не вызывает срабатывания INSERT- и UPDATE-триггеров.
