में विदेशी कुंजी डेटा कैसे संग्रहीत किया जाता है, इस बारे में प्रश्न मुझे पता है कि यह अति-मूलभूत है, लेकिन यह एक धारणा है जिसे मैंने हमेशा आयोजित किया है और यह मान्य करना चाहता हूं कि यह सच है (सामान्य रूप से, विभिन्न कार्यान्वयन के लिए विशिष्ट विवरण के साथ)SQL
मान लें कि मेरे पास एक सारणी है जिसमें टेक्स्ट कॉलम "फल" है। उस कॉलम में केवल चार मानों में से एक दिखाई देता है: नाशपाती, ऐप्पल, केला, और स्ट्रॉबेरी। मेरे पास दस लाख पंक्तियां हैं।
उस डेटा को (औसतन) एक चौथाई मिलियन बार दोहराने के बजाय, यदि मैं इसे एक अन्य तालिका में निकालता हूं जिसमें फलों का स्तंभ होता है और केवल चार पंक्तियां होती हैं, और फिर मूल स्तंभ को एक विदेशी कुंजी बनाते हैं, तो क्या यह करता है स्थान सुरक्षित करें?
मुझे लगता है कि चार फल नाम केवल एक बार संग्रहीत किए जाते हैं, और लाखों पंक्तियों में अब पॉइंटर्स या इंडेक्स या दूसरी तालिका में किसी प्रकार का संदर्भ होता है।
यदि मेरी पंक्ति मान छोटे फल नामों से अधिक लंबे हैं तो मुझे लगता है कि बचत/अनुकूलन भी बड़ा है।
एक संदर्भ प्रकार परिवर्तनीय 3 जीएल जैसे सी # .NET के बारे में सोचें: इसका मान स्मृति में एक स्थान पर निकलता है लेकिन इसमें कई संदर्भ चर हो सकते हैं जो उस स्थान पर केवल पूर्णांक (या जो भी) पॉइंटर्स हैं। डीबीएमएस पर एक ही सिद्धांत लागू किया जा सकता है: तर्कसंगत रूप से एफके में दोनों टेबल फल को पाठ के रूप में स्टोर करते हैं लेकिन कवर के नीचे पाठ केवल एक बार संग्रहीत होता है और प्रत्येक तालिका भौतिक रूप से एक ही मूल्य पर केवल एक पूर्णांक (या जो भी) सूचक को संग्रहीत करती है। क्या MySQL ऐसा करता है? मुझे लगता है कि प्रश्नकर्ता क्या हो रहा है। – onedaywhen
मैं प्रोग्रामिंग भाषा के विरुद्ध mysql के डेटा स्टोरेज प्रथाओं की तुलना नहीं करूंगा। यह केवल एक प्रति स्टोर करने के लिए समझ में आता है, लेकिन विदेशी कुंजी संदर्भ नहीं हैं। वे किसी अन्य फ़ील्ड की तरह एक फ़ील्ड हैं जो उस डेटा को शामिल करता है जो किसी अन्य तालिका में समकक्ष फ़ील्ड/डेटा से मेल खाता है। आखिरकार - एक बड़ी मेज पर एक विदेशी कुंजी छोड़ना लगभग तात्कालिक है। यदि यह एक संदर्भ था, तो डीबीएमएस को वास्तविक डेटा पर प्रतिलिपि बनाना होगा कि संदर्भ समाप्त हो गया है। –