Vytvořte UNIQUE
vícesloupcový index na (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
To by však umožnilo více položek (1, NULL)
pro (product_id, variant_id)
protože NULL
hodnoty nejsou považovány za identické.
Chcete-li to nahradit, vytvořte navíc částečný UNIQUE
index na product_id
:
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
Tímto způsobem můžete zadat (1,2)
, (1,3)
a (1, NULL)
, ale ani jeden z nich podruhé. Také urychluje dotazy s podmínkami v jednom nebo obou sloupcích.
Nedávná související odpověď na dba.SE, téměř přímo použitelná na váš případ:
- Unikátní omezení PostgreSQL ve více sloupcích a hodnoty NULL