Skapa en UNIQUE
multikolumnindex på (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
Detta skulle dock tillåta flera inmatningar av (1, NULL)
för (product_id, variant_id)
eftersom NULL
värden anses inte vara identiska.
För att kompensera för det skapar du dessutom en partiell UNIQUE
index på product_id
:
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
På så sätt kan du ange (1,2)
, (1,3)
och (1, NULL)
, men ingen av dem en andra gång. Snabbar också upp frågor med villkor i en eller båda kolumnerna.
Nytt, relaterat svar på dba.SE, nästan direkt tillämpligt på ditt ärende:
- PostgreSQL flerkolumns unika begränsningar och NULL-värden