Crie um
UNIQUE
índice de várias colunas em (product_id, variant_id)
:CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
No entanto, isso permitiria várias entradas de
(1, NULL)
para (product_id, variant_id)
porque NULL
os valores não são considerados idênticos.Para compensar isso, crie adicionalmente um
UNIQUE
parcial índice em product_id
:CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
Desta forma, você pode inserir
(1,2)
, (1,3)
e (1, NULL)
, mas nenhum deles uma segunda vez. Também acelera as consultas com condições em uma ou ambas as colunas. Resposta recente e relacionada no dba.SE, quase diretamente aplicável ao seu caso:
- Restrição exclusiva de várias colunas do PostgreSQL e valores NULL