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
Barbara StreisandOriginal
2025-01-20 23:56:13243Durchsuche

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>

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>

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!

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