La plus grande question est: voudriez-vous conduire avec les yeux bandés? C'est comme ça si vous développez un système sans contraintes référentielles. Gardez à l'esprit que les exigences métier changent, les modifications de conception d'application, les hypothèses logiques respectives dans les changements de code, la logique elle-même peut être refactorisée, etc. En général, les contraintes dans les bases de données sont mises en place sous des hypothèses logiques contemporaines, apparemment correctes pour un ensemble particulier d'assertions et d'hypothèses logiques.
Tout au long du cycle de vie d'une application, les contraintes de référentiel et de vérification des données contrôlent la collecte de données via l'application, en particulier lorsque de nouvelles exigences entraînent des changements d'application logiques.
Au sujet de cette liste - une clé étrangère n'améliore pas en soi les performances ni ne dégrade les performances de manière significative du point de vue du système de traitement des transactions en temps réel. Cependant, il existe un coût agrégé pour la vérification des contraintes dans le système "batch" à volume ÉLEVÉ. Voici donc la différence, en temps réel par rapport au processus de transaction par lots; traitement par lots - où le coût accru, encouru par les contrôles de contraintes, d'un lot traité séquentiellement pose un problème de performance.
Dans un système bien conçu, des contrôles de cohérence des données seraient effectués "avant" le traitement d'un lot (néanmoins, il y a un coût associé ici également); par conséquent, les vérifications des contraintes de clé étrangère ne sont pas requises pendant le temps de chargement. En fait, toutes les contraintes, y compris la clé étrangère, doivent être temporairement désactivées jusqu'à ce que le lot soit traité.
PERFORMANCE DE LA REQUÊTE - si les tables sont jointes sur des clés étrangères, sachez que les colonnes de clés étrangères NE SONT PAS INDEXÉES (bien que la clé primaire respective soit indexée par définition). En indexant une clé étrangère, d'ailleurs, en indexant n'importe quelle clé, et en joignant des tables sur des indexés aide à de meilleures performances, pas en se joignant à une clé non indexée avec une contrainte de clé étrangère.
Changement de sujet , si une base de données ne prend en charge que l'affichage / rendu du contenu / etc du site Web et l'enregistrement des clics, alors une base de données avec des contraintes complètes sur toutes les tables est trop efficace à ces fins. Pensez-y. La plupart des sites Web n'utilisent même pas de base de données pour cela. Pour des exigences similaires, lorsque les données sont simplement enregistrées et non référencées par exemple, utilisez une base de données en mémoire, qui n'a pas de contraintes. Cela ne signifie pas qu'il n'y a pas de modèle de données, oui un modèle logique, mais pas de modèle de données physique.