Великий миф о блоках try / catch заключается в том, что программист собирается создать удивительно надежный код и фактически сможет восстановиться после неудачного запроса к базе данных.Но возможность восстановления после ошибки базы данных зависит от того, какая именно ошибка возникла в первую очередь - если есть синтаксическая ошибка sql, то пришел ли этот код от пользователя, набирающего запрос, или от какой-либо подпрограммы, которая создаетзапрос?Если он исходил из кода, а не от пользователя, то повторный вызов кода просто выдаст ту же ошибку снова, поэтому использование блока try / catch просто обречено с самого начала, запрос не будет выполняться никогда.И это, как правило, тот тип кода, который вы получаете от PHP-скрипта, работающего на веб-сервере, вы запускаете запрос, он терпит неудачу, вы усиливаете ошибку и отказываетесь.Если, с другой стороны, вы писали интерактивное приложение на PHP и вам нужно было правильно обрабатывать ошибки БД, например, генетический алгоритм, который пытался развить допустимые операторы SQL посредством случайной мутации (очень странный пример, но в любом случае), то выполучит некоторую выгоду от блоков try / catch.
Это относится и к ограничениям на уровне базы данных.Если у вас есть какое-то долгое время работающее приложение, которое должно изящно справляться с нарушениями ограничений, то вам придется создать эту устойчивость самостоятельно.Но я полагаю, что очень немногие люди используют PHP таким образом, 99% php используется для выгрузки веб-страниц, и различные оболочки и ORM отражают это в своих проектах.Существует гораздо большая вероятность, что .NET будет использоваться для создания отдельного приложения, для которого требуется логика восстановления после ошибок.
, что затем приводит к изменению первоначального вопроса, когда использовать или почемукогда-либо использовать ограничения базы данных?Они наиболее полезны, когда у вас высокодинамичная структура базы данных, где взаимосвязь между таблицами неизвестна во время компиляции, т.е. когда новые таблицы создаются или изменяются, как часть самого приложения.Вы хотели бы этого для здоровенного хранилища данных, или для интеллектуального анализа данных, или, возможно, для теории струн.