Opret en UNIQUE
multikolonneindeks på (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
Dette ville dog tillade flere indtastninger af (1, NULL)
for (product_id, variant_id)
fordi NULL
værdier anses ikke for at være identiske.
For at kompensere for det skal du desuden oprette en delvis UNIQUE
indeks på product_id
:
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
På denne måde kan du indtaste (1,2)
, (1,3)
og (1, NULL)
, men ingen af dem en anden gang. Fremskynder også forespørgsler med betingelser på en eller begge kolonner.
Nyligt, relateret svar på dba.SE, næsten direkte relevant for din sag:
- PostgreSQL-multi-kolonne unikke begrænsninger og NULL-værdier