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