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