का प्रयोग कर एक उपयोगकर्ता अधिक भूमिकाएं हो सकते हैं खोजने के लिए इस
INSERT INTO table (id, roles) VALUES ('', '2,3,4');
तब की तरह कुछ कर सकता है, यह शायद एक user_role
मेज है कि इस जानकारी का भंडार है करने के लिए बेहतर है। यह सामान्यीकृत है, और पूछताछ करना बहुत आसान होगा।
एक टेबल की तरह:
user_id | role
--------+-----------------
1 | Admin
2 | User
2 | Admin
3 | User
3 | Author
आप बल्कि एक स्तंभ से बाहर जानकारी पाने के लिए पार्स करने स्ट्रिंग का उपयोग किए की तुलना में इस तरह के SELECT user_id, user.name FROM user_role JOIN user WHERE role='Admin'
के रूप में एक विशेष भूमिका के साथ सभी उपयोगकर्ताओं के लिए क्वेरी करने के लिए अनुमति देते हैं जाएगा।
अन्य चीजों के अलावा यह तेज़ होगा, क्योंकि आप कॉलम को सही तरीके से इंडेक्स कर सकते हैं और किसी भी समाधान की तुलना में मामूली रूप से अधिक जगह ले लेंगे जो एकाधिक मानों को एक कॉलम में रखता है - जो कि संबंधित संबंधों के लिए एंटीथेटिकल है।
कारण यह संग्रहीत नहीं किया जाना चाहिए कि यह अक्षम है, क्योंकि डीसीओडर comment to this answer पर बताता है। यह जांचने के लिए कि क्या उपयोगकर्ता की भूमिका है, उपयोगकर्ता तालिका की प्रत्येक पंक्ति को स्कैन करने की आवश्यकता होगी, और उसके बाद स्ट्रिंग मिलान का उपयोग करके "भूमिकाएं" कॉलम स्कैन किया जाना चाहिए - इस कार्रवाई के प्रकटीकरण के बावजूद, आरएमडीबीएस को सामग्री को पार्स करने के लिए स्ट्रिंग ऑपरेशंस करें। ये बहुत महंगा संचालन हैं, न कि सभी अच्छे डेटाबेस डिज़ाइन पर।
आप जरूरत एकल स्तंभ होनी चाहिए, तो मैं दृढ़ता से सुझाव है कि तुम अब एक तकनीकी समस्या है, लेकिन एक लोगों के प्रबंधन एक। विकास के तहत मौजूद मौजूदा डेटाबेस में अतिरिक्त तालिकाओं को जोड़ना मुश्किल नहीं होना चाहिए। यदि यह ऐसा कुछ नहीं है जिसे आप करने के लिए अधिकृत हैं, तो स्पष्ट करें कि सही व्यक्ति को अतिरिक्त तालिका की आवश्यकता क्यों है - क्योंकि munging एकल कॉलम में एकाधिक मान खराब हैं, खराब विचार।
स्रोत
2013-09-04 05:21:42
क्या स्मृति को बचाने करता है आप के लिए क्या मतलब? –
mysql की स्मृति को बचाने का मतलब आकार में है और उपयोग करने में आसान – harsh4u
इसका उपयोग करना आसान नहीं होगा, और यह किसी भी स्मृति को सहेज नहीं पाएगा। बस कई कॉलम का उपयोग करें। –