Création de clés étrangères dans SQL Server
La gestion de bases de données implique la création d'interconnexions entre les tables pour maintenir l'intégrité des données. Une façon d’y parvenir consiste à utiliser des clés étrangères. SQL Server utilise une syntaxe spécifique pour déclarer les contraintes de clé étrangère, ce qui le distingue des autres systèmes de bases de données comme PostgreSQL.
Problèmes de syntaxe et résolution
Le script SQL fourni vise à créer trois tables : exams, question_bank et anwser_bank, la table question_bank faisant référence à la table exams à l'aide d'une contrainte de clé étrangère. Cependant, lors de l'exécution, une erreur se produit :
Msg 8139, Level 16, State 0, Line 9 Number of referencing columns in foreign key differs from number of referenced columns, table 'question_bank'.
L'erreur expliquée
Cette erreur indique une inadéquation entre le nombre de colonnes référencées dans la déclaration de clé étrangère et le nombre de colonnes dans la table référencée. Dans le script fourni, la contrainte de clé étrangère dans la table question_bank fait référence à la colonne exam_id dans exams, mais la table référencée n'a pas de colonne nommée exam_id.
Correction de la contrainte de clé étrangère
Pour résoudre le problème, la déclaration de clé étrangère doit être mise à jour pour référencer la colonne correcte, qui est exam_id dans le tableau examens.
create table question_bank ( question_id uniqueidentifier primary key, question_exam_id uniqueidentifier not null, -- References "exam_id" in table "exams" question_text varchar(1024) not null, question_point_value decimal, constraint FK_question_bank_exam_id foreign key references exams(exam_id) );
Syntaxe alternative
Si vous le souhaitez, la contrainte de clé étrangère peut être créée à l'aide de l'instruction ALTER TABLE, qui offre la flexibilité d'ajouter la contrainte après la table a été créée :
alter table question_bank add constraint FK_question_bank_exam_id FOREIGN KEY ( question_exam_id ) references exams(exam_id)
Cette approche permet un contrôle plus granulaire sur la dénomination des contraintes et le timing de création.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!