Качановский Дмитрий wrote:

кстати, DED, давно хотел спросить, если я все правильно путаю, ты когда то утверждал, что "триггеры - это зло" (ну, естественно, в разумных пределах), не мог бы ты аргументировать???

Триггер как таковой - не зло, а очинно полезное штуко для поддержания атрибутной целостности, в смысле соответствия данных, а не только ссылок, в разных таблицах. Особенно в плане склероза кодеров. Однако, код в триггере, а, точнее, логика, распределённая по триггерным цепочкам, может стать злом. Когда образуются длинные цепочки, а порой контура, становится трудно обозреть и осознать к чему приведёт твой, алгоритмиста и кодера, следующий шаг. Посему имею такое имхо - в триггерах должно быть минимум кода, логика должна быть сосредоточена в процедурах. Которые уже могут вызываться в том числе и из триггеров, если из приложения по каким-то причинам неудобно или боязно забыть, что вот это можно, скажем, апдейтить, только процедурой, а не впрямую. С этим проявлением склероза, впрочем, можно бороться параметрически - процедура при апдейте, кроме обновляемых содержательных атрибутов, взводит поле-флаг, который проверяет before-триггер и шлёт в сад, если оно не взведено, то есть, апдейт по склерозу идёт мимо процедуры, и сбрасывает его перед окончательной записью если установлено. И тело триггеров должно быть параметрически отключаемым аналогичным механизмом, в целях ремонтно-хирургических ручных работ на какой-то группе записей, не деактивируя триггеры и не гоняя пользователей, мучающих другие записи в той же таблице.

--
Regards. Ded.

Ответить