2010-10-01 6 views

उत्तर

2

संक्षिप्त उत्तर: हाँ आप कर सकते हैं। बेशक आपको यह सुनिश्चित करना होगा कि नया मान किसी भी मौजूदा मूल्य से मेल नहीं खाता है और अन्य बाधाएं संतुष्ट हैं (दुह)।

आप वास्तव में क्या करने की कोशिश कर रहे हैं?

+0

मेरा अनुमान डेटाबेस 2 में डेटाबेस 2 विलय कर देगा, जहां प्रत्येक में उपयोगकर्ता तालिका होती है, और उन 2 तालिकाओं में, समान उपयोगकर्ता नाम में एक अलग आईडी (ऑटोइनक्रिकमेंट आईडी) होती है। –

3

आप कर सकते हैं जब तक

रूप
  • मूल्य अद्वितीय है
  • कोई मौजूदा विदेशी कुंजी
1

का उल्लंघन होता है आप कुछ निश्चित परिस्थितियों में कर सकते हैं।

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

थॉमस

+2

"प्राथमिक कुंजी शुद्ध तकनीकी होनी चाहिए और किसी भी व्यवसाय का अर्थ नहीं लेना चाहिए" - यह आपकी राय है, तथ्य नहीं। सरोगेट बनाम प्राकृतिक बहस बंद नहीं हुई है। –

+1

जबकि मैं मानता हूं कि बहस अभी भी खुली है, यह मामला सरोगेट्स के लिए एक मजबूत तर्क है। – DCookie

29

यह आमतौर पर सहमति है कि primary keys should be immutable (या as stable as possible अचल स्थिति के बाद से डीबी में लागू नहीं किया जा सकता है)।

देखने के एक प्रदर्शन बिंदु से:

  • आप सभी को अपडेट करने की आवश्यकता होगी जबकि वहाँ कुछ भी नहीं है कि आप एक प्राथमिक कुंजी (अखंडता बाधा को छोड़कर) को अद्यतन करने से रोकने जाएगा, यह एक अच्छा विचार नहीं हो सकता है विदेशी कुंजी जो अद्यतन कुंजी का संदर्भ देती हैं। एक अपडेट से संभावित रूप से बहुत सारी टेबल/पंक्तियों का अद्यतन हो सकता है।
  • यदि विदेशी कुंजी अनदेखा हैं (!!) आपको अखंडता सुनिश्चित करने के लिए बच्चों की मेज पर लॉक बनाए रखना होगा। ओरेकल केवल थोड़े समय के लिए लॉक रखेगा लेकिन फिर भी, यह डरावना है।
  • यदि आपकी विदेशी कुंजी को अनुक्रमित किया गया है (जैसा कि वे होना चाहिए), तो अपडेट इंडेक्स (इंडेक्स स्ट्रक्चर में डिलीट + डालने) के अपडेट की ओर ले जाएगा, यह आम तौर पर आधार तालिका के वास्तविक अपडेट की तुलना में अधिक महंगा है।
  • ऑर्गनाइजेशन इंडेक्स टेबल (अन्य आरडीबीएमएस में, क्लस्टर प्राथमिक कुंजी देखें), पंक्तियों को प्राथमिक कुंजी द्वारा भौतिक रूप से क्रमबद्ध किया जाता है। एक तार्किक अद्यतन एक भौतिक में परिणाम होगा हटाना + डालने (और अधिक महंगी)

अन्य विचार:

  • इस कुंजी (किसी भी बाहरी प्रणाली में संदर्भित है, तो आवेदन कैश, एक और डीबी, निर्यात ...), संदर्भ अद्यतन पर तोड़ दिया जाएगा।
  • अतिरिक्त, कुछ आरडीबीएमएस कैस्केड अद्यतन, in particular Oracle का समर्थन नहीं करते हैं।

निष्कर्ष के दौरान, एक प्राकृतिक प्राथमिक कुंजी के बदले सरोगेट कुंजी का उपयोग करना आम तौर पर सुरक्षित होता है जिसे बदलने के लिए नहीं माना जाता है - लेकिन अंततः बदली गई आवश्यकताओं या डेटा के कारण अपडेट होने की आवश्यकता हो सकती है प्रवेश त्रुटि

यदि आपको बच्चों की मेज के साथ प्राथमिक कुंजी को अपडेट करना है, तो this post by Tom Kyte for a solution देखें।

+2

मैं कहूंगा कि स्थिरता को आमतौर पर अपरिवर्तनीयता के बजाय पीके की वांछनीय विशेषता के रूप में उद्धृत किया जाता है। [उदाहरण] (http://stackoverflow.com/questions/3632726/what-are-the-design-criteria-for-primary-keys/3668234#3668234) –

+0

@ मार्टिन: मैं भेद को समझता हूं लेकिन मुझे लगता है कि एक * भौतिक * प्राथमिक कुंजी (यानी जिसे आप डीबी में परिभाषित करते हैं) अपरिवर्तनीय होना चाहिए। * वैचारिक डेटा मॉडल * की प्राथमिक कुंजी में आपके द्वारा प्रदान किए गए लिंक से दिए गए उत्तरों में दिए गए गुण होना चाहिए लेकिन अंतिम भौतिक प्राथमिक कुंजी से भिन्न हो सकता है (उदाहरण के लिए परिचितता आईएमओ वास्तविक तालिका की प्राथमिक कुंजी के लिए मानदंड नहीं है)। मेरा जवाब भौतिक मॉडल की प्राथमिक कुंजी से संबंधित है। –

+0

+1, विशेष रूप से सरोगेट कुंजी सुझाव। – DCookie

6

प्राथमिक कुंजी विशेषताओं को तालिका के किसी भी अन्य विशेषता के रूप में अद्यतन करने योग्य हैं। स्थिरता अक्सर एक कुंजी की वांछनीय संपत्ति होती है लेकिन निश्चित रूप से पूर्ण आवश्यकता नहीं होती है। यदि किसी कुंजी को अद्यतन करने के लिए किसी व्यापारिक परिप्रेक्ष्य से यह समझ में आता है तो ऐसा कोई मौलिक कारण नहीं है कि आपको क्यों नहीं करना चाहिए।

2

एक रिलेशनल डेटाबेस सिद्धांत बिंदु से, तालिका की प्राथमिक कुंजी को अद्यतन करने पर बिल्कुल कोई समस्या नहीं होनी चाहिए, बशर्ते कि प्राथमिक कुंजी के बीच कोई डुप्लिकेट न हो और आप नल मान डालने की कोशिश न करें प्राथमिक कुंजी कॉलम में से कोई भी।

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