Maison > base de données > tutoriel mysql > Pourquoi Postgres génère-t-il une erreur « Aucune contrainte unique correspondant aux clés données » lors de la création de clés étrangères ?

Pourquoi Postgres génère-t-il une erreur « Aucune contrainte unique correspondant aux clés données » lors de la création de clés étrangères ?

Linda Hamilton
Libérer: 2025-01-08 22:19:53
original
718 Les gens l'ont consulté

Why Does Postgres Throw a

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal