Comprendre les erreurs d'intégrité référentielle Postgres
Lors de la création de structures de base de données dans Postgres (version 9.1 ou ultérieure), vous pouvez rencontrer cette erreur :
<code>ERROR: there is no unique constraint matching given keys for referenced table "bar"</code>
Cette erreur résulte de l'application par Postgres de l'intégrité référentielle, un aspect crucial de la cohérence des bases de données. Décomposons la cause et la solution.
Intégrité référentielle et clés étrangères
L'intégrité référentielle garantit la cohérence des données dans les tables associées. Les relations de clé étrangère établissent des liens entre les tables. Par exemple, si la table bar
a une clé étrangère foo_fk
faisant référence à la colonne name
de la table foo
, l'intégrité référentielle exige que chaque valeur foo_fk
dans bar
corresponde à une valeur name
existante dans foo
.
Le rôle des contraintes uniques
Pour maintenir l'intégrité référentielle, Postgres nécessite une contrainte unique sur la colonne référencée (name
dans le tableau foo
). Cette contrainte garantit que chaque valeur name
dans foo
est unique, permettant à Postgres d'identifier sans ambiguïté la ligne référencée.
Cause de l'erreur : contrainte unique manquante
Le message d'erreur indique une contrainte unique manquante sur la colonne référencée par la clé étrangère. Si la colonne name
de foo
ne dispose pas d'une contrainte unique, Postgres ne peut pas lier de manière fiable les valeurs foo_fk
de bar
à des lignes spécifiques de foo
, ce qui entraîne l'erreur.
Résoudre l'erreur : ajout d'une contrainte unique
La solution est simple : ajoutez une contrainte unique à la colonne référencée. En SQL, cela se fait à l'aide des commandes ALTER TABLE
et ADD CONSTRAINT
:
<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_name_unique UNIQUE (name);</code>
Cet ajout renforce l'unicité de la colonne name
dans foo
, satisfaisant les exigences de Postgres en matière d'intégrité référentielle et permettant à la relation de clé étrangère de fonctionner correctement. Après avoir ajouté la contrainte, les tentatives de création de la relation de clé étrangère devraient réussir.
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!