Utwórz UNIQUE
indeks wielokolumnowy w (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
Jednak pozwoliłoby to na wiele wpisów (1, NULL)
dla (product_id, variant_id)
ponieważ NULL
wartości nie są uważane za identyczne.
Aby to zrekompensować, dodatkowo utwórz częściowy UNIQUE
indeks na product_id
:
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
W ten sposób możesz wpisać (1,2)
, (1,3)
i (1, NULL)
, ale żaden z nich nie po raz drugi. Przyspiesza także zapytania z warunkami w jednej lub obu kolumnach.
Niedawna, powiązana odpowiedź na dba.SE, prawie bezpośrednio odnosząca się do Twojej sprawy:
- Unikatowe ograniczenie wielokolumnowe PostgreSQL i wartości NULL