
- •Введение. Структура предмета. Основные понятия
- •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. Модели серверов баз данных
Другие аспекты использования триггеров
Пространство имен триггеров отличается от пространств имен других подпрограмм. Пространством имен (namespace) называется набор идентификаторов, разрешенных для применения как имена объектов. Для процедур, модулей и таблиц применяется одно и то же пространство имен. Это означает, что в пределах одной схемы базы данных все объекты, что используют одно и то же пространство имен, должны иметь уникальные имена. Например, запрещается давать одинаковые имена процедуре и модулю.
Для триггеров же определенное собственное пространство имен, то есть триггер может иметь то же имя, что и какая-либо таблица или процедура. Однако в пределах одной схемы конкретное имя может быть дано только одному триггеру. Например, для таблицы major_stats можно создать триггер major_stats, но процедуру с именем major_stats создать нельзя.
Совет. Хотя не запрещается применять для таблицы и триггера одинаковые имена, делать это не рекомендуется. Лучше дать каждому триггеру уникальное имя, что показывает, какие функции он выполняет или для какой таблицы он создан.
Рассмотрим примеры.
Пример 5.2 После добавления или обновления строки в таблице КАФЕДРА установить значение поля Фонд в таблице Факультет равным сумме фондов всех кафедр соответствующего факультета.
CREATE TRIGGER Факультет_Фонд
AFTER INSERT OR UPDATE ON Кафедра
BEGIN
UPDATE Факультет
SET Фонд = SELECT SUM(Фонд)
FROM Кафедра
WHERE Кафедра.#F = Кафедра.NEW.#F AND
Факультет.#F = Кафедра.NEW.#F
END
Действия, которые выполняются во время основной операции и в триггере, составляют единую транзакцию.
Перед выполнением добавления, обновления и удаления неявно инициируется команда BEGIN TRANSACTION.
Реализуется операция добавления/ обновление/ удаление.
Инициируется и выполняется триггер.
Триггер отменяет транзакцию или за умалчиванием его действие завершается.
Пример 5.3 Позволить добавление строки со сведениями о кафедре лишь в том случае, когда существует строка с данными о факультете, которому принадлежит кафедра.
CREATE TRIGGER Кафедра_Прибавление
BEFORE INSERT ON Кафедра
WHEN TO EXISTS (SELECT * FROM Факультет WHERE Факультет.#F = Кафедра.#F)
BEGIN
ROLLBACK TRANSACTION
END
Триггеры бывают вложенными. Это означает, что манипулирование рядком одной таблицы может инициировать триггер, который манипулирует строками другой таблицы. В свою очередь, манипулирование строками второй таблицы может инициировать триггер, что манипулирует строками третьей таблицы и тому подобное. Вложенность триггеров может привести к «зацикливанию». Поэтому вложенность триггеров должна быть ограничена.
3. Хранимые процедуры
Хранимые процедуры – это объекты базы данных, которые обычно содержат большое количество директив SQL. Такие процедуры могут содержать совокупность команд (сложных запросов, операций обновления, добавления и удаления), которые часто используются как единственное целое. Хранимая процедура дает возможность обратиться к ней как к функции, вместо того, чтоб последовательно записывать команды SQL, которые она содержит. Значительное снижение нагрузки на каналы связи во время работы пользователей с сервером тоже является важным преимуществом хранимых процедур, ведь вместо отдельных многократных обращений к базе данных выполняется единственное обращение к хранимой процедуре.
Хранимая процедура может выполнять SQL-операторы и манипулировать данными в таблицах. Ее можно вызывать с другой процедуры, что сохраняется, функции, что сохраняется, или триггера, а также непосредственно из строки приглашения.
Процедура состоит из двух основных частей: спецификации и тела. Спецификация процедуры (procedure specification) включает имя процедуры и описание ее входных и исходных данных. Эти входные и исходные данные называются формальными параметрами (formal parameters) или формальными аргументами (formal arguments). Если при вызове процедуры указываются параметры командной строки или другие входные данные, эти значения называются фактическими (actual) параметрами или фактическими аргументами.
Теперь рассмотрим некоторые примеры спецификаций процедур. (Помните, что спецификация не содержит никакого кода; в ней определяется только имя процедуры, а также ее входные и исходные параметры.)
rtm_ytd_reports
Эта простая спецификация содержит только имя процедуры. Данная процедура не имеет параметров.
\’ •.., -... increase_prices (percent_increase NUMBER)
Этой процедуре при вызове может быть передано значение. Внутри процедуры значение будет известно под именем PERCENT_INCREASE. Обратите внимание, что здесь указанный тип данных: NUMBER.
\ ‘ increase_salary_find_tax (increase_percent IN NUMBER := 7
sal IN OUT NUMBER
tax OUT NUMBER
)
Здесь мы видим процедуру с тремя формальными параметрами. Слово IN после имени параметра означает, что при вызове процедура может считать из этого параметра входное значение. Слово OUT означает, что процедура может использовать данный параметр для возвращения значения в ту программу, из которой она была вызвана. Комбинация IN OUT после имени параметра говорит о том, что параметр может использоваться как для передачи значения процедуре, так и для возвращения значения.
Параметру INCREASE_PERCENT в этом примере присвоенное значение по умолчанию (default value), равное 7, путем добавления := 7 после типа данных. Таким образом, если процедура будет вызвана без указания процента прироста, она увеличит переданное значение зарплаты на 7% и рассчитает налог, исходя из новой зарплаты.
Типы данных в процедуре не могут иметь спецификаций размера. Например, вы можете указать для параметра тип данных NUMBER, а не NUMBER(10,2).