Appliquer des contraintes uniques dans les tables contenant des colonnes nullables
Cet article aborde les défis liés à la création de contraintes uniques sur les tables contenant des colonnes nullables. L'objectif est d'empêcher plusieurs lignes d'avoir la même combinaison de valeurs, même si les colonnes nullables sont nulles.
Question :
Le schéma de table fourni a une colonne UserRepository nullable. Cependant, l'utilisateur souhaite s'assurer que pour chaque paire de UserId et RecipeId, une seule ligne existe, quelle que soit la valeur MenuId.
Réponse :
PostgreSQL 15 ou supérieur :
<code class="language-sql">ALTER TABLE Favorites ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE NULLS NOT DISTINCT (UserId, MenuId, RecipeId);</code>
PostgreSQL 14 ou version antérieure :
<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>
Avantages :
Inconvénients (index partiel uniquement) :
Alternative :
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!