Buat UNIQUE
indeks multikolom pada (product_id, variant_id)
:
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
Namun, ini akan memungkinkan beberapa entri (1, NULL)
untuk (product_id, variant_id)
karena NULL
nilai tidak dianggap sama.
Untuk menebusnya, buat tambahan UNIQUE
sebagian indeks di product_id
:
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
Dengan cara ini Anda dapat memasukkan (1,2)
, (1,3)
dan (1, NULL)
, tapi tak satu pun dari mereka untuk kedua kalinya. Juga mempercepat kueri dengan ketentuan pada satu atau kedua kolom.
Baru-baru ini, jawaban terkait di dba.SE, hampir secara langsung berlaku untuk kasus Anda:
- Batasan unik multi-kolom PostgreSQL dan nilai NULL