Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

हमें किस स्थिति में डेटाबेस में समग्र कुंजी का उपयोग करने की आवश्यकता है

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

संपादित करें:जैसा कि क्रिस ने पूछा है, मैं अपने उत्तर का विस्तार कर रहा हूं।

मुझे यह बताते हुए शुरू करना चाहिए कि मैं इस प्रश्न को "समग्र प्राथमिक कुंजी" बनाम "सरोगेट कुंजी" के रूप में समझता हूं।

साथ ही, मैं मानता हूं कि एक . है मामले का उपयोग करें जहां एक समग्र कुंजी समझ में आता है:क्रॉस रेफरेंस टेबल में, जिसे "लिंक टेबल" भी कहा जाता है। इनका उपयोग कई-से-कई तालिकाओं में किया जाता है और इसमें केवल दो फ़ील्ड होते हैं, दोनों विदेशी कुंजियाँ जो xref तालिका के लिए प्राथमिक कुंजी बनाती हैं। उदाहरण के लिए, UserRole तालिका में user_id होगा और role_id , और कुछ नहीं। जावा में कोई वर्ग प्रतिनिधित्व नहीं है, उदाहरण के लिए, इस तरह की तालिका के लिए। यह आमतौर पर एक @ManyToMany होता है , एक Collection . के साथ दोनों पक्षों में।

मैंने एक अन्य उत्तर में प्राकृतिक कुंजी बनाम सरोगेट कुंजी पर अपने विचार साझा किए ( हाइबरनेट:समग्र पीके बनाम सरोगेट पीके में राय ) , और मेरा मानना ​​है कि समग्र कुंजी प्राकृतिक कुंजी के कुछ नुकसानों को साझा करती है, बिना कोई वास्तविक लाभ लाए।

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

एक और नुकसान यह है कि आवश्यकताएं करें परिवर्तन। पुरे समय। तो, जो आज एक अच्छी समग्र कुंजी प्रतीत होती है वह कल की कुंजी नहीं है। इसलिए हमारे पास सरोगेट कुंजियाँ हैं:भविष्य-सबूत होने के लिए।

समग्र कुंजियों का मुख्य रूप से उपयोग किया जाता है ताकि किसी तालिका में रिकॉर्ड स्तंभों के सेट के आधार पर अद्वितीय हों। उदाहरण के लिए, यदि आपके पास Customers है तालिका, आपके पास NationalId हो सकता है +Country एक अद्वितीय मूल्य के रूप में, जिसका अर्थ है कि दो उपयोगकर्ता एक ही एसएसएन साझा नहीं कर सकते हैं यदि उनका देश यूएसए है। लेकिन दो रिकॉर्ड के लिए समान संख्या होना संभव है, यदि वे एक ही देश में नहीं हैं। यदि आप समग्र कुंजी पसंद करते हैं, तो यह इसके लिए एक अच्छा उम्मीदवार होगा। लेकिन जैसा कि मैंने पहले संकेत दिया था, आप एक सरोगेट कुंजी का उपयोग कर सकते हैं और एक unique लागू कर सकते हैं बाधा आपको एक समग्र कुंजी के साथ-साथ एक सरोगेट कुंजी की सुरक्षा के लाभ होंगे।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL तालिका में नया कॉलम जोड़ने का प्रयास करते समय कनेक्शन टूट गया

  2. MySQL के लिए मुझे किस पायथन 3 लाइब्रेरी का उपयोग करना चाहिए?

  3. MySQL क्लस्टर कैसे निर्धारित करता है कि किसी SELECT क्वेरी के लिए कौन से डेटा नोड्स को खोजना है?

  4. MySQL डेटा निर्देशिका को कैसे बदलें?

  5. MySQL संग्रहित प्रक्रियाओं के साथ अद्यतन क्वेरी चलाने के लिए चयन परिणामसेट का उपयोग करना