Suponho que você esteja falando sobre restrições de chave estrangeira impostas pelo banco de dados . Você provavelmente já está usando chaves estrangeiras, apenas não informou ao banco de dados sobre isso.
Suponha que um programador já esteja fazendo isso da maneira certa, então realmente precisamos do conceito de chaves estrangeiras?
Teoricamente, não. No entanto, nunca houve um software sem bugs.
Bugs no código do aplicativo normalmente não são tão perigosos - você identifica o bug e o corrige e, depois disso, o aplicativo é executado sem problemas novamente. Mas se um bug permite que dados corrompidos entrem no banco de dados, então você está preso a ele! É muito difícil recuperar dados corrompidos no banco de dados.
Considere se um bug sutil no FogBugz permitiu que uma chave estrangeira corrompida fosse escrita no banco de dados. Pode ser fácil corrigir o bug e enviar rapidamente a correção para os clientes em uma versão de correção de bug. No entanto, como os dados corrompidos em dezenas de bancos de dados devem ser corrigidos? O código correto agora pode quebrar repentinamente porque as suposições sobre a integridade das chaves estrangeiras não são mais válidas.
Em aplicativos da web, você normalmente tem apenas um programa falando com o banco de dados, portanto, há apenas um lugar onde bugs podem corromper os dados. Em um aplicativo corporativo, pode haver vários aplicativos independentes se comunicando com o mesmo banco de dados (sem mencionar as pessoas que trabalham diretamente com o shell do banco de dados). Não há como ter certeza de que todos os aplicativos seguem as mesmas premissas sem bugs, sempre e para sempre.
Se as restrições forem codificadas no banco de dados, o pior que pode acontecer com os bugs é que o usuário veja uma mensagem de erro feia sobre alguma restrição SQL não satisfeita. Isso é muito preferível a permitir que os dados sejam interrompidos em seu banco de dados corporativo, onde isso, por sua vez, quebrará todos os seus aplicativos ou apenas levará a todos os tipos de saída errada ou enganosa.
Ah, e as restrições de chave estrangeira também melhoram o desempenho porque são indexadas por padrão. Não consigo pensar em nenhuma razão para não usar restrições de chave estrangeira.