2014-04-18 5 views
8

क्या SQLite डेटाबेस में प्राथमिक कुंजी के रूप में टेक्स्ट रखना बुरा है? मैंने सुना है कि प्रदर्शन कारणों से यह बुरा है, क्या यह सच है? और इस तरह के मामले में पंक्ति को वास्तविक प्राथमिक कुंजी के रूप में इस्तेमाल किया जाएगा?SQLite तालिका में प्राथमिक कुंजी के रूप में पाठ का उपयोग करना बुरा है?

उत्तर

-6

क्या SQLite डेटाबेस में प्राथमिक कुंजी के रूप में टेक्स्ट होना बुरा है? मैंने सुना है कि यह प्रदर्शन कारणों से खराब है, क्या यह सच है?

मैं कभी नहीं सुना कि किसी के रूप में प्राथमिक कुंजी तालिका में स्ट्रिंग का इस्तेमाल किया। मेरे लिए (और मैं ईमानदारी से दूसरों के लिए भी आशा करता हूं) बहुत कम प्रदर्शन के साथ बहुत "बदसूरत" अभ्यास

आप स्ट्रिंग प्राथमिक कुंजी के रूप में आप एक "कुछ" चीजों के बारे में सोचने के लिए की जरूरत है इस्तेमाल करेंगे, तो:

  • 3 प्रतीकों का संयोजन हो जाएगा?
  • या मुझे 5 प्रतीकों का उपयोग करना चाहिए?

यहाँ, प्रत्येक पंक्ति एक ही प्रारूप (बेशक पठनीयता मुद्दा) होना आवश्यक है और यह भी अद्वितीय हो। ओह! यहाँ अगले "पिग्गी काम" है-> आप कुछ "अद्वितीय स्ट्रिंग जनरेटर" कि अद्वितीय स्ट्रिंग identificator उत्पन्न होगा बनाने की आवश्यकता होगी।

  • लंबे समय तक तार = स्वचालित रूप से कठिन है और कठिन तुलना करने के लिए
  • तालिका के आकार मौलिक को जन्म देती है, क्योंकि यह बहुत स्पष्ट है स्ट्रिंग के रूप में और अधिक आकार की है कि:

    और यह भी वहाँ अगले मुद्दे हैं पर विचार करने के लिए अच्छा है संख्या

  • पंक्तियों की संख्या - यह पागलपन प्राथमिक कुंजी के रूप स्ट्रिंग का उपयोग करने के लिए आप तालिका 1000 पंक्तियों
हो सकता है अगर

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

और निष्कर्ष क्या है?

मैं आपको प्राथमिक कुंजी के रूप में स्ट्रिंग का उपयोग करने की सलाह नहीं देता हूं। इसके फायदे के रूप में अधिक नुकसान हैं (यह वास्तव में कुछ फायदा है?)।

प्राथमिक कुंजी के रूप में संख्या का उपयोग अधिक बेहतर है (मुझे सर्वश्रेष्ठ कहने के लिए डर है) अभ्यास।

और क्या इस तरह के मामले में पंक्ति को वास्तविक प्राथमिक कुंजी के रूप में उपयोग किया जाएगा?

यदि आप प्राथमिक रूप से स्ट्रिंग का उपयोग करेंगे।

वास्तविक तारों में शायद ही कभी अद्वितीय हैं।

बेशक , आप कह सकते हैं कि आप पंक्ति में आइटम का नाम से identificator बना सकते हैं, लेकिन यह एक बार फिर से स्पेगेटी कोड है (आइटम एक ही नाम है सकते हैं)।

+1

यह तथ्य है कि मेरी स्ट्रिंग किसी सर्वर से आती है, यह अद्वितीय होने की गारंटी है, और हमेशा एक सेट लंबाई इस उत्तर को बदलती है? – mpellegr

+0

@mpellegr आम तौर पर, प्राथमिक कुंजी के रूप में स्ट्रिंग का उपयोग अच्छा अभ्यास नहीं है, मैंने अपने उत्तर में कैसे लिखा;) – Sajmon

+0

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

14

क्या SQLite डेटाबेस में प्राथमिक कुंजी के रूप में टेक्स्ट रखना बुरा है? मैंने सुना है कि प्रदर्शन कारणों से यह बुरा है, क्या यह सच है?

शुद्धता बिंदु से, TEXT PRIMARY KEY ठीक है।

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

और क्या इस तरह के मामले में पंक्ति को वास्तविक प्राथमिक कुंजी के रूप में उपयोग किया जाएगा?

केवल INTEGER PRIMARY KEYROWID के साथ अलियाड हो जाता है। अन्य प्रकार की प्राथमिक कुंजी नहीं होती है, और WITHOUT ROWID निर्दिष्ट होने तक अंतर्निहित पूर्णांक पंक्तिबद्ध होगा। Reference

+0

तब के लिए उपयोग की जाने वाली निहित पंक्ति क्या है? – mpellegr

+0

स्पष्टता के लिए आप स्पष्ट रूप से बता सकते हैं कि यह निहित पंक्ति है जिसे टेक्स्ट प्राथमिक कुंजी के संदर्भ में संदर्भित किया गया है? – dobbs

5

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

प्रदर्शन के अनुसार, 10000 प्राथमिक कुंजी लुकअप करने के लिए बेंचमार्क चलाते समय मुझे कोई मापनीय अंतर नहीं मिला, वास्तव में, डेटाबेस इंडेक्स न तो स्टोर करता है और न ही अनुक्रमित खोजों को चलाने के दौरान स्ट्रिंग की तुलना करता है।

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

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