Вопрос по статье "Вы не любите триггеры?"
https://habrahabr.ru/post/310040/
Там приводится пример "легкого" триггера:
update totals
set total = totals.total + current_amount
where totals.account = current_account
Мне не очень понятно:
1) этот триггер, я так понимаю, повешен автором на событие AFTER INSERT таблицы operations. А current_amount - это кол-во, которое мы инсертим в таблицу operations. И автор внутри триггера цепляется к переменной current_amount, но как переменная current_amount попадет внутрь триггера? Или предполагается, что автор выше достал заинсерченную строку из таблицы inserted и присвоил в current_amount (то есть, автор просто опустил этот кусок кода)?
2) Делая триггер на вставку в таблицу operations, мы хотим, чтобы вспомогательная таблица totals обновлялась всегда, когда приложение шлет запрос на вставку в таблицу operations, так мы хотим обеспечить целостность. Но получается, что стороннее приложение по ошибке или по взлому может послать запрос на апдейт\вставку напрямую в таблицу totals, и тогда целостность данных все-равно нарушается. Т.к. таблица totals - вспомогательная, то мы должны разрешить вызывать инсерты\апдейты в эту таблицу только из нашего триггера (ну либо из процедур на стороне sql-сервера, и должны запретить делать там изменения запросами от сторонних приложений). Для этого нам нужно либо скрыть эту таблицу из схемы данных (чтобы она не была видна наружу, но была видна внутри sql-сервера), либо ограничить инсерты\апдейты (разрешив их только вызовами изнутри sql-сервера), но мне кажется, что sql-сервер не позволяет добавлять такие ограничения на таблицы (или я не прав?). Если я прав, то смысл нам писать триггер, обеспечивающий целостность, если хакерское приложение все-равно может нарушить целостность, вызвав напрямую апдейт\инсерт в таблицу totals?