Maison >base de données >tutoriel mysql >Pourquoi ma référence de clé étrangère PostgreSQL échoue-t-elle avec « ERREUR : il n'y a pas de contrainte unique correspondant aux clés données pour la table référencée 'bar' » ?

Pourquoi ma référence de clé étrangère PostgreSQL échoue-t-elle avec « ERREUR : il n'y a pas de contrainte unique correspondant aux clés données pour la table référencée 'bar' » ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-08 22:20:47740parcourir

Why Does My PostgreSQL Foreign Key Reference Fail with

Échec de contrainte de clé étrangère PostgreSQL : un problème de contrainte unique

Cet article traite d'une erreur courante de contrainte de clé étrangère PostgreSQL 9.1 : "ERREUR : il n'y a pas de contrainte unique correspondant aux clés données pour la table référencée "bar"". Nous analyserons la cause et proposerons une solution.

Le scénario implique trois tables : "foo", "bar" et "baz". "foo" a une clé primaire ("nom"). "bar" fait référence à "foo" via "foo_fk", possède sa propre clé primaire ("pkey") et une contrainte unique sur ("foo_fk", "name"). "baz" fait référence à "bar" en utilisant "bar_fk".

Le message d'erreur signifie que la contrainte de clé étrangère dans "baz" ne peut pas être appliquée car plusieurs lignes dans "bar" peuvent partager les mêmes valeurs pour "foo_fk" et "name". Cela viole l'intégrité référentielle, car la clé étrangère dans "baz" ne peut pas identifier de manière unique une ligne correspondante dans "bar".

Le problème vient de la contrainte unique dans "bar". Bien qu'il soit unique dans la combinaison de "foo_fk" et "name", il ne garantit pas indépendamment l'unicité du "name" dans "bar". Par conséquent, plusieurs lignes dans « bar » peuvent exister avec le même « nom » mais des valeurs « foo_fk » différentes.

La solution :

Pour résoudre ce problème, ajoutez une contrainte unique à la colonne "name" de la table "bar". Cela garantit que chaque valeur « nom » est unique, permettant ainsi à la contrainte de clé étrangère dans « baz » de fonctionner correctement. Après avoir implémenté cette contrainte unique, la relation de clé étrangère sera correctement appliquée, empêchant l'erreur et établissant la structure de base de données prévue.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn