SQLite

2013-06-24 9 views
36

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

उत्तर

20

SQLite प्राथमिक कुंजी के रूप में data type का उपयोग करने की अनुमति देता है।

यूयूआईडी को स्ट्रिंग्स (जो मानव-पठनीय हैं) या 16-बाइट बीएलओबी के रूप में संग्रहीत किया जा सकता है (जो रिकॉर्ड इतने छोटे हो सकते हैं कि अंतर इतना महत्वपूर्ण है)।

+0

उन डेटा प्रकार के या तो अधिक कुशल हैं यूयूआईडी भंडारण के लिए दूसरे की तुलना में? –

+2

अन्य पाठकों के लिए ... मानव-पठनीय 36-वर्ण हेक्स स्ट्रिंग इस तरह दिखता है: '988097c8-3f9c-4ecf-9d1d-64701bb9764c' –

+2

UUID BLOB बनाम टेक्स्ट फ़ाइल आकार का मामला है, हालांकि, सम्मिलित करने और क्वेरी की गति के बारे में है वही, देखें http://stackoverflow.com/a/11337522/254109 – xmedeko

20

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

लेकिन अधिक सीधे जवाब देने के लिए मुझे लगता है कि सवाल है, नहीं, SQLite में कोई भी विशेषताएं नहीं है जो सीधे यूयूआईडी का समर्थन करती है। SQLite कॉलम के घोषित प्रकार का उपयोग यह निर्धारित करने के लिए करता है कि पांच अंतर्निहित storage classes (पूर्णांक, वास्तविक, पाठ, ब्लॉब या शून्य) का उपयोग किस प्रकार किया जाएगा। लेकिन एक कॉलम के घोषित प्रकार को अन्यथा अनदेखा किया जाता है। तो कोई यूयूआईडी-विशिष्ट कॉलम प्रकार या स्टोरेज क्लासेस नहीं हैं। प्रारूपित यूयूआईडी स्ट्रिंग में कनवर्ट करने के लिए उपलब्ध functions भी प्रतीत नहीं होता है। अपने यूयूआईडी बाइट्स प्राप्त करने के लिए, आप देखना चाहते हैं कि आपके एप्लिकेशन में लिखी गई भाषा द्वारा कौन सी विधियां प्रदान की जाती हैं। एक्समैपल के लिए, जावा के UUID कक्षा या ऐप्पल के NSUUID

4

डिफ़ॉल्ट क्षेत्र के रूप में उपयोग के बारे में सुनिश्चित नहीं हैं, लेकिन किसी को इस्तेमाल किया जा सकता दृष्टिकोण suggested here निम्नलिखित SQLite क्वेरी में अनूठा मूल्य उत्पन्न करने के लिए की जरूरत है:

randomblob (एन) समारोह एक एन-बाइट ब्लॉब युक्त छद्म वापसी यादृच्छिक बाइट्स। यदि एन 1 से कम है तो 1-बाइट यादृच्छिक ब्लॉब वापस कर दिया जाता है। सुझाव: अनुप्रयोगों हेक्स के साथ मिलकर इस समारोह का उपयोग कर विश्व में एकमात्र पहचान उत्पन्न कर सकते हैं() और/या कम() इस तरह:

hex(randomblob(16)) 

या

lower(hex(randomblob(16))) 
+3

यूयूआईडी 'randomblob (16) 'नहीं है, http://stackoverflow.com/a/22725697/254109 देखें यदि आपको सटीक यूयूआईडी की आवश्यकता नहीं है, तो 'randomblob' पर्याप्त है। – xmedeko

+3

छद्म-यादृच्छिक बाइट _Uot_ यूयूआईडी के समान हैं। – Bill