В идеальном мире это 100% решение. А когда не 2 таблицы? Когда добавляются новые связанные таблицы, надо будет не забыть проверить там, там и там? Сомнительное удовольствие.
Это требования вашего приложения. Если вам нужно быть уверенным, что действие разрешено, делайте все необходимые проверки.
Если вам "доставляет неудовольствие" вписывать проверки в код - не пишите ) Пусть пользователь разнесёт приложение к чертям, лишь бы вам не напрягаться )
Обработка исключений - костыль?
Исключения тоже должны обрабатываться - например, написать в логи, отправить админу email и вывести внятное сообщение об ошибке пользователю.
Костылём здесь является не обработка исключений, а перекладывание с больной головы на здоровую. Приложение должно убедиться, что действие разрешено, а вместо этого сбрасывает ответственность на БД - "авось ошибка брякнется, если что не так". Это неправильно.