Внешние ключи обеспечивают согласованность в СУБД. То есть ни одна дочерняя строка не может ссылаться на несуществующий родительский элемент.
Существует мнение, что правила согласованности должны обеспечиваться кодом приложения, но это неэффективно и подвержено ошибкам. Даже если ваш код совершенен и не содержит ошибок и никогда не вводит неработающую ссылку, как вы можете быть уверены, что код других пользователей, обращающийся к той же базе данных, также совершенен?
Когда в СУБД применяются ограничения, вы можете рассчитывать на согласованность. Другими словами, база данных никогда не позволяет зафиксировать изменение, которое нарушает ссылки.
Когда ограничения применяются кодом приложения, вы никогда не можете быть полностью уверены, что в базе данных не было ошибок. Вы часто запускаете SQL-скрипты, чтобы отловить неработающие ссылки и исправить их. Дополнительный код, который вы должны написать для этого, намного превышает любые затраты производительности для согласованности управления СУБД.