Que sont les clés étrangères dans les bases de données SQL?
Les clés étrangères permettent aux administrateurs de base de données d'identifier facilement les différentes connexions qui existent dans un système de gestion de base de données SQL.
SQL effectue des opérations mathématiques sur les données dans un système de gestion de base de données. Ces bases de données contiennent différentes tables qui stockent chacune des données sur une entité spécifique. Si vous avez une base de données de location de voitures, une entité (ou table) dans cette base de données sera des clients (qui stockera toutes les données personnelles sur chaque client).
Ces tables de base de données contiennent des lignes et des colonnes, où chaque ligne héberge un enregistrement et chaque colonne contient des données spécifiques à un attribut.
Dans un système de gestion de base de données, chaque enregistrement (ou ligne) doit être unique.
Clés primaires
Bien que la stipulation soit que chaque enregistrement d'une table doit être distinct, ce n'est pas toujours le cas. Poursuivant avec l'exemple de la base de données de location de voitures, si la base de données contient deux clients portant chacun le nom «John Brown», on pourrait s'attendre à ce qu'un John Brown retourne une Mercedes-Benz qu'il n'a pas louée.
La création d'une clé primaire atténuera ce risque. Dans un système de gestion de base de données SQL, une clé primaire est un identifiant unique qui distingue un enregistrement d'un autre.
Par conséquent, chaque enregistrement dans un système de gestion de base de données SQL doit avoir une clé primaire.
Utilisation des clés primaires dans une base de données
Pour inclure des clés primaires dans un système de gestion de base de données à l'aide de SQL, vous pouvez simplement l'ajouter en tant qu'attribut normal lors de la création d'une nouvelle table. Ainsi, la table des clients contiendra quatre attributs (ou colonnes):
- CarOwnerID (qui stockera la clé primaire)
- Prénom
- Nom de famille
- Numéro de téléphone
Désormais, chaque enregistrement client qui entre dans la base de données aura un numéro d'identification unique, ainsi qu'un prénom, un nom et un numéro de téléphone. Le numéro de téléphone n'est pas assez unique pour être une clé primaire, car bien qu'il soit unique pour une personne à la fois, une personne peut facilement changer son numéro, ce qui signifie qu'il appartiendrait désormais à quelqu'un d'autre.
Un enregistrement avec un exemple de clé primaire
/* creates a new record in the customers table */
INSERT INTO Customers VALUES
('0004',
'John',
'Brown',
'111-999-5555');
Le code SQL ci-dessus ajoutera un nouvel enregistrement à la table Clients préexistante. Le tableau ci-dessous montre la nouvelle table client avec les deux enregistrements John Brown.
La clé étrangère
Vous disposez désormais de clés primaires qui distinguent de manière unique un loueur de voiture d'un autre. Le seul problème est que, dans la base de données, il n'y a pas de lien réel entre chaque John Brown et la voiture qu'il loue.
Par conséquent, la possibilité de faire une erreur existe toujours. C'est là que les clés étrangères entrent en jeu. L'utilisation d'une clé primaire pour résoudre le problème de l'ambiguïté de propriété n'est possible que si la clé primaire se double d'une clé étrangère.
Qu'est-ce qu'une clé étrangère?
Dans un système de gestion de base de données SQL, une clé étrangère est un identificateur unique ou une combinaison d'identificateurs uniques qui connectent deux ou plusieurs tables dans une base de données.
Parmi les quatre systèmes de gestion de base de données SQL existants, le système de gestion de base de données relationnelle est le plus populaire. Lorsque vous décidez quelle table dans une base de données relationnelle doit avoir une clé étrangère, vous devez d'abord identifier quelle table est le sujet et quel est l'objet dans leur relation.
Pour revenir à la base de données de location de voitures, pour connecter chaque client à la bonne voiture, vous devez comprendre qu'un client (le sujet) loue une voiture (l'objet). Par conséquent, la clé étrangère doit être dans la table des voitures.
Le code SQL qui génère une table avec une clé étrangère est légèrement différent de la norme.
Création d'une table avec un exemple de clé étrangère
/* creates a new cars table in the car rental database */
CREATE TABLE Cars
(
LicenseNumber varchar(30) NOT NULL PRIMARY KEY,
CarType varchar(30) NOT NULL,
CustomerID varchar(30) FOREIGN KEY REFERENCES Customers(CustomerID)
);
Comme vous pouvez le voir dans le code ci-dessus, une clé étrangère doit être explicitement identifiée en tant que telle, avec une référence à la clé primaire qui est connectée à la nouvelle table.
Pour ajouter un enregistrement à la nouvelle table, vous devez vous assurer que la valeur du champ de clé étrangère correspond à la valeur du champ de clé primaire de la table d'origine.
Ajout d'un enregistrement avec un exemple de clé étrangère
/* creates a new record in the cars table */
INSERT INTO Cars VALUES
('100012',
'Mercedes-Benz',
'0004');
Le code ci-dessus crée un nouvel enregistrement dans la nouvelle table Cars , produisant le résultat suivant.
Table de voitures
À partir du tableau ci-dessus, vous pouvez identifier le bon John Brown qui loue une Mercedes-Benz par la clé étrangère dans le dossier.
Avancer les clés étrangères
Il existe deux autres façons d'utiliser une clé étrangère dans une base de données.
Si vous regardez en arrière sur la définition d'une clé étrangère ci-dessus, vous constaterez qu'elle dit qu'une clé étrangère peut être un identifiant unique ou une combinaison d'identifiants uniques.
En revenant à l'exemple de la base de données de location de voitures, vous verrez que la création d'un nouvel enregistrement (de la même voiture) chaque fois qu'un client loue cette voiture va à l'encontre de l'objectif de la table Cars . Si les voitures sont à vendre et sont vendues une seule fois à un seul client, la base de données existante est parfaite; mais étant donné que les voitures sont des locations, il existe une meilleure façon de représenter ces données.
Clés composites
Une clé composite a deux identifiants uniques ou plus. Dans une base de données relationnelle, il y aura des cas où l'utilisation d'une seule clé étrangère ne représentera pas suffisamment les relations qui existent dans cette base de données.
Dans l'exemple de location de voiture, l'approche la plus pratique consiste à créer une nouvelle table qui stocke les détails de la location. Pour que les informations du tableau de location de voitures soient utiles, elles doivent se connecter à la fois aux tables des voitures et des clients.
Création d'une table avec des clés étrangères composites
/* creates a CarRental table in the car rental database */
CREATE TABLE CarRental
(
DateRented DATE NOT NULL,
LicenseNumber varchar(30) NOT NULL FOREIGN KEY REFERENCES Cars(LicenseNumber),
CustomerID varchar(30) NOT NULL FOREIGN KEY REFERENCES Customers(CustomerID),
PRIMARY KEY (DateRented, LicenseNumber, CustomerID)
);
Le code ci-dessus décrit un point important; bien qu'une table dans une base de données SQL puisse avoir plus d'une clé étrangère, elle ne peut avoir qu'une seule clé primaire. En effet, il ne devrait y avoir qu'une seule manière d'identifier un enregistrement.
Il est nécessaire de combiner les trois attributs de la table pour avoir une clé unique. Un client peut louer plus d'une voiture le même jour (donc CustomerID et DateRented ne sont pas une bonne combinaison) plus d'un client peut également louer la même voiture le même jour (donc LicenseNumber et DateRented ne sont pas une bonne combinaison) .
Cependant, la création d'une clé composite qui indique quel client, quelle voiture et quel jour fait une excellente clé unique. Cette clé unique représente à la fois une clé étrangère composite et une clé primaire composite.
Clés primaires étrangères
Oh oui, les clés primaires étrangères sortent. Bien qu'il n'y ait pas de nom officiel pour cela, une clé étrangère peut également être une clé primaire dans la même table. Cela se produit lorsque vous créez une nouvelle table qui contient des données spécialisées sur une entité existante (ou un enregistrement dans une autre table).
Disons que Fred (qui travaille à la société de location de voitures) est dans la base de données de l'entreprise sous la table des employés. Après quelques années, il devient superviseur et est ajouté à la table des superviseurs.
Fred est toujours un employé et aura toujours le même numéro d'identification. Ainsi, l'identifiant d'employé de Fred est maintenant dans la table du superviseur en tant que clé étrangère qui deviendra également une clé primaire dans cette table (car cela n'a aucun sens de créer un nouveau numéro d'identifiant pour Fred maintenant qu'il est superviseur).
Vous pouvez désormais identifier les clés étrangères dans les bases de données SQL
Les clés étrangères connectent différentes tables dans une base de données SQL. Dans cet article, vous pouvez voir ce qu'est une clé étrangère, comment elle fonctionne et pourquoi il est important de les avoir dans une base de données. Vous comprenez également les formes de base, et encore plus complexes, des clés étrangères.
Si vous pensez que les clés étrangères sont intéressantes, vous allez avoir une journée sur le terrain lorsque vous commencerez à utiliser le projet et les opérations de sélection pour interroger vos bases de données SQL.