ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Методичка
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 2654
Скачиваний: 8
41
3.
Каждый раз, когда к таблице assignment добавляется новая строка, или
же существующая строка обновляется, мы хотим обновлять и поле
comulative_pay для соответствующего работника.
Реализация:
Create trigger update_assignment
on assignment
for insert, update, deleted
as
update worker
set comulative_pay = comulative_pay+ 8 *
hrly_rate*
(select sum (num_days) from inserted
where inserted. Worker_id = worker. worker_id)
update worker
set comulative_pay = comulative_pay-8 * hrly_rate*
(select sum (num_days) from deleted
where deleted.worker_id = worker. worker_id)
Разберем этот триггер:
1.
Первая строка дает имя триггеру update_assignment/
2.
Вторая означает, что он применяется к таблице assignment.
3.
Третья – триггер будет запускаться от каждой операции – ввода, об-
новления или удаления.
4.
Строка с AS открывает программную часть триггера (все, что следует
далее выполняется системой при запуске триггера).
5.
Программная часть состоит из двух команд обновления, каждая из ко-
торых применяется к таблице WORKER;
-
первая команда прибавляет к значению столбца comulative_pay значе-
ние, вычисленное по таблице inserted;
-
вторая вычитает значение, вычисленное по таблице deleted.
Эти две команды заставляют систему проходить таблицу worker дважды
-
первая команда update рассматривает строки, которые были добавле-
ны к таблице assignment;
Если к-п строки были добавлены (т.е. вводились данные) атрибут
num_days добавленных кортежей учитывается в соответствие кортеже табли-
це worker.
7.3.
Описание
с
помощью
SQL
CREATE SHEMA PREMIER
AUTORIZATION JON {имя владельца не обязательно}
CREATE TABLE WORKER(
WORKER_ID ITEM_IDENTIFIER PRIMARY’ KEY,
WORKER_NAME CHARACTER (12),
42
HRLY_RATE NUMERIC (5,2), (_ _ _ _ _)
SKILL_TYPE CHARACTER (8),
SUPV_ID NUMERIC (4),
FOREIGN KEY SUPV_ID REFERENCES WORKER
CREATE TABLE …..
ON
DELETE
SET
NULL)
…………
Означает (если кортеж, на который указывает внешний ключ, удаляется,
то значение внешнего ключа, должно быть пустым).
То есть рекурсивные или внешние ключи существуют для поддержания
целостности данных (то есть, чтобы не было ситуации, когда осуществляется
связь с несуществующими данными).