Heim >Datenbank >MySQL-Tutorial >Warum gibt Postgres beim Erstellen von Fremdschlüsseln den Fehler „Keine eindeutige Einschränkung für bestimmte Schlüssel' aus?

Warum gibt Postgres beim Erstellen von Fremdschlüsseln den Fehler „Keine eindeutige Einschränkung für bestimmte Schlüssel' aus?

Linda Hamilton
Linda HamiltonOriginal
2025-01-08 22:19:53721Durchsuche

Why Does Postgres Throw a

Fehler bei der referenziellen Integrität von Postgres verstehen

Beim Erstellen von Datenbankstrukturen in Postgres (Version 9.1 oder höher) kann dieser Fehler auftreten:

<code>ERROR: there is no unique constraint matching given keys for referenced table "bar"</code>

Dieser Fehler entsteht durch die Durchsetzung der referenziellen Integrität durch Postgres, einem entscheidenden Aspekt der Datenbankkonsistenz. Lassen Sie uns die Ursache und Lösung aufschlüsseln.

Referenzielle Integrität und Fremdschlüssel

Die referenzielle Integrität stellt die Datenkonsistenz über verwandte Tabellen hinweg sicher. Fremdschlüsselbeziehungen stellen Verknüpfungen zwischen Tabellen her. Wenn die Tabelle bar beispielsweise einen Fremdschlüssel foo_fk hat, der auf die Spalte name in der Tabelle foo verweist, schreibt die referenzielle Integrität vor, dass jeder foo_fk-Wert in bar einem vorhandenen name-Wert in entsprechen muss foo.

Die Rolle einzigartiger Einschränkungen

Um die referenzielle Integrität aufrechtzuerhalten, erfordert Postgres eine eindeutige Einschränkung für die referenzierte Spalte (name in der Tabelle foo). Diese Einschränkung garantiert, dass jeder name-Wert in foo eindeutig ist, sodass Postgres die referenzierte Zeile eindeutig identifizieren kann.

Fehlerursache: Fehlende eindeutige Einschränkung

Die Fehlermeldung weist auf eine fehlende eindeutige Einschränkung für die Spalte hin, auf die der Fremdschlüssel verweist. Wenn der name-Spalte in foo eine eindeutige Einschränkung fehlt, kann Postgres foo_fk-Werte in bar nicht zuverlässig mit bestimmten Zeilen in foo verknüpfen, was zu dem Fehler führt.

Beheben des Fehlers: Hinzufügen einer eindeutigen Einschränkung

Die Lösung ist einfach: Fügen Sie der referenzierten Spalte eine eindeutige Einschränkung hinzu. In SQL geschieht dies mit den Befehlen ALTER TABLE und ADD CONSTRAINT:

<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_name_unique UNIQUE (name);</code>

Dieser Zusatz erzwingt die Eindeutigkeit der name-Spalte in foo, erfüllt die Anforderungen von Postgres an referenzielle Integrität und ermöglicht die ordnungsgemäße Funktion der Fremdschlüsselbeziehung. Nach dem Hinzufügen der Einschränkung sollten Versuche zum Erstellen der Fremdschlüsselbeziehung erfolgreich sein.

Das obige ist der detaillierte Inhalt vonWarum gibt Postgres beim Erstellen von Fremdschlüsseln den Fehler „Keine eindeutige Einschränkung für bestimmte Schlüssel' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn