PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

अशक्त स्तंभों के साथ अद्वितीय बाधा बनाएँ

दो आंशिक अनुक्रमणिका बनाएं :

CREATE UNIQUE INDEX favo_3col_uni_idx ON favorites (user_id, menu_id, recipe_id)
WHERE menu_id IS NOT NULL;

CREATE UNIQUE INDEX favo_2col_uni_idx ON favorites (user_id, recipe_id)
WHERE menu_id IS NULL;

इस तरह, (user_id, recipe_id) . का केवल एक संयोजन हो सकता है जहां menu_id IS NULL . है , वांछित बाधा को प्रभावी ढंग से लागू करना।

संभावित कमियां:

  • आपके पास (user_id, menu_id, recipe_id) को संदर्भित करने वाली विदेशी कुंजी नहीं हो सकती है . (ऐसा लगता नहीं है कि आप तीन कॉलम चौड़ा एक FK संदर्भ चाहते हैं - इसके बजाय PK कॉलम का उपयोग करें!)
  • आप CLUSTER को आधार नहीं बना सकते आंशिक अनुक्रमणिका पर।
  • बिना मिलान वाली क्वेरी WHERE स्थिति आंशिक अनुक्रमणिका का उपयोग नहीं कर सकती है।

अगर आपको पूर्ण . की आवश्यकता है अनुक्रमणिका, आप वैकल्पिक रूप से WHERE . को छोड़ सकते हैं favo_3col_uni_idx . से शर्त और आपकी आवश्यकताएं अभी भी लागू हैं।
अनुक्रमणिका, जिसमें अब पूरी तालिका शामिल है, दूसरी तालिका के साथ ओवरलैप हो जाती है और बड़ी हो जाती है। विशिष्ट प्रश्नों और NULL . के प्रतिशत के आधार पर मान, यह उपयोगी हो भी सकता है और नहीं भी। चरम स्थितियों में यह तीनों इंडेक्स (दो आंशिक वाले और कुल मिलाकर शीर्ष पर) को बनाए रखने में भी मदद कर सकता है।

यह एकल अशक्त स्तंभ . के लिए एक अच्छा समाधान है , शायद दो के लिए। लेकिन यह अधिक के लिए जल्दी से हाथ से निकल जाता है क्योंकि आपको अशक्त स्तंभों के प्रत्येक संयोजन के लिए एक अलग आंशिक सूचकांक की आवश्यकता होती है, इसलिए संख्या द्विपद रूप से बढ़ती है। अनेक अशक्त स्तंभों . के लिए , इसके बजाय देखें:

  • मेरी UNIQUE बाधा ट्रिगर क्यों नहीं होती?

इसके अलावा:मैं सलाह देता हूं कि PostgreSQL में मिश्रित केस आइडेंटिफायर का उपयोग न करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Slony-I 2.0.x को नवीनतम संस्करण 2.1.x में अपग्रेड करना

  2. Linux पर PostgreSQL डेटाबेस डिफ़ॉल्ट स्थान

  3. [वीडियो] Ansible और PostgreSQL

  4. PostgreSQL शो टेबल समतुल्य (psql)

  5. UNION, EXCEPT, या INTERSECT का उपयोग करते समय PostgreSQL में “ERROR:  तालिका के लिए FROM-क्लॉज प्रविष्टि अनुपलब्ध” को ठीक करें