Использование Trigger для поддержания ссылочной целостности - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь написать триггер SQL для любой вставки в отношении Section, и он должен убедиться, что вставляемое значение идентификатора временного интервала является действительным.

Sectionотношение

Заранее спасибо!

1 Ответ

0 голосов
/ 11 декабря 2018

Давайте начнем с утверждения, что использование триггеров для обеспечения целостности отношений вместо ограничений внешнего ключа является наихудшей практикой.Триггеры RI медленны, они плохо масштабируются, они не работают в многопользовательских средах, они провоцируют ненужные царапины на голове у бедняжек, которым приходится поддерживать код.

Итак, этокак должен выглядеть функционирующий наихудший триггер:

create or replace trigger section_timeslot_trg 
before insert or update on section
for each row
declare
    l_id timeslot.timeslot_id%type;
begin
    select ts.timeslot_id
    into l_id
    from timeslot ts
    where ts.timeslot_id = :new.timeslot_id;
exception
    when no_data_found then
        raise_application_error(-20999, 'Not a valid TIMESLOT_ID: '||:new.timeslot_id);
end;

Помните, что в отсутствие ограничения внешнего ключа должен быть обратный триггер для TIMESLOT, чтобы предотвратить обновления и удаления TIMESLOT_ID, которые используются вРАЗДЕЛ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...