Есть такое правило (которое, кстати, мотивирует писать тесты): стоимость исправления внесённого бага возрастает по мере продвижения бажного кода к проду.
Не все ошибки в MR удаётся найти, особенно в проекте на 50+ таблиц и больших MR (а некоторые задачи принципиально не решаются рекомендуемыми MR). Исправить внесённый баг разработчику до создания первых коммитов (и без написания кучи кода, завязанного на этот баг) дешевле чем процесс переписки в рамках code review, последний дешевле, чем найти баг тестировщиком. Плюс, примерно с этого момента появляется немаленький шанс, что баг заметят только на проде.
Сильно нагруженные таблички не следуют нагружать триггерами лишний раз (знаю примеры, когда и fk-констрейнты выключали), но в остальных случаях делать базовую валидацию целостности (не бизнесовых правил, а именно логики схемы) - нормальный вариант. Ну и на практике, такое требуется нечасто, в основном - во всяких хитрых справочниках (и их повреждение может довольно серьёзные последствия иметь).