Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 О правильном использовании триггеров  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Было много написано о вреде триггеров.

Медленные, плохо понятные зависимости, дедлоки, и т.д.

Вместо триггеров часто рекомендуют написать API на таком же pl/sql, который будет делать то же самое, только теперь к таблицам надо доступаться через API а не через операции SQL. И версий этих API может быть много:
InsertRowAndUpdateTotals()
InsertRowAndUpdateTotalsEx()
InsertTwoRowsAndUpdateTotals()
....и часто без документации.

Как наши умудрённые опытом форумчане относятся к использованию триггеров в своих проектах?
Избегают любой ценой как клятого goto, или выработали правила их разумного применения?

Я заметил в своем проекте триггеры стоят не на таблицах, а только на некоторых представлениях. Не знаю, популярный ли это прием, но он устраняет или по крайней мере ослабляет многие доводы против использования триггеров.
Такое представление становится объектом-интерфейсом, который поддерживает стандартные методы sql и реализует малую толику бизнес логики.

А к таблицам остаётся нефильтрованый доступ если надо.
16 ноя 20, 06:23    [22232571]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
Кобанчег
Member

Откуда: Рахів
Сообщений: 841
НеофитSQL,

Реализуете ли вы бизнес-логику в триггерах?
16 ноя 20, 07:46    [22232584]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
oragraf
Member

Откуда: Moscow
Сообщений: 1317
Яндекс-Дзен?
16 ноя 20, 08:02    [22232587]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
Amberit
Member

Откуда: Киев
Сообщений: 765
НеофитSQL,

Триггеры необходимо использовать разумно и там, где без них не обойтись.
Навскидку, это операции логгирования изменений, общие операции с данными таблицы, которые могут меняться со 100500 процедур/интерфейсов, отправка сообщений в очередь и т.д.

Медленные - да. За все нужно платить.
Плохо понятные зависимости - compound + минимум логики, которую нецелесообразно менять на использование по другому подходу.
Дедлоки - навскидку не вспомню ситуаций, когда дедлок был вызван триггером. Если дедлок происходит - то он произойдет и в том случае, если код триггера вынести в отдельную процедуру. И напрямую это зависит от предыдущего пункта.
16 ноя 20, 08:30    [22232592]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2798
НеофитSQL,

я за использование триггеров (как и goto)

.....
stax
16 ноя 20, 09:47    [22232624]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Stax,

И goto в триггерах, как особый цинизм.
16 ноя 20, 09:57    [22232630]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Amberit
НеофитSQL,

Триггеры необходимо использовать разумно и там, где без них не обойтись.
Навскидку, это операции логгирования изменений, общие операции с данными таблицы, которые могут меняться со 100500 процедур/интерфейсов, отправка сообщений в очередь и т.д.

Медленные - да. За все нужно платить.
Плохо понятные зависимости - compound + минимум логики, которую нецелесообразно менять на использование по другому подходу.
Дедлоки - навскидку не вспомню ситуаций, когда дедлок был вызван триггером. Если дедлок происходит - то он произойдет и в том случае, если код триггера вынести в отдельную процедуру. И напрямую это зависит от предыдущего пункта.


С логгированием и отправкой сообщений в очередь понятно - видел такое в работе, и это действия которые должны осуществляться за короткое предсказуеморе время (хорошее общее правило для кода в триггерах, как и для кода прерываний: минимум задержек, нежелательность ожиданий на общих ресурсах).

> общие операции с данными таблицы
А какой был бы хороший и нередкий пример здесь - проверка данных? Обновление статистики?
16 ноя 20, 18:28    [22233211]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
Amberit
Member

Откуда: Киев
Сообщений: 765
автор
А какой был бы хороший и нередкий пример здесь - проверка данных? Обновление статистики?

Проверка данных - да, с учетом того факта, что преимущественно используются констрейнты, а потом уже триггера.
Обновление статистики - точно нет. Для этих целей используются материализованные представления или самописные велосипеды.
19 ноя 20, 16:06    [22235483]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 9278
Есть legacy системы, где без триггеров или фиг что сделаешь, или сделаешь значительно с большими затратами

AFAIK
19 ноя 20, 16:28    [22235504]     Ответить | Цитировать Сообщить модератору
 Re: О правильном использовании триггеров  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6749
Механизм identity в оракле появился не так давно. До этого автогенерацию ключа делали через триггер.
19 ноя 20, 16:42    [22235512]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить