Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / О правильном использовании триггеров / 10 сообщений из 10, страница 1 из 1
16.11.2020, 06:23
    #40018644
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
Было много написано о вреде триггеров.

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

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

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

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

А к таблицам остаётся нефильтрованый доступ если надо.
...
Рейтинг: 0 / 0
16.11.2020, 07:46
    #40018650
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
...
Рейтинг: 0 / 0
16.11.2020, 08:02
    #40018652
oragraf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
Яндекс-Дзен?
...
Рейтинг: 0 / 0
16.11.2020, 08:30
    #40018654
Amberit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
НеофитSQL,

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

Медленные - да. За все нужно платить.
Плохо понятные зависимости - compound + минимум логики, которую нецелесообразно менять на использование по другому подходу.
Дедлоки - навскидку не вспомню ситуаций, когда дедлок был вызван триггером. Если дедлок происходит - то он произойдет и в том случае, если код триггера вынести в отдельную процедуру. И напрямую это зависит от предыдущего пункта.
...
Рейтинг: 0 / 0
16.11.2020, 09:47
    #40018666
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
НеофитSQL,

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

.....
stax
...
Рейтинг: 0 / 0
16.11.2020, 09:57
    #40018671
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
Stax,

И goto в триггерах, как особый цинизм.
...
Рейтинг: 0 / 0
16.11.2020, 18:28
    #40019035
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
Amberit
НеофитSQL,

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

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


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

> общие операции с данными таблицы
А какой был бы хороший и нередкий пример здесь - проверка данных? Обновление статистики?
...
Рейтинг: 0 / 0
19.11.2020, 16:06
    #40020458
Amberit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
авторА какой был бы хороший и нередкий пример здесь - проверка данных? Обновление статистики?
Проверка данных - да, с учетом того факта, что преимущественно используются констрейнты, а потом уже триггера.
Обновление статистики - точно нет. Для этих целей используются материализованные представления или самописные велосипеды.
...
Рейтинг: 0 / 0
19.11.2020, 16:28
    #40020470
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
Есть legacy системы, где без триггеров или фиг что сделаешь, или сделаешь значительно с большими затратами

AFAIK
...
Рейтинг: 0 / 0
19.11.2020, 16:42
    #40020477
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
О правильном использовании триггеров
Механизм identity в оракле появился не так давно. До этого автогенерацию ключа делали через триггер.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / О правильном использовании триггеров / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]