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

उपयोगकर्ताओं की तालिका में हमारे पास एक आईडी कॉलम क्यों होना चाहिए?

भले ही आपका उपयोगकर्ता नाम अद्वितीय है, फिर भी आपकी प्राथमिक कुंजी के रूप में वर्चर का उपयोग करने के बजाय अतिरिक्त आईडी कॉलम होने के कुछ फायदे हैं।

  • कुछ लोग प्राथमिक कुंजी के रूप में एक पूर्णांक कॉलम का उपयोग करना पसंद करते हैं, एक सरोगेट कुंजी के रूप में सेवा करने के लिए जिसे कभी भी बदलने की आवश्यकता नहीं होती है, भले ही अन्य कॉलम परिवर्तन के अधीन हों। हालांकि प्राकृतिक प्राथमिक कुंजी को भी बदलने योग्य होने से कोई रोक नहीं सकता है, आपको यह सुनिश्चित करने के लिए कैस्केडिंग विदेशी कुंजी बाधाओं का उपयोग करना होगा कि संबंधित तालिकाओं में विदेशी कुंजी ऐसे किसी भी बदलाव के साथ सिंक में अपडेट की जाती है।

  • एक वर्चर के बजाय 32-बिट पूर्णांक होने वाली प्राथमिक कुंजी अंतरिक्ष को बचा सकती है। आपकी उपयोगकर्ता तालिका को संदर्भित करने वाली हर दूसरी तालिका में एक int या एक varchar विदेशी कुंजी कॉलम के बीच चुनाव एक अच्छा कारण हो सकता है।

  • यदि आप इंडेक्स के बीच में वेडिंग करने की तुलना में इंडेक्स के अंत में नई पंक्तियां जोड़ते हैं तो प्राथमिक कुंजी इंडेक्स में सम्मिलित करना थोड़ा अधिक कुशल होता है। MySQL तालिकाओं में अनुक्रमणिका आमतौर पर B+ट्री डेटा संरचनाएं होती हैं, और आप इनका अध्ययन करके यह समझ सकते हैं कि वे कैसा प्रदर्शन करती हैं।

  • कुछ एप्लिकेशन फ्रेमवर्क इस परंपरा को पसंद करते हैं कि आपके डेटाबेस की प्रत्येक तालिका में एक प्राथमिक कुंजी कॉलम होता है जिसे id . कहा जाता है , प्राकृतिक कुंजियों या मिश्रित कुंजियों का उपयोग करने के बजाय। इस तरह के सम्मेलनों का पालन करने से कुछ प्रोग्रामिंग कार्य सरल हो सकते हैं।

इनमें से कोई भी मुद्दा डील-ब्रेकर नहीं है। और प्राकृतिक चाबियों का उपयोग करने के फायदे भी हैं:

  • यदि आप आईडी द्वारा खोज करने की तुलना में उपयोगकर्ता नाम द्वारा पंक्तियों को अधिक बार देखते हैं, तो उपयोगकर्ता नाम को प्राथमिक कुंजी के रूप में चुनना बेहतर हो सकता है, और InnoDB के अनुक्रमणिका-संगठित संग्रहण का लाभ उठा सकते हैं। यदि संभव हो तो अपने प्राथमिक लुकअप कॉलम को प्राथमिक कुंजी बनाएं, क्योंकि प्राथमिक कुंजी लुकअप InnoDB में अधिक कुशल हैं (आपको MySQL में InnoDB का उपयोग करना चाहिए)।

  • जैसा कि आपने देखा, यदि आपके पास पहले से ही उपयोगकर्ता नाम पर एक अद्वितीय बाधा है, तो यह एक अतिरिक्त आईडी कॉलम रखने के लिए भंडारण की बर्बादी है जिसकी आपको आवश्यकता नहीं है।

  • प्राकृतिक कुंजी का उपयोग करने का अर्थ है कि विदेशी कुंजियों में एक मनमाना पूर्णांक आईडी के बजाय मानव-पठनीय मान होता है। यह क्वेरी को "वास्तविक" मान के लिए मूल तालिका में वापस शामिल हुए बिना विदेशी कुंजी मान का उपयोग करने की अनुमति देता है।

मुद्दा यह है कि ऐसा कोई नियम नहीं है जो 100% मामलों को कवर करता हो। मैं अक्सर अनुशंसा करता हूं कि आपको अपने विकल्प खुले रखने चाहिए, और एक ही डेटाबेस में भी प्राकृतिक कुंजियों, मिश्रित कुंजियों और सरोगेट कुंजियों का उपयोग करना चाहिए।

मैं अपनी पुस्तक SQL Antipatterns:के अध्याय "ID Required" में सरोगेट कुंजियों के कुछ मुद्दों को कवर करता हूं। डेटाबेस प्रोग्रामिंग के नुकसान



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP में MySQL - तालिका में केवल एक पंक्ति को कैसे अपडेट करें लेकिन सबसे बड़ी आईडी संख्या के साथ

  2. मुझे mysql_query फ़ंक्शन में PHP $_POST vars कैसे लिखना चाहिए?

  3. Mysqldump एक से अधिक टेबल?

  4. जुड़ने से बचने के लिए अनावश्यक विदेशी कुंजी संग्रहित करना

  5. PHP में एक यूआरएल से एक ही नाम के साथ कई पैरामीटर कैसे प्राप्त करें और तालिका में सभी रिकॉर्ड डालें