Как создаются триггеры ERwin
ERwin создает RI-триггеры автоматически. Когда Вы строите свою модель данных, ERwin автоматически связывает шаблон RI-триггера, устанавливаемого по умолчанию, с каждой сущностью связи. На то, какой именно шаблон триггера будет присвоен связи и на генерируемый им код SQL влияют три критерия:
· Правило ссылочной целостности, которое он применяет к связи (RESTRICT, CASCADE, SET NULL, SET DEFAULT, NONE).
· Тип связи, с которым он связан (идентифицирующая или неидентифицирующая).
· Роль сущности в связи (родительская или дочерняя).
Правила ссылочной целостности
Когда триггер связывается с сущностью, он автоматически устанавливается так, чтобы усиливать одно из следующих правил ссылочной целостности, в зависимости от типа связи и роли сущности в этой связи.
Правило ссылочной целостности | Что оно делает |
RESTRICT | Запрещает СУБД производить требуемое изменение (INSERT, UPDATE или DELETE). |
CASCADE | Производит требуемое изменение в первой таблице и распространяет его на связанные с ней таблицы. |
SET NULL | Производит требуемое изменение в первой таблице и устанавливает нулевые (пустые) значения внешнего ключа в связанных с ней таблицах. |
SET DEFAULT | Работает. как SET NULL, с той разницей, что вместо нулевого значения присваивает внешним ключам значение по умолчанию. |
NONE | Ничего не делает (ERwin не усиливает ссылочную целостность). |
ERwin создает RI-тригеры автоматически, связывая шаблоны триггеров со всеми связями. Вы можете переопределить код SQL, генерируемый ERwin, адаптируя эти шаблоны для своей ситуации. См. в этой главе разд. 'Изменение режима RI-триггера для связи' и 'Переопределение RI-триггеров, устанавливаемых по умолчанию' об изменении поведения триггеров, устанавливаемых по умолчанию.
RI-триггеры и типы связей
Шаблоны RI-триггеров в ERwin связываются с сущностями, исходя из типа связи и роли сущности в этой связи. Тип связи и роль сущности определяют, какое правило ссылочной целостности будет, по умолчанию, усилено присвоенным шаблоном триггера. Тип связи может быть: идентифицирующая, неидентифицирующая (nulls allowed), неидентифицирующая (no nulls), связь подтипа.
Роль сущности в связи может быть - родительская (Parent) или дочерняя (Child) сущность. Если сущность является родительской в данной связи, то ERwin присваивает ей шаблон триггера для родительской сущности. Если сущность является дочерней в данной связи, то ERwin присваивает ей шаблон триггера для дочерней сущности. Код триггера, который генерируется шаблоном триггера для родительской сущности, указывает СУБД, что нужно делать при вставке, изменении или удалении строки в родительской таблице связи. Код триггера, который генерируется шаблоном триггера для дочерней сущности, указывает СУБД, что нужно делать при вставке, изменении или удалении строки в дочерней таблице связи.
Ниже приводится таблица, в которой описано, как ERwin присваивает связи правила ссылочной целостности. Например, по умолчанию для триггера Parent Delete для идентифицирующей связи устанавливается правило RESTRICT. Это правило указывает СУБД, что нужно запретить требуемое изменение данных.
Роль сущности | Тип связи | |||
Шаблон RI-триггера | Идентифици-рующая связь | Неидентифи-цирующая (nulls allowed) | Неидентифи-цирующая (no nulls) | Cвязь подтипа |
Child Delete | None | None | None | None |
Child Insert | Restrict | Set Null | Restrict | Restrict |
Child Update | Restrict | Set Null | Restrict | Cascade |
Parent Delete | Restrict | Set Null | Restrict | Cascade |
Parent Insert | None | None | None | None |
Parent Update | Restrict | Set Null | Restrict | Cascade |
С одной сущностью можно связать до шести шаблонов RI-триггеров, в зависимости от ее роли в разных связях. Если сущность является в какой-то связи родительской, то с ней можно связать триггеры parent insert, update и delete. Если сущность является в какой-то связи дочерней, то с ней можно связать триггеры сhild insert, update и delete.