Heim > Datenbank > MySQL-Tutorial > Wie erzwinge ich eindeutige Einschränkungen mit Nullable-Spalten in einer Datenbanktabelle?

Wie erzwinge ich eindeutige Einschränkungen mit Nullable-Spalten in einer Datenbanktabelle?

Barbara Streisand
Freigeben: 2025-01-20 23:56:13
Original
181 Leute haben es durchsucht

How to Enforce Unique Constraints with Nullable Columns in a Database Table?

Eindeutige Einschränkungen in Tabellen erzwingen, die nullfähige Spalten enthalten

In diesem Artikel werden die Herausforderungen beim Erstellen eindeutiger Einschränkungen für Tabellen erläutert, die nullfähige Spalten enthalten. Das Ziel besteht darin, zu verhindern, dass mehrere Zeilen dieselbe Wertekombination aufweisen, selbst wenn die nullbaren Spalten null sind.

Frage:

Das bereitgestellte Tabellenschema verfügt über eine UserRepository-Spalte, die NULL-Werte zulässt. Der Benutzer möchte jedoch sicherstellen, dass für jedes Paar aus UserId und RecipeId nur eine Zeile vorhanden ist, unabhängig vom MenuId-Wert.

Antwort:

PostgreSQL 15 oder höher:

  • Verwenden Sie die NULLS NOT DISTINCT-Klausel in der UNIQUE-Einschränkungsdefinition.
<code class="language-sql">ALTER TABLE Favorites
ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE NULLS NOT DISTINCT (UserId, MenuId, RecipeId);</code>
Nach dem Login kopieren

PostgreSQL 14 oder niedriger:

  • Erstellen Sie zwei Teilindizes:
<code class="language-sql">CREATE UNIQUE INDEX favo_3col_uni_idx ON Favorites (UserId, MenuId, RecipeId)
WHERE MenuId IS NOT NULL;

CREATE UNIQUE INDEX favo_2col_uni_idx ON Favorites (UserId, RecipeId)
WHERE MenuId IS NULL;</code>
Nach dem Login kopieren

Vorteile:

  • Erforderliche Einschränkungen effizient durchsetzen.

Nachteile (nur Teilindex):

  • Beschränken Sie Fremdschlüsselreferenzen und Clustering-Optionen.
  • Bei einigen Abfragen funktioniert es nicht, wenn keine passende WHERE-Bedingung vorhanden ist.

Alternative:

  • Wenn mehrere nullfähige Spalten beteiligt sind, lesen Sie bitte die Diskussion in diesem Artikel: „Warum wird meine UNIQUE-Einschränkung nicht ausgelöst?“.

Das obige ist der detaillierte Inhalt vonWie erzwinge ich eindeutige Einschränkungen mit Nullable-Spalten in einer Datenbanktabelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage