7 подписчиков
· 02.09.2025Вопрос
Какие реальные примеры использования триггеров можно привести студентам, изучающим SQL? Сможете привести примеры из практики, когда вам потребовалось их создавать? В каких СУБД?
13 комментов
· 03.09.2025
Например система с высокой гарантией. То есть когда есть потребность достоверно хранить изменения в БД - например настойчивое требование СБ. Делать это удобнее - делаеш триггер на операции с сбрасыванием инфо в таблицу операций. Это не мешает реализации бизнес-логики, и ведется в двух местах (что СБ нравится очень сильно)
0
ответить
коммент удалён
· 03.09.2025
Спасибо за такой пример!)
0
ответить
ответ удалён
· 03.09.2025
Триггеры - это логика, а логика в БД - это зло. Зона ответственности БД - хранение данных. Она должна быть плоской: читаем, пишем - всё. Остальное живёт в сервисах, которые так нуждаются в этой логике над данными. Единственное допустимое применение триггеров в БД - это какие-то служебные процедуры для самообслуживания её, не связанной с обработкой данных или конкретной таблицы (что-нибудь на подобии кастомного автовакуума, или автоочистки пользователей БД по времени), но сейчас во многих СУБД такое из коробки доступно, поэтому придумать конкретный пример трудновато.
0
ответить
коммент удалён
· 03.09.2025
Не совсем так. Просто такой подход популярен из-за отсутствия хороших специалистов в базах данных.
0
ответить
ответ удалён
· 03.09.2025
Это моё мнение) Впрочем базистов действительно немного.
0
ответить
ответ удалён
· 03.09.2025
А теперь посмотри - или получить SQL распарсить выполнить запрос собрать ответ и вернуть назад по сети. И так несколько раз. Или выполнить все внутри БД. Хотя бизнес логику действительно так лучше не делать, отладка отсутвие юнит тестов и т д. А вот сервисные однотипные операции или общие крупные куски - лучше через хранимки и триггеры.
0
ответить
ответ удалён
· 03.09.2025
Не переубедили всё равно. Думаю каждый останется при своём.
По мне так нюансов всё равно множество: объём обрабатываемых данных, срочность операций, сложность логики, и другие. Да, мы получим "коробку, в которой что-то происходит быстрее". Имхо, я трижды подумаю, прежде чем туда пихать что-то подобное. Перемиграция на другую СУБД уже осложняется тем, что в нашей не только данные, но и где-то какая-то логика, которую тоже нужно не забыть перенести. Какие-либо изменения могут потребовать изменения в этих хранимках, а забыть о них там очень легко, особенно при изменении штата команды. Стоит только потерять эту экспертизу и потом концов не сыщещь.
0
ответить
ответ удалён
· 03.09.2025
Я же сказал обычно в такие сложности не лезут. Навешал редис и ура. Ну или сдал заказчику систему взял новую на новых технологиях.
0
ответить
ответ удалён
· 03.09.2025
А если представить задачу, когда оператор в CRM вводит ИНН и нужна проверка контрольной суммы. Доступа к исходному коду CRM у нас нет, а в штате есть опытный разработчик с компетенциями по базам данных. В таком случае можно воспользоваться триггером? Или лучше другой инструмент на стороне БД?
0
ответить
ответ удалён
· 03.09.2025
Для проверки ИНН лучше воспользоваться другим методом. А вот выполнить валидациб данных при записи можно, и даже нужно. Но для этого есть констрайны с регексп. Хотя если там сложное - например зависимости полей и прочие условия - это лучше на триггере. Просто регексп плохо читаем и не сильно универсальный.
0
ответить
ответ удалён
· 03.09.2025
Ни разу рабочих триггеров не встречал. Все их избегают.
0
ответить
коммент удалён
· 03.09.2025
Благодарю за ответ!
0
ответить
ответ удалён
· 16.02
Триггер на изменение строки.
Было подобное у аналитиков.
Надо было в часто обновляемой таблице, выяснить самое первое значение и историю изменения значений. Естественно timestamp колонки нет. Пришлось писать функцию и триггер. По обновлению строки и фиксации истории изменений в отдельной таблице.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён