Maak een UNIQUE
index met meerdere kolommen op (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
Dit zou echter meerdere invoer van (1, NULL)
. mogelijk maken voor (product_id, variant_id)
omdat NULL
waarden worden niet als identiek beschouwd.
Om dat goed te maken, maakt u bovendien een gedeeltelijke UNIQUE
index op product_id
:
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
Op deze manier kunt u (1,2)
. invoeren , (1,3)
en (1, NULL)
, maar geen van beiden een tweede keer. Versnelt ook zoekopdrachten met voorwaarden in een of beide kolommen.
Recent, gerelateerd antwoord op dba.SE, bijna direct van toepassing op uw geval:
- PostgreSQL-unieke beperking met meerdere kolommen en NULL-waarden