2015-10-22 8 views
5

मैं MySQL से आ रहा हूं, और MySQL में आप प्राथमिक कुंजी के रूप में पंक्ति की अद्वितीय आईडी के लिए ऑटोमेशन का उपयोग कर सकते हैं।पोस्टग्रेस्क्ल: प्राथमिक कुंजी के लिए यूयूआईडी या सीक्वेंस?

मुझे लगता है कि पोस्टग्रेस्क्ल, केवल अनुक्रम या यूयूआईडी में कोई ऑटोमेशन नहीं है। मैंने कहीं पढ़ा है कि हम यूयूआईडी को तालिका की प्राथमिक कुंजी के रूप में उपयोग कर सकते हैं। इसमें अन्य उपयोगकर्ता की आईडी मास्किंग का अतिरिक्त लाभ है (क्योंकि मैं एपीआई बनाना चाहता हूं जो आईडी को पैरामीटर के रूप में लेते हैं)। Postgresql के लिए मुझे किस का उपयोग करना चाहिए?

उत्तर

7

PostgreSQL में एक sequence बिल्कुल MySQL में AUTOINCREMENT के रूप में ही है। sequenceuuid से अधिक कुशल है क्योंकि यह uuid के लिए 16 के बजाय 8 बाइट्स है। आप किसी अन्य डेटा प्रकार की तरह, प्राथमिक कुंजी के रूप में uuid का उपयोग कर सकते हैं।

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

यदि आप अन्य आईडी अनुमान लगाने की कोशिश कर रहे हैंकर्स को स्नूप करने से उपयोगकर्ता डेटा के साथ एक तालिका की रक्षा करना चाहते हैं, तो uuid प्रकार एक उत्कृष्ट विकल्प है। संस्करण 4 तब सबसे अच्छा विकल्प है क्योंकि इसमें 122 यादृच्छिक बिट्स हैं (अन्य 6 संस्करण की पहचान के लिए उपयोग किए जाते हैं)। आप इस तरह की प्राथमिक कुंजी बना सकते हैं:

id uuid PRIMARY KEY DEFAULT uuid_generate_v4() 

और फिर आपको इसके बारे में और चिंता करने की आवश्यकता नहीं होगी।

+0

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

+1

दाएं। अद्यतन उत्तर देखें। – Patrick

+0

@ जस्टिन: मैं दोनों का उपयोग करता हूं। अपनी प्राथमिक कुंजी को 'धारावाहिक' के रूप में परिभाषित करें, और API कॉल के लिए उपयोग किए जाने वाले अद्वितीय 'uuid' कॉलम को शामिल करें। –

1

आप यूयूआईडी को अपनी तालिका में प्राथमिक कुंजी के रूप में उपयोग कर सकते हैं क्योंकि यह अद्वितीय होगा। हालांकि ध्यान रखें कि SEUENCE की तुलना में यूयूआईडी थोड़ा अधिक स्थान पर कब्जा करेगा। और वे भी बहुत तेज़ नहीं हैं। लेकिन हाँ वे निश्चित रूप से अद्वितीय हैं और इसलिए आपको एक सतत डेटा प्राप्त करने की गारंटी है।

तुम भी उल्लेख कर सकते हैं:

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