Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में उपयोगकर्ता सेटिंग्स संग्रहीत करने का सबसे अच्छा तरीका?

किसी भी चीज़ के लिए जो हमेशा है हर . के लिए सेट करें उपयोगकर्ता आपको इसे 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';

साथ ही, जैसा कि अधिकांश अन्य लोग कह रहे हैं, वरीयताएँ क्रमबद्ध करना और संग्रहीत करना विशेष रूप से अच्छा विचार नहीं है क्योंकि:

  1. आप एक क्वेरी के साथ एक भी मान प्राप्त नहीं कर सकते हैं, आपको संपूर्ण क्रमबद्ध स्ट्रिंग को पुनः प्राप्त करना होगा, इसे डी-सीरियलाइज़ करना होगा, और अनावश्यक डेटा को त्यागना होगा।
  2. यह आसानी से भ्रष्ट हो जाता है, और इससे उबरना मुश्किल होता है।
  3. कच्ची क्वेरी लिखने के लिए लूट में दर्द होता है, यानी:विश्व स्तर पर एक निश्चित सेटिंग को ठीक करने के लिए।
  4. आप एक टेबल फ़ील्ड में अनिवार्य रूप से सारणीबद्ध डेटा संग्रहीत कर रहे हैं।

सितंबर 2016 पूर्वव्यापी संपादन:

बीच के समय में मैंने लोगों के साथ वैकल्पिक सेटिंग्स को सर्वोत्तम तरीके से संग्रहीत करने के साथ-साथ ऊपर परिभाषित सामान्य तालिका संरचना के बारे में कुछ तर्क दिए हैं।

जबकि वह तालिका संरचना एकमुश्त नहीं है खराब , यह बिल्कुल अच्छा नहीं है या। यह एक बुरी स्थिति को सर्वोत्तम बनाने की कोशिश कर रहा है। वैकल्पिक सेटिंग्स का क्रमांकन तब तक काम कर सकता है जब तक आप इन सेटिंग्स के लिए समायोजित कर सकते हैं:

  1. सभी को एक साथ लोड किया जा रहा है, कोई चुनना या चुनना नहीं है।
  2. अनुक्रमणीय, खोजने योग्य या आसानी से संशोधित नहीं किया जा रहा है बड़े पैमाने पर

फिर आप optional_settings . जैसी फ़ील्ड जोड़ने पर विचार कर सकते हैं Users . में एक क्रमबद्ध [जैसे:JSON] सेटिंग वाली तालिका। आप उपरोक्त का व्यापार करते हैं, लेकिन यह एक अधिक सरल दृष्टिकोण है और आप अधिक जटिल सेटिंग्स संग्रहीत कर सकते हैं।

साथ ही, यदि आप LOB प्रकार का उपयोग करते हैं जैसे TEXT भंडारण के लिए जरूरी नहीं कि डेटा कम से कम MySQL में "पंक्ति में" संग्रहीत हो।

वैसे भी, यह आप पर निर्भर है यह निर्धारित करने के लिए कि आपके आवेदन की आवश्यकताएं और बाधाएं क्या हैं, और उस जानकारी के आधार पर सर्वोत्तम विकल्प चुनें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विभिन्न स्रोतों से आइटम चुनें, और तिथि के अनुसार ऑर्डर करें

  2. MySQL में रैंडम तारीख डालें/अपडेट करें

  3. इष्टतम MySQL-कॉन्फ़िगरेशन (my.cnf)

  4. tomcat 6.0.24 अपवाद:com.mysql.jdbc.SQLError लोड नहीं हो सका

  5. MySQL क्वेरी को ऑप्टिमाइज़ करें कहाँ का उपयोग करने से बचने के लिए; अस्थायी का उपयोग करना; फाइलसॉर्ट का उपयोग करना