Créer un UNIQUE
index multicolonne sur (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
Cependant, cela autoriserait plusieurs entrées de (1, NULL)
pour (product_id, variant_id)
car NULL
les valeurs ne sont pas considérées comme identiques.
Pour compenser cela, créez en plus un UNIQUE
partiel index sur product_id
:
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
De cette façon, vous pouvez saisir (1,2)
, (1,3)
et (1, NULL)
, mais ni l'un ni l'autre une seconde fois. Accélère également les requêtes avec des conditions sur une ou les deux colonnes.
Réponse récente et connexe sur dba.SE, presque directement applicable à votre cas :
- Contrainte unique multi-colonnes PostgreSQL et valeurs NULL