- •История развития бд. Сравнить между собой этапы(файлы и файловые системы, бд на больших эвм, эпоха персональных компьютеров, распределенные базы данных)
- •Файлы и файловые системы
- •I Этап — бд на больших эвм.
- •II этап —эпоха пк.
- •III этап: распределённые базы данных.
- •IV этап. Перспектива развития субд.
- •Архитектура базы данных. Физическая и логическая независимость (трехуровневая модель ansi).
- •Архитектура бд
- •Описать процесс прохождения пользовательского запроса
- •Пользователи баз данных. Основные функции группы администратора бд
- •Перечислить классы субд. Какие возможности обеспечивает использование профессиональных субд. Модели данных в субд
- •Этапы разработки аис.
- •Режимы работы с базой данных.
- •Архитектура клиент-сервер: структура типового интерактивного приложения
- •Модель fs;
- •Модель rda(удалённого доступа к данным)
- •Модель сервера баз данных
- •Модель сервера приложений
- •Классификация моделей данных (описать и прокомментировать все уровни).
- •Иерархическая модель данных. Язык описания данных иерархической модели. Внешние модели.
- •Язык манипулирования данными в иерархических базах данных. Операторы поиска данных. Операторы поиска данных с возможностью модификации. Операторы модификации данных. Операторы поиска данных.
- •Операторы поиска данных с возможностью модификации.
- •Сетевая модель данных. Язык описания данных в сетевой модели.
- •Разделы яод
- •Язык манипулирования данными в сетевой модели.
- •Реляционная алгебра. Теоретико-множественные операции реляционной алгебры. Основные операции (объединение, пересечение, разность, конкатенация кортежей, произведение)
- •Реляционная алгебра. Теоретико-множественные операции реляционной алгебры. Специальные операции (выборка, проекция, соединение, деление).
- •Язык sql. История развития sql. Структура sql. Типы данных.
- •Структура sql
- •Операторы описания данных (ddl).
- •Операторы манипулирования данными (dml)
- •Язык запросов dql. Оператор выбора select.
- •Выборка из одной таблицы
- •Предикаты раздела where
- •Null-значения. Трехзначная логика
- •Агрегатные функции в операторе выбора
- •Вложенные запросы.
- •Проектирование реляционных бд на основе принципов нормализации
- •Этапы жизненного цикла бд. Этапы проектирования бд
- •Системный анализ предметной области (два подхода к выбору состава и структуры предметной области)
- •Инфологическое моделирование. Er - модель (базовые понятия сущность, связь, типы связей: 1:1, 1:n, n:n, обязательная/необязательная).
- •Переход к реляционной модели данных (правила преобразования er-модели в реляционную).
- •Даталогическое проектирование. Перечень результирующих документов, корректная схема бд. Два пути проектирование схемы бд.
- •Последовательность нормальных форм. Их свойства. Первая нормальная форма (1нф), вторая нормальная форма (2нф),
- •Первая нормальная форма
- •Вторая нормальная форма
- •Третья нормальная форма (3нф), нормальная форма Бойса-Кодда (бк нф), Третья нормальная форма
- •Нормальная форма Бойса-Кодда
- •Четвертая нормальная форма (4нф), пятая нормальная форма (5нф) Четвертая нормальная форма
- •Пятая нормальная форма
- •Сурбд Oracle. Конфигурации Oracle. Типы пользователей. Основные обязанности dba.
- •Типы пользователей
- •Архитектура Oracle (физический и логический уровень)
- •Субд Oracle. Табличные пространства. Сегменты, экстенты и блоки данных.
- •Экземпляр Oracle. Sga, pga
- •Процессы. 7 основных фоновых процессов Oracle
- •Объекты бд Oracle. Создание таблиц. Типы данных
- •Субд Oracle. Создание индексов.
- •Субд Oracle. Создание представлений
- •Субд Oracle. Создание последовательностей
- •Техническая часть
- •Субд Oracle. Определенные пользователем типы данных. Создание синонимов
- •Субд Oracle. Создание ограничений
- •Субд Oracle. Создание табличных пространств
- •Основные понятия и конструкции pl/sql. Архитектура pl/sql
- •Поддерживаемый набор символов pl/sql. Арифметические операторы и операторы отношения Набор символов pl/sql
- •Структура программы и переменные pl/sql
- •[Править] Типы данных
- •Операторы управления
- •Pl/sql. Условные операторы if
- •Pl/sql. Циклы
- •Pl/sql. Курсоры
- •Pl/sql. Хранимые процедуры
- •Pl/sql. Функции
- •Pl/sql. Триггеры
-
Pl/sql. Триггеры
Думаю, самое время заняться еще одним типом именованных блоков PL/SQL, а именно триггеры таблиц БД. Сам по себе триггер БД, является именованным блоком PL/SQL и после компиляции хранится, в соответствующих словарях данных вашей БД. Но он имеет ряд особенностей. Процедуры или функции, которые мы с вами уже разбирали могут вызывать или быть вызваны другими процедурами, при этом им могут быть переданы параметры. Триггер - не может быть вызван из другой процедуры БД и не принимает никаких параметров при вызове. Само название говорит о том, что этот блок PL/SQL - срабатывает при определенном событии, а именно при запуске операций DML - INSERT, UPDATE, DELETE. Существуют так же так называемые системные триггеры, которые срабатывают на события самой БД. Но о них чуть позже. В основном триггеры используются для:
-
Реализации сложных ограничений целостности данных, которые невозможно осуществить через описательные ограничения, устанавливаемые при создании таблиц.
-
Организации всевозможных видов аудита. Например, слежения за изменениями в какой-либо важной таблице БД.
-
Автоматического оповещения других модулей о том, что делать в случае изменения информации содержащейся в таблице БД.
-
Для реализации так называемых "бизнес правил".
-
Для организации каскадных воздействий на таблицы БД.
В принципе по ходу работы можете придумать еще что-нибудь! Вообще триггеры очень удобная и полезная вещь в БД. Так же триггеры имеют определенные правила активации (firing), а именно:
-
До момента сработки одного из операторов DML - INSERT, UPDATE, DELETE.
-
После момента сработки одного из операторов DML - INSERT, UPDATE, DELETE.
Синтаксис команды для создания триггера, следующий:
--- CREATE [OR REPLACE] TRIGGER имя_триггера ---------------------
--- BEFORE | AFTER активизирующее_событие ON ссылка_на_таблицу ---
--- FOR EACH ROW [WHEN условие_срабатывания] ---------------------
--- тело_триггера ------------------------------------------------
Где:
-
имя_триггера - собственно имя вашего триггера.
-
активизирующее_событие - указывает момент активации триггера BEFORE до срабатывания оператора DML, AFTER после срабатывания оператора DML.
-
ссылка_на_таблицу - собственно таблица, для которой создан триггер.
-
FOR EACH ROW - если указано активируется от воздействия на строку если нет, то после любого оператора DML.
-
условие_срабатывания - если TRUE триггер срабатывает, если FALSE нет.
-
тело_триггера - собственно тело триггера.
Для полноты картины определимся с таким фактом, что триггеры имеют собственное пространство имен (namespace). Что это означает, само понятие namespace - применимо вообще во многих языках программирования. В пределах одного пространства имен не может быть двух функций или процедур с одинаковым именем! Так вот, так как пространство имен у триггеров свое, то может иметь место ситуация, когда какой-либо триггер имеет тоже имя, что и процедура или функция в пределах одной схемы (не путать с пространством имен это разные вещи!). Но двух триггеров с одинаковым именем не бывает! Так же триггер, может иметь имя совпадающее с именем таблицы, для которой он создан. Но лучше этого не делать, а дать триггеру имя указывающее на то, что он производит! Вообще, по моему мнению, такое понятие как имя для триггера по большому счету архаично! Ведь триггер нельзя "позвать" из процедуры или функции - это запрещено! Так нафига ему имя! Можно было сделать что-то вроде универсальной цифровой маркировки. Хотя имя дает триггеру осмысленность, что улучшает чтение кода БД! Теперь давайте посмотрим на типы триггеров и моменты срабатывания и что все это значит. Итак:
Категории |
Значение |
Комментарии |
Оператор |
INSERT, UPDATE, DELETE |
Определяет какой оператор DML вызывает активацию (firing) триггера. |
Момент времени |
BEFORE, AFTER |
Определяет момент активации триггера: до или после выполнения оператора. |
Уровень |
Строка или оператор |
Если триггер является строковым он активируется один раз для каждой из строк, на которую воздействует оператор вызывающий срабатывания триггера (опция FOR EACH ROW). Если триггер является операторным то он активируется один раз до или после оператора. |
Если посмотреть внимательнее, то значения заданные для оператора, момента времени и уровня, определяют тип триггера. Всего получается 12 возможных типов - 3 оператора, 2 момента времени, 2 уровня. Количество триггеров, для отдельной таблицы в принципе не ограничивается в версии Oracle 8i и выше, но делать их слишком много нет смысла. Так же триггер может срабатывать от нескольких операторов DML, если это необходимо. Вот собственно, основная теоретическая часть по триггерам БД. Далее попробуем это на практике.