arrow

назад

ask

Вопрос

Какие реальные примеры использования триггеров можно привести студентам, изучающим SQL? Сможете привести примеры из практики, когда вам потребовалось их создавать? В каких СУБД?

repost

223

input message

напишите коммент


13 комментов

Триггер на изменение строки.

Было подобное у аналитиков.

Надо было в часто обновляемой таблице, выяснить самое первое значение и историю изменения значений. Естественно timestamp колонки нет. Пришлось писать функцию и триггер. По обновлению строки и фиксации истории изменений в отдельной таблице.

0

ответить

Например система с высокой гарантией. То есть когда есть потребность достоверно хранить изменения в БД - например настойчивое требование СБ. Делать это удобнее - делаеш триггер на операции с сбрасыванием инфо в таблицу операций. Это не мешает реализации бизнес-логики, и ведется в двух местах (что СБ нравится очень сильно)

0

ответить

· 03.09.2025

Спасибо за такой пример!)

0

ответить

· 03.09.2025

Триггеры - это логика, а логика в БД - это зло. Зона ответственности БД - хранение данных. Она должна быть плоской: читаем, пишем - всё. Остальное живёт в сервисах, которые так нуждаются в этой логике над данными.   Единственное допустимое применение триггеров в БД - это какие-то служебные процедуры для самообслуживания её, не связанной с обработкой данных или конкретной таблицы (что-нибудь на подобии кастомного автовакуума, или автоочистки пользователей БД по времени), но сейчас во многих СУБД такое из коробки доступно, поэтому придумать конкретный пример трудновато.

0

ответить

Не совсем так. Просто такой подход популярен из-за отсутствия хороших специалистов в базах данных.

0

ответить

· 03.09.2025

Это моё мнение) Впрочем базистов действительно немного.

0

ответить

А теперь посмотри - или получить SQL распарсить выполнить запрос собрать ответ и вернуть назад по сети. И так несколько раз. Или выполнить все внутри БД. Хотя бизнес логику действительно так лучше не делать, отладка отсутвие юнит тестов и т д. А вот сервисные однотипные операции или общие крупные куски - лучше через хранимки и триггеры.

0

ответить

· 03.09.2025

Не переубедили всё равно. Думаю каждый останется при своём.

По мне так нюансов всё равно множество: объём обрабатываемых данных, срочность операций, сложность логики, и другие. Да, мы получим "коробку, в которой что-то происходит быстрее". Имхо, я трижды подумаю, прежде чем туда пихать что-то подобное. Перемиграция на другую СУБД уже осложняется тем, что в нашей не только данные, но и где-то какая-то логика, которую тоже нужно не забыть перенести. Какие-либо изменения могут потребовать изменения в этих хранимках, а забыть о них там очень легко, особенно при изменении штата команды. Стоит только потерять эту экспертизу и потом концов не сыщещь.

0

ответить

Я же сказал обычно в такие сложности не лезут. Навешал редис и ура. Ну или сдал заказчику систему взял новую на новых технологиях.

0

ответить

· 03.09.2025

А если представить задачу, когда оператор в CRM вводит ИНН и нужна проверка контрольной суммы. Доступа к исходному коду CRM у нас нет, а в штате есть опытный разработчик с компетенциями по базам данных. В таком случае можно воспользоваться триггером? Или лучше другой инструмент на стороне БД?

0

ответить

Для проверки ИНН лучше воспользоваться другим методом. А вот выполнить валидациб данных при записи можно, и даже нужно. Но для этого есть констрайны с регексп. Хотя если там сложное - например зависимости полей и прочие условия - это лучше на триггере. Просто регексп плохо читаем и не сильно универсальный.

0

ответить

Ни разу рабочих триггеров не встречал. Все их избегают.

0

ответить

· 03.09.2025

Благодарю за ответ!

0

ответить

еще контент в этом сообществе

пост закреплён — пока закрепить можно только один пост

trash bin
перейти к нему не получится