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

MySQL फ़ील्ड में csv संग्रहीत करना - बुरा विचार?

आप मान को अल्पविराम से अलग किए गए रूप में संग्रहीत नहीं करना चाहते हैं।

उस मामले पर विचार करें जब आप इस कॉलम को किसी अन्य तालिका के साथ जोड़ने का निर्णय लेते हैं।

मान लें कि आपके पास है,

x  items
1  1, 2, 3
1  1, 4
2  1

और आप प्रत्येक x के लिए अलग-अलग मान खोजना चाहते हैं अर्थात:

x  items
1  1, 2, 3, 4
2  1

या शायद यह जांचना चाहें कि इसमें 3 हैं या नहीं

या उन्हें अलग-अलग पंक्तियों में बदलना चाह सकते हैं:

x  items
1  1
1  2
1  3
1  1
1  4
2  1

यह बहुत बड़ा दर्द होगा।

कम से कम सामान्यीकरण का प्रयोग करें पहला सिद्धांत - प्रत्येक मान के लिए अलग पंक्ति है।

अब, मूल रूप से कहें कि आपके पास यह तालिका के रूप में था:

x  item
1  1
1  2
1  3
1  1
1  4
2  1

आप इसे आसानी से csv मानों में बदल सकते हैं:

select x, group_concat(item order by item) items
from t
group by x

अगर आप खोजना चाहते हैं कि x =1 में आइटम 3 है या नहीं। आसान।

select * from t where x = 1 and item = 3

जो पहले के मामले में भयानक . का उपयोग करेगा find_in_set :

select * from t where x = 1 and find_in_set(3, items);

अगर आपको लगता है कि आप खोज करने के लिए CSV मानों के साथ like का उपयोग कर सकते हैं, तो पहले like %x% अनुक्रमणिका का उपयोग नहीं कर सकते। दूसरा, यह गलत परिणाम देगा।
मान लें कि आप जांचना चाहते हैं कि क्या आइटम ab मौजूद है और आप %ab% करते हैं यह abc abcd abcde .... के साथ पंक्तियाँ लौटाएगा।

यदि आपके पास कई उपयोगकर्ता और आइटम हैं, तो मेरा सुझाव है कि अलग तालिका बनाएं users एक PK उपयोगकर्ता आईडी के साथ, अन्य items पीके आइटमिड और अंत में एक मैपिंग टेबल के साथ user_item उपयोगकर्ता आईडी, आइटम आईडी कॉलम होना।

यदि आप जानते हैं कि आपको केवल इन मानों को संग्रहीत करने और पुनर्प्राप्त करने की आवश्यकता होगी और इस पर कोई ऑपरेशन नहीं करना होगा जैसे कि शामिल होना, खोज करना, अलग करना, अलग पंक्तियों में रूपांतरण आदि। - बस हो सकता है, आप कर सकते हैं (मैं अभी भी करूँगा 'टी)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP mysql_num_rows डाई एरर

  2. MySQL my.cnf फ़ाइल को कैसे संपादित करें

  3. MySQL IF NOT NULL, फिर 1 प्रदर्शित करें, अन्यथा 0 प्रदर्शित करें

  4. SQL सर्वर - SQL_NO_CACHE और विकल्प (RECOMPILE)

  5. वर्चुअलएन्व (पायथन 3.4), पाइप स्थापित mysqlclient त्रुटि