
- •Введение. Структура предмета. Основные понятия
- •1.История развития баз данных
- •2. История развития субд
- •4.Основные понятия и определения
- •Контрольные вопросы
- •Раздел 1. Структура и технологии субд. Модели данных
- •Тема1.1 Архитектура и технико-экономические характеристики субд. Архитектура бд.
- •1. Основные функции субд
- •2. Обобщенная архитектура субд
- •3. Процесс прохождения пользовательского запроса
- •4. Архитектура бд
- •Контрольные вопросы
- •Тема 1.2 Модели данных. Основные понятия и классификация
- •1. Классификация моделей данных
- •3 Пример разработки простой er-модели
- •Контрольные вопросы
- •Тема 1.3 Иерархическая, сетевая и реляционная модели данных
- •1. Иерархическая модель данных
- •2. Сетевая модель данных
- •3. Реляционная модель данных
- •Базовые понятия реляционных баз данных
- •Контрольные вопросы
- •Тема 1.4 Физические модели данных
- •1. Файловые структуры, используемые для хранения информации в базах данных
- •2. Индексные файлы
- •3. Моделирование отношения 1:м с использованием однонаправленных указателей
- •Контрольные вопросы
- •Тема 1.5 Целостность бд. Нормальные формы
- •1. Основные понятия
- •Null-значения
- •Трехзначная логика (3vl)
- •Потенциальные ключи
- •2.Целостность сущностей
- •2 . Основные нормальные формы
- •Аномалии обновления
- •Определение функциональной зависимости
- •3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •Контрольные вопросы
- •Тема 1.6 Операции и основные понятия реляционной алгебры и реляционного исчисления
- •1. Реляционная алгебра
- •Замкнутость реляционной алгебры
- •Отношения, совместимые по типу
- •2. Теоретико-множественные операторы
- •3. Специальные реляционные операторы
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение. Определение 10. Пусть даны отношения и , имеющие одинаковые атрибуты (т.Е. Атрибуты с одинаковыми именами и определенные на одинаковых доменах).
- •Контрольные вопросы
- •Тема 1.7 Проектирование реляционной базы данных
- •1. Методология проектирования базы данных
- •2. Этапы проектирования базы данных
- •Контрольные вопросы
- •Раздел 2. Язык sql и его возможности
- •Тема 2.1 История языка sql. Создание и редактирование схемы бд
- •1. Развитие языка sql
- •Что такое пользователь?
- •Числовые константы
- •2 Создание базы данных и структуры таблицы
- •3. Модификация структуры таблицы и удаление таблицы
- •4. Индексы
- •5. Добавление новых данных
- •Однострочный оператор insert
- •Многострочный оператор insert
- •Утилиты пакетной загрузки
- •6. Удаление существующих данных
- •Оператор delete с вложенным запросом
- •7. Обновление существующих данных
- •Обновление всех строк
- •Контрольные вопросы
- •Тема 2.2 Организация запросов к базе данных.
- •1. Формирование запросов к одной таблице
- •2. Статистические функции
- •3. Группировка и агрегатные функции в запросах
- •4. Объединение таблиц
- •Объединения таблиц по равенству значений в столбцах и другие виды объединений
- •5. Объединение таблицы с собой
- •6. Теоретико-множественные операции с таблицами
- •7. Выполнение сложных запросов с вложенными подзапросами
- •Использование выражений в подзапросах
- •Контрольные вопросы
- •Тема 2.3 Виртуальные таблицы Цель: рассмотреть понятие «виртуальная таблица»; назначение виртуальных таблиц и область их использования
- •1. Команда create view
- •2. Групповые представления
- •3. Представления и объединения
- •4. Представления и подзапросы
- •5. Удаление и модификация представлений
- •Контрольные вопросы
- •1.Определение триггера и его назначение
- •2. Типы триггеров
- •Создание триггеров dml
- •Создание триггеров замещения
- •Создание системных триггеров
- •Другие аспекты использования триггеров
- •3. Хранимые процедуры
- •Хранимые функции
- •Контрольные вопросы
- •Тема 2.5 Защита информации в бд
- •1. Общие понятия привилегий
- •Стандартные привилегии
- •2. Предоставление привилегий с использованием представлений
- •3. Другие типы привилегий
- •Контрольные вопросы
- •Тема 2.6 Транзакции и управлении ими
- •1. Что такое транзакция
- •2 . Операторы commit и rollback
- •3. Журнал транзакций
- •5. Транзакции и работа в многопользовательском режиме
- •Проблема пропавшего обновления
- •Проблема промежуточных данных
- •Проблема несогласованных данных
- •Проблема строк-призраков
- •6. Параллельные транзакции
- •Уровни блокировки
- •Жесткая и нежесткая блокировки
- •Тупиковые ситуации
- •Усовершенствованные методы блокировки
- •Контрольные вопросы
- •Тема 2.7 Распределенные базы данных. Модели серверов
- •1.Распределенная обработка данных
- •2. Модели «клиент—сервер» в технологии баз данных
- •Двухуровневые модели
- •Модель сервера приложений
- •3. Модели серверов баз данных
Контрольные вопросы
Что такое представление? Его назначение
Объясните формат команд создания и удаления представлений
Можно ли модифицировать представление и если да, то в каких случаях?
Какое назначение предложения WITH CHECK OPTION?
Тема 2.4 Триггеры и хранимые процедуры
тип занятия: лекция
цель занятия: ознакомить с определением триггера, его назначениям; объяснить способы создания и модификации триггеров; дать определение хранимой процедуры
1.Определение триггера и его назначение
Триггер – это SQL-оператор, который активизируется во время выполнения определенных операций над объектами базы данных. Объектами базы данных являются таблицы, а операциями – добавление, удаление и замена строк. Триггеры – это один из механизмов поддержки целостности базы данных.
Вы можете написать триггеры, которые срабатывают в одной из следующих ситуаций:
Применение оператора DML к определенному объекту схемы.
Выполнение оператора DDL внутри схемы или базы данных.
Вход пользователя в систему или выход его из системы, ошибка сервера, запуск базы данных или остановка экземпляра.
Между триггерами и процедурами имеется три отличия:
Триггеры нельзя вызывать из кода программы. СУБД вызывает их автоматически в ответ на определенное событие.
Триггеры не имеют списка параметров.
Спецификация триггера не на много отличается от спецификации процедуры.
Сходство между триггерами и процедурами заключается в следующем:
Тело триггера выглядит точно так же, как тело процедуры — и то, и другое базовые блоки.
Триггер не возвращает никаких значений.
Триггеры можно использовать для выполнения разнообразных задач.
Триггеры автоматически генерируют производные значения столбцов.
Например, при обработке каждого нового заказа комиссионные торгового агента могут рассчитываться и вводиться в соответствующую таблицу автоматически.
Триггеры помогают предотвращать неверные транзакции. Например, триггер может помешать увеличению зарплаты служащего на большую величину, чем предусмотрено бюджетом. Заметьте, что это нельзя сделать посредством контрольных ограничений, поскольку контрольное ограничение имеет дело только со значениями текущей строки, а следовательно, не может определять общий размер бюджета.
Триггеры можно использовать для реализации сложных процедур авторизации. Например, значения зарплаты могут изменять только руководители и только для людей, что находятся в их подчинении.
Триггеры используются для реализации сложных бизнес-правил. Например, триггер может проверять, доступен ли заказанный товар к дате отгрузки, и если нет, то автоматически размещать заказ на пополнение запасов, чтобы на момент отгрузки находилось достаточное количество этого товара.
Триггеры могут обеспечивать прозрачное протоколирование событий, например, отслеживать, сколько раз отдельный продавец обращался к таблице с инвентарной ведомостью.
Триггеры могут обеспечивать сложный аудит. Например, посредством триггера легко выяснить, какое среднее число обращений к базе данных нужно данному продавцу для обработки одного заказа.
Триггеры могут собирать статистику доступа к таблицам. Например, триггер позволяет зафиксировать, сколько раз на протяжении дня выполнялся запрос на «Small Widget» к таблице с каталогом товаров. Как вы уже, вероятно, поняли, триггеры являются весьма мощными инструментами. Однако их следует использовать аккуратно, поскольку триггер может срабатывать при каждом обращении к таблице, тем самым увеличивая нагрузку на сервер базы данных.
Умное практическое правило заключается в том, чтобы использовать триггер только для действий, которые не возможно выполнить другими средствами. Например, если имеется возможность создать одно или несколько ограничений, которые выполняют работу некоторого триггера, следует использовать эти ограничения. Если итоговые величины допустимо вычислять в нерабочее время, систему лучше спроектировать именно так, а не использовать триггеры, которые срабатывают при каждой транзакции. Представьте, например, что банк принимает решение о доставке дополнительной наличности из центрального хранилища в зависимости от того, сколько 20-долларовых банкнот было выдано за текущий день. Эту величину можно определять по завершении рабочего дня. Если же для обновления счетчика 20-долларовых банкнот будет использоваться триггер, то его постоянное выполнение может существенно замедлить скорость выполнения транзакций в рабочие часы.
Триггеры, определенные для таблиц, называются табличными триггерами (table triggers). Дальше речь пойдет именно о них. В самом простом случае синтаксис объявления триггера является таким:
CREATE TRIGGER <имя триггера >
{BEFORE|AFTER} <операции над таблицей > [ <список полей >] ON <іимя таблицы>
[WHEN (<условие >)]
<операторы SQL>.
Если условие во фразе WHEN является истинным или эта фраза отсутствует, до (BEFORE) или после (AFTER) выполнения операции INSERT, UPDATE или DELETE над таблицей, отмеченной после слова ON, будут выполнены указанные ниже операторы SQL. Когда таких операторов несколько, их следует поместить между ключевыми словами BEGIN ATIMIC и END. Конструкция второй строки определения триггера называется предложением инициации, WHEN – условием инициации, а <операторы SQL> - действием триггера.
Рассмотрим примеры применения триггеров.
После удаления информации о кафедре удалить информацию обо всех преподавателях кафедры.
CREATE TRIGGER Кафедра_Удаление
AFTER DELETE ON Кафедра
DELETE FROM Преподаватель
WHERE Преподаватель.#D = Преподаватель.#D
Момент_срабатывания определяет, когда будет срабатывать триггер: до (BEFORE) или после (AFTER) наступления события триггера (выполнение запускающего оператора). Если указанное значение BEFORE, триггер запускается до каких-либо проверок строк, которые затрагиваются тригерным событием. Никакие строки не блокируются. Триггер этого типа называется, соответственно, BEFORE-триггером (BEFORE trigger). Если выбрать ключевое слово AFTER, то триггер будет срабатывать после того, как запускающий оператор завершит свою работу и будут выполнены проверки всех ограничений. Строки, что в этом случае затрагиваются, блокируются на время выполнения триггера. Триггер этого типа называется AFTER-триггером (AFTER trigger).
Тригерное_событие может принимать значение INSERT, UPDATE или DELETE.
Тригерное_ограничение — это одно из дополнительных условий, которое должно быть выполнено для срабатывания триггера.
Необязательный набор ключевых слов FOR EACH ROW указывает на необходимость выполнить тело триггера для каждой строки, что задевает оператор запуска. Такие триггеры называются строчными (row triggers). Если опция FOR EACH ROW отсутствует, то при наступлении события триггера триггер выполняется только один раз. В этом случае он называется операторным триггером (statement trigger), поскольку выполняется только один раз для каждого запускающего оператора.
Различные события триггеров можно комбинировать при помощи оператора OR. Например:
DELETE OR INSERT другие_операторы
В случае использования UPDATE можно указать список столбцов:
UPDATE OR столбец_1, столбец_2...
Для триггеров, как и для представлений, не существует команды модификации. Старый триггер просто заменяется новым посредством команды CREATE OR REPLACE TRIGGER.
Триггер можно удалить, выдав команду со следующим синтаксисом:
DROP TRIGGER имя_триггера;
Существующие триггеры можно деактивировать и повторно активировать, используя команды с таким синтаксисом:
ALTER TRIGGER имя_триггера DISABLE;
ALTER TRIGGER имя_триггера ENABLE;