Sunday 15 September 2013

Oracle constraint check condition with null and not null -


मेरा प्रश्न बाधा जांचना है, सामान्य वाक्यविन्यास है:

  वैकल्पिक तालिका बैरकों जोड़ें कॉन्ट्रैक्ट CHK_barracks CHECK (स्थिति में ('नष्ट', 'निर्मित'))   

इसका मतलब है कि स्तंभ की स्थिति को नष्ट कर या नष्ट कर दिया जाना चाहिए।

निम्नलिखित में मैं हूं निर्दिष्ट करते हुए कि बैरस शून्य मान स्वीकार नहीं करते हैं

  वैकल्पिक तालिका बैरकों को जोड़ें सम्मिलित करें chk_barracks चेक (स्थिति में ('नष्ट', 'निर्मित') और स्थिति नहीं है)   

अब मैंने कॉलम रंग जोड़ दिया है। मैं यदि बैरकों निर्मित है, फिर रंग को red होना चाहिए निर्दिष्ट करना चाहते हैं केवल और नहीं नल

कॉलम स्थिति कॉलम > रंग होना चाहिए काला और स्तंभ STATUS होना चाहिए NULL

तो यहां जांच हो रही है बाधा है कि मैंने लिखा है:

  वैकल्पिक तालिका बैरकों जोड़ें सम्मिलित करें chk_barracks चेक ((में स्थिति ('नष्ट', 'निर्मित') और स्थिति नाल नहीं है) और (रंग में ('लाल' )) या) ((में स्थिति 'नष्ट', 'निर्मित') और स्थिति है नल) और (रंग में ('काले')))   

समस्या यह है कि अगर रंग लाल है, मैं अभी भी NULL को कॉलम <कोड> स्थिति में डाल सकता हूं। इस बाधा को कैसे एक तरीके से हल किया जा सकता है, यह मेरी स्थितियों की जांच करेगा जो मैंने ऊपर वर्णित किया है?

यह एक 'विनाशित', 'निर्मित' जैसे मूल्यों को लागू करने के लिए एक चेक बाधा का उपयोग करने के लिए बुरा विचार इसके बजाय एक लुकअप तालिका में एक विदेशी कुंजी का उपयोग करें। कुछ और के अलावा, जो तार्किक विसंगतियों को रोकना होगा जैसे:

  (स्थिति में ('नष्ट', 'निर्मित') और स्थिति IS नल है)   

आपके पास एक सरल जांच की स्थिति भी है:

  ((स्थिति शून्य और रंग = 'लाल' नहीं है) या (स्थिति शून्य है और रंग = 'काला')  < / पूर्व> 

बहुत कम से कम आपको दो अलग-अलग जांच की कमी होनी चाहिए: एक को STATUS के मानों को मान्य करने के लिए, और एक को COLOR के बीच संबंध और मान्य करने के लिए कि क्या STATUS आबादी है।


विदेशी कुंजी पर और अधिक: इस तरह एक तालिका बनाएँ: तालिका बैरकों (स्थिति) varchar2 (15) नल, बाधा bsts_pk प्राथमिक कुंजी (स्थिति) संगठन सूचकांक बनाने के लिए: barracks_statuses मूल्यों में डालें (' बैरक्स-स्टाटस मान ('निर्मित') में डालें;

फिर इस तरह एक विदेशी कुंजी को लागू करें:

  तालिका बैरकों को बदलना बाध्यता जोड़ें barr_bsts_fk विदेशी कुंजी (स्थिति) संदर्भ (स्थिति);   

इस तरह के एक दृष्टिकोण उपयोगी है क्योंकि यह अधिक लचीलापन देता है आप एक नई स्थिति जोड़ते हैं जैसे कि 'नियोजित' या डीएमएल के साथ 'निर्माण' में टाइपो को ठीक करें या कुछ जटिल चेक बाधाओं को फिर से लिखना।

No comments:

Post a Comment