Comprendre les clés étrangères dans SQL Server
Lors de la conception d’une base de données relationnelle, il est essentiel d’établir des relations entre les tables pour maintenir l’intégrité des données. L’un des moyens d’y parvenir est l’utilisation de clés étrangères. Une clé étrangère dans SQL Server est un champ (ou un ensemble de champs) dans une table qui identifie de manière unique une ligne d’une autre table. Si vous venez d’un autre système de base de données, comme PostgreSQL, vous pourriez constater quelques différences dans la syntaxe et l’implémentation dans SQL Server, ce qui peut prêter à confusion.
Le problème : Création d’une clé étrangère
Dans le scénario donné, une tentative est faite pour créer trois tables : exams
, question_bank
et answer_bank
. L’objectif est de créer une clé étrangère dans question_bank
qui référence la table exams
. Cependant, une erreur survient lors de l’exécution du code SQL. Le message clé de l’erreur est le suivant :
Msg 8139, Level 16, State 0, Line 9 Le nombre de colonnes référencées dans la clé étrangère diffère du nombre de colonnes référencées, table ‘question_bank’.
Cela indique qu’il y a un décalage dans la définition de la clé étrangère.
Solution : Définir correctement la clé étrangère
Étape 1 : Revoir les définitions de table
Examinons de plus près comment définir correctement la clé étrangère dans la table question_bank
.
Configuration actuelle de la table
Le code SQL original créait la table question_bank
comme suit :
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint question_exam_id foreign key references exams(exam_id)
);
La clé étrangère est censée référencer exam_id
de la table exams
, mais elle manque de la syntaxe et de la structure appropriées.
Étape 2 : Mettre à jour la définition de la clé étrangère
Pour définir correctement la relation de clé étrangère, spécifiez comment la colonne de clé étrangère (question_exam_id
) se rapporte à la clé primaire de la table référencée (exam_id
) :
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);
Changements clés :
- Spécifiez le nom de la clé étrangère : Il est bon de nommer la contrainte de clé étrangère (par exemple,
fk_questionbank_exams
) pour plus de clarté. - Référencez correctement la colonne de clé étrangère : Assurez-vous que la clé étrangère fait référence à la bonne colonne dans la table référencée.
Étape 3 : Mise en œuvre des modifications
Maintenant, vous pouvez supprimer la table question_bank
existante (si elle existe) et la recréer avec la définition de clé étrangère corrigée en utilisant :
drop table if exists question_bank;
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint fk_questionbank_exams foreign key (question_exam_id) references exams (exam_id)
);
Conclusion
Configurer des clés étrangères dans SQL Server est une étape cruciale pour garantir l’intégrité des données et établir des relations entre les tables. En définissant soigneusement les contraintes de clé étrangère et en corrigeant d’éventuels problèmes de syntaxe, vous pouvez créer un design de base de données robuste et efficace.
Si vous rencontrez des erreurs, vérifiez toujours les définitions de clé étrangère pour vous assurer que la colonne référencée correspond correctement à la colonne référencée. Avec ce guide, vous devriez être bien préparé pour mettre en œuvre des clés étrangères avec succès dans vos bases de données SQL Server.