2009-04-22 9 views
31

एसक्यूएल में बूलियन मानों को नल के बिना बिट डेटा प्रकारों के रूप में संग्रहीत करने के कारण हैं? मैं उन्हें अक्सर 0 और 1 के मानों को सीमित करने के लिए बाधाओं के बिना पूर्णांक के रूप में संग्रहीत करता हूं, और बिना किसी बाधा के टी/एफ, ट्रू/फाल्स, हां/नहीं, आदि जैसी चीजों के तारों के रूप में। क्या उन्हें बिट्स के रूप में स्टोर करना बेहतर नहीं है और अतिरिक्त बाधाओं के बारे में चिंता करने की ज़रूरत नहीं है? मुझे यहां क्या समझ नहीं आ रहा है?एसक्यूएल में बूलियन मानों को बिट डेटा प्रकारों के रूप में संग्रहीत करने के कारण हैं?

उत्तर

43

मैं हमेशा छोटी से छोटी डेटा प्रकार मैं इस स्टोर करने के लिए कर सकते हैं के साथ रहना चाहते हैं लापता नहीं कर रहे हैं।

  • SQLServer: बीआईटी
  • ओरेकल: संख्या (1) (या PL/SQL में बूलियन)
  • MySQL: Oracle की बूलियन: TINYINT

संपादित करें (iirc बूलियन नक्शे यह स्वचालित रूप से करने के लिए) पीएल/एसक्यूएल केवल टेबल परिभाषा नहीं है। इसे प्रतिबिंबित करने के लिए अद्यतन उत्तर।

+1

पुन:। "सबसे छोटा डेटा प्रकार उपलब्ध": SQL सर्वर बीआईटी मान वास्तव में एक बिट चौड़ा नहीं है, लेकिन पूर्ण बाइट चौड़े के गुणक हैं। हालांकि, एक ही तालिका में एक से अधिक बीआईटी एक ही भंडारण में ध्वस्त हो गया है। – Tomalak

+0

MySQL भी बीआईटी प्रकार का समर्थन करता है, और इसकी स्टोरेज आवश्यकताएं ठीक तरह काम करती हैं जैसे टोमालक ने समझाया। –

+0

@ चाड: MySQL बीआईटी कॉलम एसक्यूएल सर्वर बीआईटी कॉलम से अलग हैं; एक SQLServer बीआईटी फ़ील्ड केवल एक मान स्टोर करता है, और बीआईटी फ़ील्ड एक साथ एकत्र किए जाते हैं जब एक से अधिक होते हैं। एक MySQL बीआईटी फ़ील्ड 1 से 64 बिट्स (घोषणा के आधार पर) के साथ एक बिटमास्क है। – Powerlord

0

एक कारण यह है कि लोगों को थोड़ा सा पता नहीं है या लगता है कि y/n प्रारूपण के लिए आसान है। अन्य कारण यह है कि कभी-कभी आप सोचते हैं: हम्म शायद समय के साथ यह एक बूल क्षेत्र से अधिक होगा। और आप इसे सिर्फ मामले में int बनाते हैं।

आप कुछ भी :)

11

क्या आम तौर पर सड़क के नीचे होता है कि किसी को एक शायद हाँ करने के लिए भी जोड़ने के लिए और कोई, अगर आप थोड़ा तो अब आप

TINYINT अगर आप tinyint शुरू करने के लिए किया था अपने सभी कोड बदलने के लिए चाहता है तब आप नहीं करते ..... मेरा मानना ​​है कि यह आपको लगता है कि

+0

+1 मैं इस स्थिति में पहले भाग गया हूं ... अक्सर नहीं, लेकिन इसने इसे बदसूरत सिर रखा है। – mattruma

+1

सोचा, अक्सर प्रतिक्रिया करने में मुश्किल नहीं होती है। – mattruma

+0

+1 मुझे लगता है कि यह अपने जीवन में किसी बिंदु पर एक बूल से किसी राज्य या स्थिति कॉलम में बदल सकता है। – cgreeno

4

जब मैं डेटाबेस में बूलियन चाहता हूं तो मैं हमेशा बिट डेटा प्रकार का उपयोग करता हूं। एसक्यूएल में वे पूर्ण हो सकते हैं। लेकिन जब आप अपना प्रोग्राम चलाते हैं तो आपको यह समझना होगा कि एक बूल (उदा। सी #) एक मूल्य प्रकार है जो इस मामले में पूर्ण नहीं हो सकता है। आपको System.DBNull मान से तुलना करना होगा।

+1

क्या आप सिर्फ वैरिएबल को Nullable के रूप में निर्दिष्ट नहीं कर सकते हैं, जो कि NULL मान को संभालेगा? – mattruma

+1

इसे एसक्यूएल में एक पूर्ण नहीं बनाते ....... टेबल ब्ला (उत्तर बिट शून्य नहीं) – SQLMenace

+0

समस्या यह है कि ADO.NET समर्थन करता है या कुछ अन्य डेटा एक्सेस फ्रेमवर्क। अगर यह Nullable की अनुमति देता है तो हम ठीक हैं! – rguerreiro

4

हम हमेशा डेटा को थोड़ा सा स्टोर करते हैं, यह छोटा है, और अधिक महत्वपूर्ण बात यह है कि यह इस मामले के लिए डिज़ाइन किया गया है।

हमारे पास ऐसे समय थे जहां अंतिम उपयोगकर्ता डेटा के साथ सीधे काम करने जा रहा था, और उनके लिए, हां/नहीं या वाई/एन अधिक पठनीय था। इस मामले में, हमने अभी एक ऐसा दृश्य बनाया है जो मित्रवत डेटा प्रदर्शन को प्रतिबिंबित करता है।

+5

मेरी पहली परियोजना में आने के बाद मेरी आखिरी 2 नौकरियां उन्होंने मुझे वापस जाने और सभी 0 के 'एन' और 1 से 'टी' में बदलने के लिए दोनों का एक ही कारण था। "हम कभी याद नहीं कर सकते कि कौन सा है" मैंने सोचा 0 = झूठी 101 कंप्यूटिंग कर रहा था लेकिन स्पष्ट रूप से यह जानना बहुत आम बात है। या शायद यह एक संकेत है कि मैं काम करने के लिए अच्छी जगह नहीं चुन रहा हूं। – dwidel

7

मैं देख रहा हूँ उन्हें अक्सर 0 और 1 के लिए मूल्यों को सीमित करने की कमी के बिना पूर्णांकों के रूप में जमा है, और के रूप में बातें टी/एफ, सही/गलत, हाँ/नहीं, आदि, की तरह फिर से बिना साथ तार बाधाओं। क्या यह उन्हें बिट्स के रूप में स्टोर करने के लिए बेहतर नहीं है और को अतिरिक्त बाधाओं के बारे में चिंता करने की ज़रूरत नहीं है?

हाँ!

मुझे यहां क्या याद आ रही है?

वास्तव में यह होना चाहिए "मैं यहां क्या नहीं खो रहा हूं?" और जवाब होगा: सामान्य ज्ञान

3

बीआईटी आमतौर पर बुलेटियन मूल्यों को संग्रहीत करने के लिए उपयोग की जाने वाली डेटाटाइप है। सिर्फ इसलिए कि अगर बीआईटी 1 है तो यह सच है और 0 फिर झूठी है। यह इतना आसान है।

0

मुझे लगता है कि तीसरा सामान्यीकरण फ़ॉर्म यह बताएगा कि आपके पास एक सारणी होनी चाहिए जो मूल्यों को सही और गलत रखती हो, और संदर्भ। सुनिश्चित करें कि आप अपनी तिथियों के साथ भी ऐसा करते हैं!

लेकिन जो पूरी तरह से 3 एनएफ का पालन करता है? ;)

+1

आप तीसरे सामान्य फॉर्म की अपनी परिभाषा के लिए एक अलग स्रोत खोजना चाहेंगे। ऐसा कुछ भी नहीं है जो बताता है कि सभी कॉलम में सभी मानों को कहीं भी टेबल में संग्रहीत किया जाना चाहिए। –

-1

मैं थोड़ा सा उपयोग करता हूं। लेकिन कभी-कभी मैं झूठी वापसी करने की क्षमता प्राप्त करना चाहता हूं - या सत्य के कई मूल्य (जैसे त्रुटि संदेश)।

0 = झूठी 1 = पासवर्ड गलत 2 = प्रयोक्ता नाम मौजूद नहीं है: तो अगर मैं बूलियन के बजाय एक पूर्णांक का उपयोग मैं की तरह कुछ doe कर सकते हैं। 3 = खाता लॉक हो गया - कई विफल प्रयासों के लिए। 4 = खाता अक्षम।

और इसी तरह।

+2

फिर यह एक बुलियन नहीं है। यह एक कोड मूल्य है। परिभाषा के अनुसार एक बूलियन सत्य या गलत है और सत्य की कई परिभाषाएं नहीं हैं। –

+0

जैसा कि मैंने कहा था कि मैं थोड़ा सा उपयोग करता हूं। मैंने फिर एक वैकल्पिक समाधान दिया। और यदि आप मेरी पोस्ट पढ़ते हैं तो मैंने कभी-कभी कहा कि मैं एक बूलियन की बजाय int का उपयोग करता हूं। –

3

कुछ कारणों ऐसा करने के लिए नहीं शामिल हैं:

नहीं सभी डेटाबेस थोड़ा डेटाप्रकार है ताकि आप पूर्णांक के बजाय का उपयोग differnt बैकेंड

उपयोग करने के लिए कुछ डेटाबेसों आप कर सकते हैं नहीं सूचकांक थोड़ा क्षेत्र में सक्षम होने के लिए।

और आपके पास जो भी है वह सचमुच सच/झूठा नहीं है, हां/नहीं, अन्य संभावनाओं के साथ। उदाहरण के लिए आपके पास स्थिति के लिए थोड़ा सा क्षेत्र हो सकता है जिसका अर्थ है खुले या बंद जैसे कुछ। लेकिन बाद में आप महसूस करते हैं कि आपको स्थिति के रूप में भी रद्द करने की आवश्यकता है।

1

यदि आपके पास दो से अधिक स्थितियां हैं तो Enum का उपयोग करें।

संबंधित मुद्दे

 संबंधित मुद्दे