एक UNIQUE
बनाएं (product_id, variant_id)
. पर बहु-स्तंभ अनुक्रमणिका :
CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);
हालांकि, यह (1, NULL)
. की कई प्रविष्टियों की अनुमति देगा (product_id, variant_id)
. के लिए क्योंकि NULL
मानों को समान नहीं माना जाता है।
उसके लिए क्षतिपूर्ति करने के लिए, अतिरिक्त रूप से एक आंशिक UNIQUE
बनाएं product_id
. पर अनुक्रमणिका :
CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;
इस तरह आप (1,2)
. दर्ज कर सकते हैं , (1,3)
और (1, NULL)
, लेकिन उनमें से कोई भी दूसरी बार नहीं। साथ ही एक या दोनों कॉलम पर शर्तों के साथ प्रश्नों को गति देता है।
हाल ही में, dba.SE पर संबंधित उत्तर, लगभग सीधे आपके मामले पर लागू होता है:
- PostgreSQL बहु-स्तंभ अद्वितीय बाधा और NULL मान