Думайте о базе данных как о большом большом объекте - после каждого обращения к ней она должна быть в логически согласованном состоянии.
Базы данных предоставляют себя через таблицы, а поддержание согласованности таблиц и строк можно сделать с помощью триггеров. Еще один способ сохранить их согласованность - запретить прямой доступ к таблицам и разрешить его только через хранимые процедуры и представления.
Недостатком триггеров является то, что любое действие может вызвать их; это тоже сила - никто не собирается нарушать целостность системы из-за некомпетентности.
В качестве контрапункта, разрешая доступ к базе данных только через хранимые процедуры и представления, по-прежнему разрешается доступ к бэкдору разрешений. Пользователям с достаточными разрешениями доверяют не нарушать целостность базы данных, все остальные используют хранимые процедуры.
Что касается сокращения объема работы: базы данных потрясающе эффективны, когда им не приходится иметь дело с внешним миром; вы бы очень удивились, насколько даже переключение процессов влияет на производительность. Это еще один плюс хранимых процедур: вместо дюжины обращений к базе данных (и всех связанных с этим циклов), есть одна.
Сгруппировать вещи в один сохраненный процесс - это хорошо, но что происходит, если что-то идет не так? Скажем, у вас есть 5 шагов, и первый шаг терпит неудачу, что происходит с другими шагами? Вам нужно добавить целую кучу логики, чтобы удовлетворить эту ситуацию. Как только вы начнете это делать, вы потеряете преимущества хранимой процедуры в этом сценарии.
Бизнес-логика должна куда-то идти, и в структуру базы данных встроено много подразумеваемых правил домена - отношения, ограничения и т. Д. Являются попыткой кодифицировать бизнес-правила, говоря, например, что пользователь может один пароль Учитывая, что вы начали распространять бизнес-правила на сервер базы данных, имея эти отношения и так далее, где вы проводите черту? Когда база данных снимает с себя ответственность за целостность данных и начинает доверять вызывающим приложениям и пользователям базы данных, чтобы сделать это правильно? Хранимые процедуры со встроенными в них правилами могут дать большую политическую власть в руки администраторов баз данных. Все зависит от того, сколько уровней будет существовать в вашей n-уровневой архитектуре; если существует уровень представления, бизнес и данные, где находится разделение между бизнесом и данными? Какую ценность добавляет бизнес-уровень? Будете ли вы запускать бизнес-уровень на сервере базы данных как хранимые процедуры?
Да, я думаю, что необходимость обходить триггер означает, что вы "делаете это неправильно"; в этом случае триггер не для вас.