पर तार्किक स्तर , ईमेल प्राकृतिक कुंजी है। पर शारीरिक स्तर, आप एक संबंधपरक डेटाबेस का उपयोग कर रहे देखते हुए प्राकृतिक कुंजी प्राथमिक कुंजी के रूप में अच्छी तरह से फिट नहीं करता है। कारण मुख्य रूप से दूसरों द्वारा उल्लिखित प्रदर्शन के मुद्दे हैं।
उस कारण से, डिजाइन को अनुकूलित किया जा सकता है। प्राकृतिक कुंजी वैकल्पिक कुंजी बन जाती है (UNIQUE, NOT NULL), और आप सरोगेट / कृत्रिम / तकनीकी कुंजी का उपयोग प्राथमिक कुंजी के रूप में करते हैं, जो आपके मामले में एक ऑटो-इन्क्रीमेंट हो सकती है।
systempuntoout ने पूछा,
यदि कोई अपना ईमेल पता बदलना चाहता है तो क्या होगा? क्या आप सभी विदेशी कुंजियों को भी बदलने जा रहे हैं?
जो कि कैस्केडिंग है।
एक संख्यात्मक सरोगेट कुंजी का उपयोग करने का एक अन्य कारण प्राथमिक कुंजी से संबंधित है कि आपके प्लेटफ़ॉर्म में अनुक्रमण कैसे काम करता है। उदाहरण के लिए, MySQL के InnoDB में, एक तालिका के सभी अनुक्रमितों में प्राथमिक कुंजी पूर्व-लंबित होती है, इसलिए आप चाहते हैं कि PK यथासंभव छोटा हो (गति और आकार के आकार के लिए)। इससे संबंधित भी, जब प्राथमिक कुंजी अनुक्रम में संग्रहीत की जाती है, तो इनोबीडी तेजी से होता है, और एक स्ट्रिंग वहां मदद नहीं करेगा।
एक वैकल्पिक कुंजी के रूप में एक स्ट्रिंग का उपयोग करते समय ध्यान में रखने वाली एक और बात यह है कि वास्तविक स्ट्रिंग के एक हैश का उपयोग करना जो आप चाहते हैं कि कुछ अक्षर के ऊपरी और निचले मामलों जैसी चीजों को छोड़ना तेज हो सकता है। (मैं वास्तव में यहाँ क्या मैं अभी भी कहा पुष्टि करने के लिए एक संदर्भ की तलाश में उतरा, अभी भी देख रहा हूँ ...)