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

प्रति समूह पंक्तियों के स्तंभ को अद्वितीय बनाने के लिए बाधा जोड़ें

जैसे @lad2025 ने टिप्पणी की , status वास्तव में boolean होना चाहिए . सस्ता, साफ-सुथरा।

किसी भी तरह से, आप अपना नियम आंशिक अद्वितीय अनुक्रमणिका<के साथ लागू कर सकते हैं /मजबूत> :

status = 'Active' . के साथ शून्य या एक पंक्ति की अनुमति देने के लिए संपूर्ण तालिका में :

CREATE UNIQUE INDEX tbl_active_uni ON tbl (status)
WHERE status = 'Active';

status = 'Active' . के साथ शून्य या एक पंक्ति की अनुमति देने के लिए प्रति userid , userid बनाएं अनुक्रमित कॉलम:

CREATE UNIQUE INDEX tbl_userid_active_uni ON tbl (userid)
WHERE status = 'Active';

ध्यान दें कि userid IS NULL अद्वितीय उल्लंघनों को ट्रिगर नहीं करेगा, क्योंकि दो NULL मानों को कभी भी समान नहीं माना जाता है। userid सेट NOT NULL होना चाहिए इस मामले में।

अनुक्रमणिका और बाधा क्यों नहीं?

अपने टिप्पणी में प्रश्न :यह एक इंडेक्स है, न कि CONSTRAINT

पहले मामले का सूचकांक छोटा . है , एक या कोई पंक्ति नहीं पकड़े हुए।
दूसरे मामले के लिए अनुक्रमणिका प्रति मौजूदा userid एक पंक्ति रखती है , लेकिन यह सबसे सस्ता और तेज़ तरीका . है स्वच्छ और सुरक्षित होने के अलावा। इसे तेज़ करने के लिए आपको किसी भी स्थिति में अन्य पंक्तियों की जाँच करने के लिए एक अनुक्रमणिका की आवश्यकता होगी।

आपके पास CHECK नहीं हो सकता है अन्य पंक्तियों पर बाधा जांच - कम से कम स्वच्छ, विश्वसनीय फैशन में नहीं। ऐसे कई तरीके हैं जिनकी मैं निश्चित रूप से अनुशंसा नहीं करूंगा इस मामले के लिए:

अगर आप UNIQUE . का इस्तेमाल करते हैं (userid, status) . पर प्रतिबंध (जिसे पृष्ठभूमि में एक अद्वितीय अनुक्रमणिका के साथ भी कार्यान्वित किया जाता है!), आप इसे आंशिक नहीं बना सकते , और सभी संयोजन अद्वितीय होने के लिए लागू किए जाते हैं। आप कर सकते थे यदि आप status IS NULL . के साथ काम करते हैं, तब भी इसका उपयोग करें 'Active' . को छोड़कर सभी मामलों के लिए मामला। लेकिन यह वास्तव में सभी . सहित एक बहुत बड़ा सूचकांक लागू करेगा पंक्तियाँ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अपाचे केयेन/पोस्टग्रेएसक्यूएल:बहुत से क्लाइंट पहले से ही त्रुटि कर रहे हैं

  2. हेरोकू पर खिचड़ी भाषा pg_restore:इनपुट फ़ाइल से नहीं पढ़ सका:फ़ाइल का अंत

  3. pqxx एक कार्य लेनदेन का पुन:उपयोग / पुन:सक्रिय करें

  4. Psycopg2, Postgresql, Python:थोक-सम्मिलित करने का सबसे तेज़ तरीका

  5. Postgresql में ऑटो इंक्रीमेंट अल्फा-न्यूमेरिक वैल्यू कैसे करें?