Je suppose que vous parlez de contraintes de clé étrangère imposées par la base de données . Vous utilisez probablement déjà des clés étrangères, vous n'en avez simplement pas informé la base de données.
Supposons qu'un programmeur fasse déjà cela de la bonne manière, alors avons-nous vraiment besoin du concept de clés étrangères?
Théoriquement, non. Cependant, il n'y a jamais eu de logiciel sans bogues.
Les bogues dans le code de l'application ne sont généralement pas si dangereux - vous identifiez le bogue et le corrigez, puis l'application s'exécute à nouveau correctement. Mais si un bogue permet aux données currupt d'entrer dans la base de données, alors vous êtes coincé! Il est très difficile de récupérer des données corrompues dans la base de données.
Considérez si un bogue subtil dans FogBugz a permis l' écriture d' une clé étrangère corrompue dans la base de données. Il peut être facile de corriger le bogue et de transmettre rapidement le correctif aux clients dans une version de correction de bogue. Cependant, comment corriger les données corrompues dans des dizaines de bases de données? Le code correct peut maintenant se rompre soudainement parce que les hypothèses sur l'intégrité des clés étrangères ne tiennent plus.
Dans les applications Web, vous n'avez généralement qu'un seul programme parlant à la base de données, il n'y a donc qu'un seul endroit où des bogues peuvent corrompre les données. Dans une application d'entreprise, il peut y avoir plusieurs applications indépendantes parlant à la même base de données (sans parler des personnes travaillant directement avec le shell de la base de données). Il n'y a aucun moyen d'être sûr que toutes les applications suivent les mêmes hypothèses sans bogues, toujours et pour toujours.
Si des contraintes sont encodées dans la base de données, le pire qui puisse arriver avec les bogues est que l'utilisateur voit un message d'erreur affreux concernant une contrainte SQL non satisfaite. Ceci est de loin préférable à l'introduction de données currupt dans la base de données de votre entreprise, où elles interrompront à leur tour toutes vos applications ou conduiront simplement à toutes sortes de sorties erronées ou trompeuses.
Oh, et les contraintes de clé étrangère améliorent également les performances car elles sont indexées par défaut. Je ne vois aucune raison de ne pas utiliser de contraintes de clé étrangère.