Руководство по программному пакету ERwin

         

Как создать шаблон Relationship Override Trigger


1. Щелкните по линии связи, для которой Вы хотите создать новый триггер, нажмите правую кнопку мыши для входа в pop-up меню Editor и дайте команду 'Relationship Template' для входа в редактор Relationship Trigger Template.

2. Выберите шаблон, который Вы хотите изменить, из списка 'Built-in Trigger Template', так что код шаблона для этого триггера появится в окне Template Code.

3. Измените исходное имя 'Template Name' на 'говорящее' имя Вашего шаблона, например - 'Outstanding Orders'.

4. Откройте окно Template Code и измените код шаблона так, чтобы он удовлетворял Вашим требованиям. Например, Вы можете добавить в шаблон новый код, который будет автоматически изменять значение в строке вместо того, чтобы удалять эту строку. Вы можете использовать макрокоманды из Trigger Toolbox, чтобы ускорить процесс написания кодов, и просмотреть расширенный код в окне Expanded Code.

5. Закончив редактирование кода, нажмите кнопку 'Add', чтобы добавить Ваш шаблон в список 'User Override'.

6. Чтобы присвоить новый шаблон в качестве переопределяющего, выделите Ваш шаблон, а также встроенный шаблон, который Вы хотите переопределить, а затем нажмите кнопку 'Attach', расположенную над списком 'User Override'. ERwin заменяет встроенный шаблон новым и показывает тип триггера и связанный с ним новый шаблон в списке, расположенном наверху в редакторе Trigger Template.

7. Нажмите кнопку 'Close' для выхода из редактора в диаграмму.

8. Чтобы ERwin начал использовать шаблоны RI Type Override вместо встроенных, включите режим 'Relationship Override' в редакторе Schema Generation Report, когда Вы будете генерировать физическую схему базы данных.

Ниже приводится часть кода шаблона Relationship Override для триггера Parent-Delete RESTRICT (вверху), расширенный код (в центре) и завершенный шаблон триггера (внизу).

/* ERwin Built-in %Datetime */
/* %Parent %VerbPhrase %Child ON PARENT DELETE RESTRICT */
update %Parent
set order_status='outstanding'
from %Parent, deleted, %Child
where
/* %%JoinPKPK(%Parent, deleted) */


%JoinPKPK(%Parent,deleted) and
/*%%JoinFKPK(%Child,deleted) */
%JoinFKPK(%Child,deleted)

/* ERwin Built-in Mon Apr 5 07:52:30 1993 */
/* ORDER contains ORDER_LINE ON PARENT DELETE RESTRICT */
update ORDER
set order_status='outstanding'
from ORDER,deleted,ORDER_LINE
where
/*%JoinPKPK(ORDER,deleted) */
ORDER.order_id = deleted.order_id and
/*JoinFKPK(ORDER_LINE,deleted) */
ORDER_LINE.order_id = deleted.order_id

create trigger tD_ORDER on ORDER for DELETE as
/* ERwin Builtin Mon Apr 5 07:49:49 1993 */
/* DELETE trigger on ORDER */
begin
declare @errno int,
@errmsg varchar(255)
/* ERwin Builtin Mon Apr 5 07:49:49 1993 */
/* ORDER contains ORDER_LINE ON PARENT DELETE RESTRICT */
update ORDER
set order_status='outstanding'
from ORDER,deleted,ORDER_LINE
where
/*%JoinPKPK(ORDER,deleted) */
ORDER.order_id = deleted.order_id and
/* JoinFKPK(ORDER_LINE,deleted) */
ORDER_LINE.order_id = deleted.order_id
/* ERwin Builtin Mon Apr 5 07:49:49 1993 */
return
error:
raiserror @errno @errmsg
rollback transaction
end
go

Рис. 16.13. Код шаблона для Relationship Override для связи ORDER-ORDER_LINE, использующего триггер Parent-Delete RESTRICT.



Создание триггера Entity Override



Во многих случаях бывает нужно, чтобы триггер выполнял действия. выходящие за рамки стандартных действий по усилению правил RI, например, производил вычисления, работал с колонкой, содержащей выведенные значения, или изменял содержимое колонки, исходя из текущего значения этой колонки. Эти триггеры расширенных правил business rule можно применить к связи или к сущности.

Если Вы хотите усилить каие-то правила для отдельных сущностей, ERwin позволяет Вам изменить поведение встроенного триггера для отдельной сущности. Шаблон Entity Override используется для изменения поведения встроенного шаблона по отношению только к одной сущности.

Предположим, например, что Вы хотите, чтобы ERwin каждый раз при добавлении новой строки в таблицу ORDER LINE добавлял количество заказанного товара order-quantity из таблицы ORDER LINE к количеству проданного товара product-sold-quantity в таблице PRODUCT.Этого можно добиться, создав триггер Entity Override для сущности ORDER LINE, который изменяет действия, выполняемые встроенным шаблоном Child-Insert RESTRICT.



Entity Override изменяет поведение триггера для какой-то одной сущности.


Содержание раздела