यह शानदार डिजाइनों के लिए अच्छा अभ्यास नहीं है। यानी - जब जरूरत न हो तो ऑटो इन्क्रीमेंट इंट प्राइमरी की हमेशा करना अच्छा नहीं है।
आइए एक उदाहरण देखें जहां किसी की आवश्यकता नहीं है।
आपके पास लेखों के लिए एक तालिका है - इसमें एक प्राथमिक प्राथमिक कुंजी id
और एक varchar स्तंभ है जिसका नाम है title
।
आपके पास लेख श्रेणियों से भरा एक टेबल भी है - id
इंट प्राइमरी की, वर्चर name
।
लेख तालिका में एक पंक्ति में id
5 की संख्या है, और title
"मक्खन के साथ हंस कैसे खाना है"। आप उस लेख को अपनी श्रेणियाँ तालिका में निम्न पंक्तियों के साथ जोड़ना चाहते हैं: "फाउल" ( आईडी : 20), "गूज" ( आईडी : 12), "कुकिंग" ( आईडी : 2), "मक्खन" (आईडी: 9) ।
अब, आपके पास 2 टेबल हैं: लेख और श्रेणियां। आप दोनों के बीच संबंध कैसे बनाते हैं?
आपके पास 3 कॉलम वाली तालिका हो सकती है: id (प्राथमिक कुंजी), article_id (विदेशी कुंजी), category_id (विदेशी कुंजी)। लेकिन अब आपके पास कुछ ऐसा है:
| आईडी | a_id | c_id |
| 1 | 5 | 20 |
| 2 | 5 | 12 |
| 3 | 5 | 2 |
एक बेहतर समाधान के लिए एक प्राथमिक कुंजी है जो 2 कॉलम से बना है।
| a_id | c_id |
| 5 | 20 |
| 5 | 12 |
| 5 | 2 |
इसे करने से पूरा किया जा सकता है:
create table articles_categories (
article_id bigint,
category_id bigint,
primary key (article_id, category_id)
) engine=InnoDB;
ऑटो इंक्रीमेंट पूर्णांक का उपयोग नहीं करने का एक और कारण यह है कि यदि आप अपनी प्राथमिक कुंजी के लिए यूयूआईडी का उपयोग कर रहे हैं।
यूयूआईडी उनकी परिभाषा के अनुसार अद्वितीय हैं, जो एक ही चीज़ को पूरा करता है जो अद्वितीय पूर्णांक का उपयोग करता है। पूर्णांकों पर भी उनके अपने अतिरिक्त लाभ (और विपक्ष) हैं। उदाहरण के लिए, एक यूयूआईडी के साथ, आप जानते हैं कि आप जिस विशिष्ट स्ट्रिंग को किसी विशेष डेटा रिकॉर्ड के लिए इंगित कर रहे हैं; यह उन मामलों में उपयोगी है, जहां आपके पास 1 केंद्रीय डेटाबेस नहीं है, या जहां अनुप्रयोगों में डेटा रिकॉर्ड ऑफ़लाइन बनाने की क्षमता है (फिर बाद की तारीख में उन्हें डेटाबेस पर अपलोड करें)।
अंत में, आपको एक चीज के रूप में प्राथमिक कुंजी के बारे में सोचने की ज़रूरत नहीं है। आपको उनके बारे में सोचने की ज़रूरत है कि वे जो कार्य करते हैं। आपको प्राथमिक कुंजी की आवश्यकता क्यों है? किसी फ़ील्ड के उपयोग से विशिष्ट सेट डेटा की विशिष्ट पहचान करने में सक्षम होने के लिए जिसे भविष्य में नहीं बदला जाएगा। क्या आपको ऐसा करने के लिए किसी विशेष कॉलम की आवश्यकता है id
, या क्या आप अन्य (अपरिवर्तनीय) डेटा की इस विशिष्ट पहचान को आधार बना सकते हैं?