किसी भी चीज़ के लिए जो हमेशा है हर . के लिए सेट करें उपयोगकर्ता आपको इसे Users
. में रखना चाहिए तालिका, सामान्य सामान्यीकरण के अनुसार। वैकल्पिक विन्यास के लिए मुझे निम्न तालिका संरचना पसंद है:
TABLE Users:
id INT AI
name VARCHAR
...
TABLE User_Settings
user_id INT PK,FK
name VARCHAR PK
type BOOL
value_int INT NULL
value_str VARCHAR NULL
जहां User_Settings.type
निर्दिष्ट करता है कि पूर्णांक या स्ट्रिंग फ़ील्ड को संदर्भित किया जाना चाहिए या नहीं।
यानी:
INSERT INTO Users (id, name) VALUES (1, 'Sammitch');
INSERT INTO User_Settings (user_id, name, type, value_int) VALUES (1, 'level', 1, 75);
INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'en');
और INSERT/UPDATE अंक के लिए:
INSERT INTO User_Settings (user_id, name, type, value_str) VALUES (1, 'lang', 0, 'fr')
ON DUPLICATE KEY UPDATE value_str='fr';
साथ ही, जैसा कि अधिकांश अन्य लोग कह रहे हैं, वरीयताएँ क्रमबद्ध करना और संग्रहीत करना विशेष रूप से अच्छा विचार नहीं है क्योंकि:
- आप एक क्वेरी के साथ एक भी मान प्राप्त नहीं कर सकते हैं, आपको संपूर्ण क्रमबद्ध स्ट्रिंग को पुनः प्राप्त करना होगा, इसे डी-सीरियलाइज़ करना होगा, और अनावश्यक डेटा को त्यागना होगा।
- यह आसानी से भ्रष्ट हो जाता है, और इससे उबरना मुश्किल होता है।
- कच्ची क्वेरी लिखने के लिए लूट में दर्द होता है, यानी:विश्व स्तर पर एक निश्चित सेटिंग को ठीक करने के लिए।
- आप एक टेबल फ़ील्ड में अनिवार्य रूप से सारणीबद्ध डेटा संग्रहीत कर रहे हैं।
सितंबर 2016 पूर्वव्यापी संपादन:
बीच के समय में मैंने लोगों के साथ वैकल्पिक सेटिंग्स को सर्वोत्तम तरीके से संग्रहीत करने के साथ-साथ ऊपर परिभाषित सामान्य तालिका संरचना के बारे में कुछ तर्क दिए हैं।
जबकि वह तालिका संरचना एकमुश्त नहीं है खराब , यह बिल्कुल अच्छा नहीं है या। यह एक बुरी स्थिति को सर्वोत्तम बनाने की कोशिश कर रहा है। वैकल्पिक सेटिंग्स का क्रमांकन तब तक काम कर सकता है जब तक आप इन सेटिंग्स के लिए समायोजित कर सकते हैं:
- सभी को एक साथ लोड किया जा रहा है, कोई चुनना या चुनना नहीं है।
- अनुक्रमणीय, खोजने योग्य या आसानी से संशोधित नहीं किया जा रहा है बड़े पैमाने पर ।
फिर आप optional_settings
. जैसी फ़ील्ड जोड़ने पर विचार कर सकते हैं Users
. में एक क्रमबद्ध [जैसे:JSON] सेटिंग वाली तालिका। आप उपरोक्त का व्यापार करते हैं, लेकिन यह एक अधिक सरल दृष्टिकोण है और आप अधिक जटिल सेटिंग्स संग्रहीत कर सकते हैं।
साथ ही, यदि आप LOB प्रकार का उपयोग करते हैं जैसे TEXT
भंडारण के लिए जरूरी नहीं कि डेटा कम से कम MySQL में "पंक्ति में" संग्रहीत हो।
वैसे भी, यह आप पर निर्भर है यह निर्धारित करने के लिए कि आपके आवेदन की आवश्यकताएं और बाधाएं क्या हैं, और उस जानकारी के आधार पर सर्वोत्तम विकल्प चुनें।