यह आमतौर पर सहमति है कि प्राथमिक कुंजी अपरिवर्तनीय होनी चाहिए (या यथासंभव स्थिर होनी चाहिए क्योंकि अपरिवर्तनीयता को डीबी में लागू नहीं किया जा सकता है)। हालांकि ऐसा कुछ भी नहीं है जो आपको प्राथमिक कुंजी (अखंडता की कमी को छोड़कर) को अपडेट करने से रोकेगा, यह एक अच्छा विचार नहीं हो सकता है:
प्रदर्शन की दृष्टि से:
- आपको उन सभी विदेशी कुंजियों को अपडेट करना होगा जो अपडेट की गई कुंजी का संदर्भ देती हैं। एक ही अपडेट से संभावित रूप से बहुत सारी टेबल/पंक्तियों का अपडेट हो सकता है।
- यदि विदेशी चाबियों को अनुक्रमित नहीं किया गया है (!!) तो आपको अखंडता सुनिश्चित करने के लिए बच्चों की मेज पर ताला लगाना होगा। Oracle थोड़े समय के लिए ही लॉक को होल्ड करेगा लेकिन फिर भी, यह डरावना है।
- यदि आपकी विदेशी कुंजियों को अनुक्रमित किया गया है (जैसा कि उन्हें होना चाहिए), अद्यतन सूचकांक के अद्यतन की ओर ले जाएगा (सूचकांक संरचना में हटाएं + डालें), यह आम तौर पर आधार तालिका के वास्तविक अपडेट की तुलना में अधिक महंगा है।
- संगठन सूचकांक तालिकाओं में (अन्य RDBMS में, संकुल प्राथमिक कुंजी देखें), पंक्तियों को प्राथमिक कुंजी द्वारा भौतिक रूप से क्रमबद्ध किया जाता है। एक तार्किक अपडेट के परिणामस्वरूप भौतिक रूप से हटा दिया जाएगा + सम्मिलित (अधिक महंगा)
अन्य विचार:
- यदि इस कुंजी को किसी बाहरी सिस्टम (एप्लिकेशन कैश, अन्य डीबी, निर्यात...) में संदर्भित किया जाता है, तो अपडेट होने पर संदर्भ टूट जाएगा।
- इसके अतिरिक्त, कुछ RDBMS CASCADE UPDATE का समर्थन नहीं करते, विशेष रूप से Oracle में।
अंत में, डिजाइन के दौरान, प्राकृतिक प्राथमिक कुंजी के बदले सरोगेट कुंजी का उपयोग करना आम तौर पर सुरक्षित होता है जिसे बदलना नहीं माना जाता है - लेकिन अंततः बदली हुई आवश्यकताओं या यहां तक कि डेटा प्रविष्टि त्रुटि के कारण अद्यतन करने की आवश्यकता हो सकती है।
यदि आपको बच्चों की तालिका के साथ प्राथमिक कुंजी को पूरी तरह से अपडेट करना है, तो समाधान के लिए टॉम कायटे की यह पोस्ट देखें।