- Опубликовано
Несколько дней назад мы разбирали, почему...
- Автор
- Имя
- Максим | Системный анализ
- Telegram
- Максим | Системный анализ349 подписчиков82 постаКак войти в IT через системный анализ и получить оффер от 270к+. Опыт Senior аналитика из топ-банков. Разборы, практика, собесы, техника мышления аналитика. Бесплатная консультация - в закрепе.
Кратко
Недавно мы разбирали, почему нельзя использовать триггеры баз данных для бизнес-логики. Но зачем же тогда нужны триггеры и когда их...
Недавно мы разбирали, почему нельзя использовать триггеры баз данных для бизнес-логики. Но зачем же тогда нужны триггеры и когда их использовать?
Типовые случаи применения триггеров:
Автоматический журнал изменений: кто, когда и что поменял в важной таблице
Проверка хитрых условий, которые нельзя задать обычными CHECK или UNIQUE. Например, "нельзя добавить заказ на склад, который закрыт в этот день". Триггер проверит и выдаст ошибку, не дав записать
Автозаполнение/пересчёт. Например, при смене цены триггер сам обновляет сумму в связанном счёте, чтобы данные не расходились
Маскирование/шифрование. Например, при вставке номера паспорта триггер сам превращает его в хеш
Безопасность. Например, запретить удалять таблицы
Какие альтернативы нужно обязательно рассмотреть перед тем, как использовать триггеры:
⚖ Прикладной уровень: валидация и бизнес-логика в коде, перед записью
⚖ Хранимые процедуры
Хранимая процедура - это предварительно скомпилированный набор SQL-операторов и процедурной логики (ветвления, циклы), который хранится на сервере БД и вызывается отдельно, по имени. Она может принимать параметры и возвращать результаты. Дает преимущество в производительности, отладке и безопасности (закрывая прямой доступ к таблицам)⚖ Представления (view) с правилами ⚖ Констрейнты (PK, FK, UNIQUE, CHECK, EXCLUDE): они быстрее, предсказуемее, параллельнее Если без триггера не обойтись: Триггеры должны использоваться строго для контроля целостности данных (например, в кейсе, когда сумма долей не должна превышать 1, или нужна проверка на пересекающиеся интервалы дат) Триггер не должен менять данные, иначе сразу появляются долгие блокировки и deadlock'и Триггер не должен управлять транзакцией: такую логику невозможно отладить Обязательно ведите в документации общий граф вызовов триггеров, чтобы не получить сюрприз на проде под большой нагрузкой
@maximbelovmentor
Максим | Системный анализ
349 подписчиков
82 поста
Как войти в IT через системный анализ и получить оффер от 270к+.
Опыт Senior аналитика из топ-банков.
Разборы, практика, собесы, техника мышления аналитика.
Бесплатная консультация - в закрепе.








