Une clé étrangère relie les enregistrements d'une table à ceux d'une autre. La table des commandes possède un champ `customer_id`. Ce champ est une clé étrangère pointant vers la clé primaire de la table des clients. Ce lien garantit que chaque commande est associée à un client réel. Sans lui, des commandes pourraient faire référence à des clients inexistants. La base de données assure le respect de cette relation.
Les clés étrangères ne se contentent pas de documenter les relations. Elles garantissent l'intégrité référentielle. Si vous tentez d'insérer une commande avec un identifiant client (customer_id) inexistant dans la table des clients, la base de données la rejette. Si vous tentez de supprimer un client ayant passé des commandes, la base de données bloque la suppression ou la propage selon la règle en vigueur. Cette application des clés étrangères évite les enregistrements orphelins et les incohérences de données. Elles contribuent également à améliorer les performances des requêtes. La base de données peut utiliser la relation pour optimiser les jointures. Toutes les bases de données n'appliquent pas les clés étrangères. Certaines bases de données NoSQL laissent l'intégrité référentielle à l'application. Cela offre aux développeurs une plus grande flexibilité, mais aussi une plus grande responsabilité. L'application doit s'assurer de la validité des références. En cas d'échec, les données deviennent incohérentes. Les clés étrangères constituent une contrainte. Les contraintes sont contraignantes tant qu'elles permettent d'éviter une catastrophe.
Règles de clé étrangère
- Restreindre — bloquer la suppression si des références existent
- Cascade — suppression ou mise à jour automatique des enregistrements référençants
- Définir la valeur nulle — définir la clé étrangère sur null lors de la suppression
- Aucune action requise — autoriser l’opération et vérifier ultérieurement
Une clé étrangère est à la fois un lien et une garantie. Le lien connecte les tables. La garantie assure leur cohérence.
Comments
No comments yet. Be the first to share a thought.
Leave a comment