Crear una UNIQUE multicolumn INDEX en (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_id_var_id_idx
ON line_items (product_id, variant_id);
Sin embargo, esto permitiría múltiples entradas de (1, NULL)
para (product_id, variant_id)
PORQUE NULL
valores no se consideran idénticos.
para compensar la que, además, crear un partial UNIQUE INDEX en product_id
: De esta manera
CREATE UNIQUE INDEX line_items_prod_id_var_null_idx
ON line_items (product_id)
WHERE variant_id IS NULL;
puede introducir (1,2)
, (1,3)
y (1, NULL)
, pero ninguno de ellos por segunda vez. También acelera consultas con condiciones en una o ambas columnas.
Este answer on dba.SE recientemente escribí es muy similar y casi directamente aplicable a su problema.