2010-07-05 20 views
12

मैं अपने .NET ऐप में एक GUID का उपयोग करने के बारे में सोच रहा हूं जो SQL सर्वर का उपयोग करता है। क्या मुझे एक संग्रहित प्रक्रिया लिखनी चाहिए जो दर्ज किए गए प्रत्येक रिकॉर्ड पर GUID उत्पन्न करती है या मुझे इसे सीधे एप्लिकेशन से उत्पन्न करना चाहिए। सवाल पूछने के लिएGUID उत्पन्न करना

कारण (यदि गलत इस में मुझे सही कर रहा हूँ):

मैं (पूर्व के रूप में /) sume:

कि जब डेटाबेस से GUID पैदा करने के लिए, आप यह मान सकते हैं डीबी याद है पिछली जेनरेट की गई GUID जहां एप्लिकेशन को याद रखना मुश्किल है।

+1

क्यों पिछले GUID महत्वपूर्ण या आवश्यक याद है? –

+2

यदि आप अपने डेटाबेस में प्राथमिक कुंजी के रूप में GUID का उपयोग कर रहे हैं, तो पेशेवरों और विपक्षों का ध्यान रखें;) http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus- guids.html – Tony

उत्तर

22

एसक्यूएल सर्वर में निर्मित GUID का निर्माण है। इसके लिए एक अलग संग्रहीत प्रक्रिया लिखने की आवश्यकता नहीं है।

आप

उपयोग कर सकते हैं दोनों प्रक्रियाओं के बीच मुख्य अंतर यह होगा कि अनुक्रमिक GUID इस्तेमाल किया जाना चाहिए अगर यह एक प्राथमिक क्लस्टर के लिए है कुंजी।

मुझे यकीन नहीं है क्यों आप डेटाबेस इंजन को पिछले जेनरेट किए गए GUID को याद रखना चाहते हैं।

5

नहीं, आपकी धारणा गलत है: डेटाबेस कुछ भी याद नहीं रखेगा - इसलिए उस दृष्टिकोण से कोई लाभ नहीं है।

आप अपनी प्राथमिक कुंजी/एसक्यूएल सर्वर में क्लस्टरिंग कुंजी है, जो एक बुरा विचार के साथ शुरू करने के लिए है के रूप में GUID उपयोग कर रहे हैं (देखें here, here या here क्यों ऐसी बात है), तो आपको चाहिए कम से कम उपयोग newsequentialid() उस कॉलम पर डिफ़ॉल्ट बाधा के रूप में कार्य करता है।

CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID()) 

इस तरह से, डेटाबेस अपने पी के लिए छद्म अनुक्रमिक GUID के उत्पन्न होगा और इस तरह एक GUID पी/सी के रूप में कम से कम सहने ....

आप अगर 'का उपयोग कर के नकारात्मक प्रभावों को होगा GUID का उपयोग अपनी प्राथमिक कुंजी के रूप में नहीं कर रहे हैं, तो मुझे वास्तव में सर्वर पर उस GUID को बनाने में कोई लाभ नहीं दिख रहा है।

+0

मैं कुछ वैध bussiness मामलों के बारे में सोच सकता हूं जहां एक (अनुक्रमिक) GUID का उपयोग करना एक अच्छा विकल्प होगा। एएमओएफ, अगर हम कुछ साल पहले जानते थे कि हम अब क्या जानते हैं, तो हम शायद उन्हें लागू कर चुके हैं और हमें हमारी मुख्य शाखा के साथ डेटा का आदान-प्रदान करने की कोशिश करने में बहुत परेशानी (और पैसा) बचाया है। –

+1

@ लिवन: ऐसा लगता है कि आप प्रतिकृति के बारे में बात कर रहे हैं - शायद यह एकमात्र वैध मामला है जहां आपको वास्तव में उनकी आवश्यकता है। उन्हें अपना पीके बनाएं, लेकिन यदि कभी भी संभव हो, तो अपनी क्लस्टरिंग कुंजी के रूप में कुछ और उपयोग करें! –

+0

@marc_s धन्यवाद। लेकिन अगर सर्वर पुनरारंभ होता है तो क्या होगा ?? जैसा कि मुझे पता है कि आप अपना अनुक्रमिक खो देंगे। क्या मै गलत हु ? –

3

मेरी प्राथमिकता अनुप्रयोग में GUID बनाने के लिए डीबी नहीं है।

-1

RFC4122 1: «यह मानकर न चलें कि UUIDs का अनुमान लगाना मुश्किल है, उन्हें सुरक्षा क्षमताओं के रूप में उपयोग नहीं किया जाना चाहिए (पहचानकर्ता जिनके पास केवल कब्जा पहुंच है), उदाहरण के लिए। एक अनुमानित यादृच्छिक संख्या स्रोत स्थिति को बढ़ा देगा »।

सरल कार्य में वृद्धिशील यूंट 64 बेहतर है।

GUID का उपयोग नहीं करें! अगर सुरक्षा की ज़रूरत है।

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b37b3438-90f4-41fb-adb9-3ddba16fe07c

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