Я полагаю, вы говорите об ограничениях внешнего ключа, налагаемых базой данных . Вероятно, вы уже используете внешние ключи, но вы просто не сообщили об этом базе данных.
Предположим, что программист уже делает это правильно, тогда действительно ли нам нужна концепция внешних ключей?
Теоретически нет. Однако никогда не было программного обеспечения без ошибок.
Ошибки в коде приложения обычно не так опасны - вы определяете ошибку и исправляете ее, и после этого приложение снова работает без сбоев. Но если ошибка позволяет обработанным данным попасть в базу данных, то вы застряли с ней! Восстановить поврежденные данные в базе данных очень сложно.
Подумайте, не позволила ли небольшая ошибка в FogBugz записать поврежденный внешний ключ в базу данных. Исправить ошибку и быстро отправить исправление клиентам в выпуске исправления может быть легко. Однако как исправить поврежденные данные в десятках баз данных? Правильный код может теперь внезапно сломаться, потому что предположения о целостности внешних ключей больше не выполняются.
В веб-приложениях у вас обычно есть только одна программа, взаимодействующая с базой данных, поэтому есть только одно место, где ошибки могут повредить данные. В корпоративном приложении может быть несколько независимых приложений, обращающихся к одной и той же базе данных (не говоря уже о людях, работающих непосредственно с оболочкой базы данных). Невозможно быть уверенным, что все приложения всегда и навсегда следуют одним и тем же предположениям без ошибок.
Если ограничения закодированы в базе данных, худшее, что может случиться с ошибками, - это то, что пользователю будет показано уродливое сообщение об ошибке о том, что какое-то ограничение SQL не выполнено. Это гораздо предпочтительнее, чем позволить сокращению данных в вашей корпоративной базе данных, где это, в свою очередь, нарушит работу всех ваших приложений или просто приведет к разного рода неправильным или вводящим в заблуждение результатам.
Да, и ограничения внешнего ключа также улучшают производительность, потому что они индексируются по умолчанию. Я не могу придумать ни одной причины, чтобы не использовать ограничения внешнего ключа.