Файл: Базы данных САПР_УП.pdf

Добавлен: 28.11.2018

Просмотров: 2654

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

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), 


background image

 

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) 

………… 
Означает (если кортеж, на который указывает внешний ключ, удаляется, 

то значение внешнего ключа, должно быть пустым). 

То есть рекурсивные или внешние ключи существуют для поддержания 

целостности данных  (то есть, чтобы не было ситуации, когда осуществляется 
связь с несуществующими данными).