आपके सभी प्रश्नों का उत्तर वास्तव में इस बात पर निर्भर करता है कि JSON डेटा किस लिए है, और क्या आपको यह निर्धारित करने के लिए कि कौन सी पंक्तियाँ लौटाई जाती हैं, आपको कभी उस डेटा की कुछ संपत्ति का उपयोग करने की आवश्यकता होगी।
यदि आपके डेटा में वास्तव में कोई स्कीमा नहीं है, और आप वास्तव में इसका उपयोग केवल उस डेटा को संग्रहीत करने के लिए कर रहे हैं जिसका उपयोग किसी ऐसे एप्लिकेशन द्वारा किया जाएगा जो जानता है कि हर बार किसी अन्य मानदंड (जैसे अन्य फ़ील्ड में से एक) द्वारा सही पंक्ति को कैसे पुनर्प्राप्त किया जाए, इसे किसी अन्य चीज़ के रूप में संग्रहीत करने का कोई कारण नहीं है, जैसा कि उस एप्लिकेशन की अपेक्षा है (इस मामले में, JSON)।
यदि JSON डेटा में कुछ संरचना है जो सभी प्रविष्टियों के लिए समान है, और यदि यह सीधे डेटाबेस से इस डेटा को क्वेरी करने के लिए उपयोगी है, तो आप इस डेटा को रखने के लिए एक या अधिक टेबल (या शायद कुछ और फ़ील्ड) बनाना चाहेंगे। ।
इसका एक व्यावहारिक उदाहरण के रूप में, यदि डेटा फ़ील्ड में एक सरणी में उस उपयोगकर्ता के लिए JSON एन्यूमरेटिंग सेवाएं शामिल हैं, और प्रत्येक सेवा में एक अद्वितीय आईडी, प्रकार और मूल्य है, तो आप निम्न फ़ील्ड के साथ एक अलग तालिका चाहते हैं (अपने स्वयं के नामकरण का उपयोग करके) सम्मेलनों):
serviceId (integer)
userName (string)
serviceType (string)
servicePrice (float)
और उस उपयोगकर्ता के लिए प्रत्येक सेवा की अपनी प्रविष्टि होगी। फिर आप किसी विशेष सेवा के बजाय उपयोगकर्ताओं के लिए पूछ सकते हैं, जो आपकी आवश्यकताओं के आधार पर बहुत उपयोगी हो सकती है। आसान क्वेरी के अलावा, अलग-अलग तालिकाओं के कुछ क्षेत्रों को अनुक्रमणित करना भी बहुत ही त्वरित प्रश्नों के लिए बना सकता है।
अद्यतन करें:संग्रहीत डेटा के बारे में आपके स्पष्टीकरण के आधार पर, और जिस तरह से आप इसका उपयोग करते हैं, आप शायद इसे सामान्य बनाना चाहते हैं। कुछ इस तरह:
# user table
userId (integer, auto-incrementing)
userName (string)
userEmail (string)
password (string)
deviceID (string)
# note table
noteId (integer, auto-incrementing)
userId (integer, matches user.userId)
noteTime (datetime)
noteData (string, possibly split into separate fields depending on content, such as subject, etC)
# request table
requestId (integer, auto-incrementing)
userId (integer, matches user.userId)
requestTime (datetime)
requestData (string, again split as needed)
तब आप इस तरह से क्वेरी कर सकते हैं:
# Get a user
SELECT * FROM user WHERE userId = '123';
SELECT * FROM user WHERE userNAme = 'foo';
# Get all requests for a user
SELECT * FROM request WHERE userId = '123';
# Get a single request
SELECT * FROM request WHERE requestId = '325325';
# Get all notes for a user
SELECT * FROM note WHERE userId = '123';
# Get all notes from last week
SELECT * FROM note WHERE userId = '123' AND noteTime > CURDATE() - INTERVAL 1 WEEK;
# Add a note to user 123
INSERT INTO note (noteId, userId, noteData) VALUES (null, 123, 'This is a note');
ध्यान दें कि आप सामान्यीकृत डेटा के साथ और कितना कर सकते हैं, और यह कितना आसान है? किसी विशिष्ट घटक का पता लगाना, अद्यतन करना, जोड़ना या हटाना तुच्छ है।