मैं अपने सीएमएस के लिए अपने उपयोगकर्ता मॉड्यूल में एक नई सुविधा जोड़ रहा हूं और मैंने सड़क ब्लॉक मारा है ... या मुझे लगता है, सड़क में एक कांटा, और मैं स्टेक ओवरफ्लो से कुछ राय प्राप्त करना चाहता था इससे पहले कि मैं प्रतिबद्ध हूं कुछ भी।
असल में मैं व्यवस्थापक को नए, 'अतिरिक्त' उपयोगकर्ता फ़ील्ड जोड़ने की अनुमति देना चाहता हूं जो उपयोगकर्ता पंजीकरण पर भर सकते हैं, अपनी प्रोफ़ाइल में संपादित कर सकते हैं, और/या अन्य मॉड्यूल द्वारा नियंत्रित किए जा सकते हैं। इसका एक उदाहरण जन्मदिन का क्षेत्र होगा, स्वयं का एक लंबा विवरण होगा, या शायद उपयोगकर्ता द्वारा साइट पर अर्जित अंक हो सकता है। कहने की जरूरत नहीं है, संग्रहीत डेटा अलग-अलग होगा और बड़ी मात्रा में पाठ से, एक छोटे पूर्णांक मूल्य तक हो सकता है। मामलों को और खराब बनाने के लिए - मैं चाहता हूं कि इस डेटा को खोजने का विकल्प हो।MySQL में 'अतिरिक्त' उपयोगकर्ता डेटा स्टोर करने का सबसे अच्छा तरीका?
इस तरह से - यह करने का सबसे अच्छा तरीका क्या होगा? अभी मैं निम्नलिखित कॉलम के साथ एक टेबल रखने की ओर झुका रहा हूँ।
userid, refFieldID, varchar, tinyint, smallint, int, text, date, datetime, etc.
मैं इस पसंद के रूप में यह काफी तेजी से खोज करने के होगा, और संदर्भ तालिका (जो इस तरह के क्षेत्र के रूप में क्षेत्र के डेटा की सभी या रखती है, चाहे वह खोजा है नहीं, आदि) कर सकते हैं संदर्भ उस क्षेत्र के लिए डेटा संग्रहीत करते समय किस कॉलम का उपयोग किया जाना चाहिए।
दूसरा विचार, जो मुझे सुझाया गया था और मैंने अन्य समाधानों में उपयोग किया है (vBulletin एक होने के बावजूद, हालांकि मैंने दूसरों को देखा है जिनके नाम इस समय मुझे बचते हैं), जहां आपके पास उपयोगकर्ता आईडी है, संदर्भ आईडी , और एक मध्यवर्ती क्षेत्र। मुझे किसी भी निश्चितता के साथ यह कहने के लिए MySQL के बारे में पर्याप्त जानकारी नहीं है, लेकिन यह विधि ऐसा लगता है कि यह खोज करने के लिए धीमा होगा, और संभवतः एक बड़ा ओवरहेड होगा।
तो कौन सी विधि 'सर्वश्रेष्ठ' होगी? क्या कोई और तरीका है जो मुझे याद आ रही है? जिस भी विधि का मैं उपयोग कर रहा हूं, उसे खोजना तेज़ होना चाहिए, बड़े पैमाने पर नहीं (ओवरहेड का एक छोटा सा हिस्सा ठीक है), और डेटा के खिलाफ उपयोग की जाने वाली जटिल क्वेरी को प्राथमिकता से अनुमति देता है।
वाह धन्यवाद, मैं वास्तव में # 1 से सहमत पहले व्यक्ति को जवाब देने जा रहा था, कौन से कॉलम चुनने के लिए - लेकिन मुझे लगता है कि मुझे अब और नहीं करना है :)। आपकी पोस्ट के बारे में - क्या आपका मतलब टेक्स्ट और ब्लॉब, int और bigint है? या एक या दूसरे? इसके अलावा आप 'बूल' (टिनिंट (1)) कॉलम जोड़ने के बारे में कैसा महसूस करते हैं? मैं देख सकता था कि बहुत उपयोगी और संभवतः बहुत उपयोग किया जा रहा है - क्या आपकी राय में 3 बाइट बचाए जाएंगे? इसके अलावा, कॉलम की संख्या डिस्क पर एक पंक्ति के आकार को बढ़ाती है? बेशक खाली कॉलम। मैं आपके (कमाल) टेबल लेआउट पर संदेह नहीं कर रहा हूं, बस उत्सुक हूं। – Jon
मेरी सूची में प्रत्येक आइटम के लिए प्रत्येक 1, इसलिए 3 या 4 कुल कॉलम, इस पर निर्भर करता है कि आप फ्लोट समर्थन चाहते हैं या नहीं। टिनिंट (1) के लिए - पूर्णांक कॉलम में उन्हें स्टोर करें। आप tinyint (1) जोड़कर एक बाइट बर्बाद कर रहे हैं, बचत नहीं 3. आपकी तालिका में प्रत्येक पंक्ति हमेशा MySQL में एक ही चौड़ाई है - यह अन्य आरडीबीएमएस में समान काम करती है। (कैसे वर्चर्स इसे प्रभावित करते हैं थोड़ा जटिल हो जाता है।) "चौड़ाई" को "पंक्ति आकार" भी कहा जाता है। – wuputah