2012-07-15 15 views
13

मैं पिछले कुछ वर्षों से ओरेकल के साथ ज्यादातर काम कर रहा हूं, और बूलियन मूल्यों के रूप में उपयोग किए जाने वाले सिंगल कैरेक्टर वर्चर कॉलम को देखने के लिए काफी उपयोग किया जाता है।संबंधपरक डेटाबेस डिज़ाइन में बुलेन प्रकार कॉलम समस्याग्रस्त क्यों हैं?

मैं भी देख सकता हूं (प्रति स्टैक ओवरफ़्लो उत्तरों), जो कि MySQL के लिए सुझाए गए प्रकार TINYINT है।

अब मैंने अपनी छोटी तरफ परियोजना को लिया है - डर्बीडीबी का उपयोग करके, और यह बुलेन कॉलम का समर्थन करता है, लेकिन संस्करण 10 के बाद तक नहीं।

तो सवाल यह है कि एक संबंधपरक डेटाबेस को डिजाइन करते समय एक बुलेन कॉलम को शामिल करना इतना मुश्किल क्यों है? क्या मुझे कुछ याद आ रही है, या क्या यह सिर्फ टू-डू सूची को महत्वहीन के रूप में धक्का दे रहा है, क्योंकि आप इस बीच एक और कॉलम प्रकार का उपयोग कर सकते हैं?

+0

उस प्रकार के लिए समर्थन की क्या ज़रूरत थी और बहुत अच्छी तरह से अपनी सूची एसक्यूएल सर्वर में जोड़ने के लिए केवल 'समर्थन करता है, बल्कि' एएनएसआई से bit' 'बूलियन डेटाटाइप। –

+0

हाँ और उन सभी के साथ जिन्हें आपने डेटाबेस में क्वांटिक बिट कार्यान्वयन के बारे में बहुत उत्साहित किया है ... – Sebas

+0

यह बहस सी ++ और अन्य भाषाओं में लड़ी गई थी और बहुत समय पहले 'बूल' समर्थकों द्वारा जीती थी और अधिकांश डीबीएमएस इसे एक तरह से समर्थन देते थे या दूसरा भी। दुर्भाग्य से, कुछ अभी भी पीछे हट रहे हैं, विशेष रूप से ओरेकल। स्पष्ट रूप से, मैंने अभी तक सभी स्पष्टीकरणों को सुना है कि क्यों मुझे पूरी तरह समझ में नहीं आता है ... –

उत्तर

7

टॉम Kyte काफी अपने अंतिम वाक्य in this blog entry गूँज:

"यह सिर्फ एक प्रकार हमारे पास नहीं है - मैं कोई और अधिक और कम नहीं कह सकते हैं।एएनएसआई में यह नहीं है - कई डेटाबेस में यह नहीं है (हम निश्चित रूप से अकेले नहीं हैं)। चीजों की भव्य योजना में - मैं कहूंगा कि इस बात का priotization सुंदर "कम" है (वहाँ मेरी राय thats) "

उन्होंने ओरेकल के नजरिए से बात कर रहा है, लेकिन यह किसी भी संबंधपरक आरडीबीएमएस पर लागू होता है।।

+2

मेरे लिए कौन सा अनुवाद करता है: "हम डेवलपर्स के बारे में कोई छल नहीं देते हैं, क्योंकि वे वैसे भी उत्पादों को स्विच नहीं कर सकते हैं" –

+0

@ जेन्स स्काउडर: मेरे लिए यह भी अनुवाद करता है "* हमें परवाह नहीं है कि एएनएसआई मानक क्या कहता है * "। टॉम का बयान 2002 से है और 'बुलीयन' प्रकार एसक्यूएल 99 में पेश किया गया था। –

-1

मैं पता नहीं है के रूप में मैं एक नहीं बनाया गया है, लेकिन मेरा अनुमान होगा कि चूंकि आरडीबीएमएस के वर्णन करने और चीजों की सेट को संग्रहीत करने के बारे में हैं, बूलियन क्षेत्रों की जरूरत नहीं कर रहे हैं क्योंकि वे भी निरूपित करेगा में क्या है एक सेट, लेकिन वे सेट की सदस्यता के रूप में अपरिपक्व हैं डेटाबेस के वास्तविक डेटा या संरचना से लिया जाएगा।

उदाहरण के तौर पर, कर्मचारियों को दी गई भूमिकाओं के लिए एक बूलियन कॉलम लें जहां वे या तो प्रबंधक हैं, या वे नहीं हैं। आप इसका वर्णन करने के लिए एक बूलियन कॉलम का उपयोग कर सकते हैं, लेकिन आप करना चाहिए या तो प्रबंधकों के लिए एक टेबल है, और गैर प्रबंधकों के लिए एक तालिका है, या (और यह अधिक लचीला और शायद अधिक प्रबंधनीय तरीका होगा) अतिरिक्त बनाने के लिए "लुकअप" टेबल जो रोल (एक टेक्स्ट कॉलम के रूप में) और कुंजी को तब दिया जाता है जिसे कर्मचारियों की तालिका में (एक विदेशी कुंजी) कहा जाता है। एक बूलियन एक में उपयोग करने के लिए जहां खंड एक आह्वान होगा -


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

+2

जहां एक खंड में एक बूलियन * नहीं * जरूरी है कि एक टेबल स्कैन का उपयोग किया जाएगा। यह इस बात पर निर्भर करता है कि कितनी पंक्तियां वापस आ जाएंगी (जैसा कि किसी भी अन्य शर्त के साथ) –

+0

@a_horse_with_no_name यह दिलचस्प है, क्या आपके पास उपयोगी लिंक है? – iain

+0

@ लैन: वास्तव में नहीं, लेकिन यह इंडेक्स उपयोग (गैर कवरिंग इंडेक्स) के लिए सामान्य नियम है: एक बार तालिका से पुनर्प्राप्त पंक्तियों की संख्या एक निश्चित दहलीज से अधिक हो जाती है, तालिका स्कैन इंडेक्स स्कैन की तुलना में तेज़ है। नतीजतन यदि पंक्तियों की संख्या पर्याप्त छोटा है तो इंडेक्स स्कैन का उपयोग किया जाएगा। इससे कोई फर्क नहीं पड़ता कि अनुक्रमित कॉलम में डेटाटाइप क्या है। –

12

डर्बी के मामले में, विशेष रूप से, उत्तर अजीब इतिहास का थोड़ा सा है: ओर्बी स्रोत डेटाबेस, डर्बी को क्लाउडस्केप कहा जाता था, और एक स्वामित्व वाला उत्पाद था। उस समय, यह पूरी तरह से बुलेन का समर्थन किया।

इसके बाद, क्लाउडस्केप इनफॉर्मिक्स द्वारा खरीदा गया था जिसे आईबीएम द्वारा खरीदा गया था, और आईबीएम इंजीनियरिंग ने डीबी 2 के साथ डर्बी को संगत बनाने का फैसला किया। इसका कारण यह था कि, यदि दो डेटाबेस संगत थे, तो उपयोगकर्ताओं के लिए डर्बी डेटाबेस और डीबी 2 डेटाबेस के बीच अपने अनुप्रयोगों को माइग्रेट करना आसान होगा। इंजीनियरिंग कर्मचारियों ने हालांकि, डर्बी से गैर-डीबी 2-संगत सुविधाओं को नहीं हटाया, उन्होंने उन्हें आसानी से एसक्यूएल व्याकरण में अक्षम कर दिया, जिससे अधिकांश कार्यान्वयन जगह पर आ गया।

इसके बाद, आईबीएम ओपन-सोर्स क्लाउडस्केप अपाचे सॉफ्टवेयर फाउंडेशन में, जिसे डर्बी नाम दिया गया। ओपन सोर्स समुदाय, अब डीबी 2 के साथ पूरी तरह से संगत होने की आवश्यकता से बंधे नहीं है, ने बुलेन डेटाटाइप समर्थन को पुनर्जीवित करने का फैसला किया है। और इसलिए डर्बी में अब बुलेन डेटाटाइप समर्थन है।

+0

+1। इसके बारे में कभी भी सोचा नहीं। बहुत दिलचस्प। –

2

PostgreSQL जब तक मुझे लगता है कि कर सकते हैं के लिए boolean के लिए समर्थन करता है

सबसे पुराना ऑनलाइन दस्तावेज़ मैं पा सकते हैं संस्करण 6.3 के लिए जारी किया गया है 1998/03/01 वे बूलियन प्रकार का उल्लेख:।।

http://www.postgresql.org/docs/6.3/static/c0805.htm

later docs में वे SQL99 का उल्लेख मानक के रूप में करते हैं।

के बाद से SQL99 इस प्रकार मैं ग्रहण करेंगे उल्लेख करने के लिए लगता है, कि कई डीबीएस से पहले 1999

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