मान लें कि आप कुछ स्थिति मॉडल करना चाहते हैं। कंपनी में एक या अधिक शाखाएं हो सकती हैं। और उन शाखाओं में कर्मचारी हैं जो अलग-अलग कंपनी (या एक ही कंपनी की दो अलग-अलग शाखाओं में) में काम कर सकते हैं। यह निश्चित रूप से सिर्फ एक उदाहरण है।MongoDB स्कीमा डिज़ाइन के लिए सिफारिशें
आइए यह भी मान लें कि अधिकांश खोज/प्रश्न कर्मचारियों और कंपनियों के संग्रह पर किए जाएंगे।
पहले (भोली) तरीका यह है सब कुछ एम्बेड करने के लिए (कंपनी शाखाओं की सरणी है और शाखाओं के कर्मचारियों की सरणी है) होगा:
{
name: "Company name",
// other company data
branches : [
{
name: "Branch name",
// other branch data
Employees: [
{
// employee1 data
},
{
// employee data
},
]
}
]
}
लेकिन यह बहुत अक्षम होगा जब एक में रुचि होगी कर्मचारी जानकारी पुनर्प्राप्त करना (किसी को कंपनी को पुनर्प्राप्त करना होगा और फिर आवश्यकतानुसार कर्मचारी ढूंढने के लिए प्रत्येक शाखा में फिर से भरना होगा)।
दूसरी तरफ, कोई संदर्भों का उपयोग कर सकता है और आरडीबीएमएस की नकल कर सकता है (कंपनी, शाखा और कर्मचारी संग्रह होगा), लेकिन इसका मतलब अधिक प्रश्न होगा।
तीसरा विकल्प (जो कि मैं सबसे नज़दीकी हूं), कर्मचारी को एक अलग संग्रह के रूप में रखना होगा, और उसके बाद शाखाओं में इसके संदर्भों की एक श्रृंखला होगी। "कुछ नामों के साथ कर्मचारियों, कुछ कंपनी और कुछ शाखा के लिए है कि काम", कंपनी ObjectId कर्मचारी संग्रह में संग्रहित किया जा सकता है::
{
company_id: "some id",
first_name: "First name",
last_name: "Last name",
//
}
तो, इस मामले में, सभी के लिए खोज करने के लिए इसके अलावा, की तरह तेजी से प्रश्नों अनुमति देने के लिए कुछ नाम वाले कर्मचारी जो कुछ कंपनी और कुछ शाखा के लिए काम करते हैं, उन्हें दो प्रश्न करना होगा। पहली क्वेरी उन कंपनियों को वापस लाएगी जो "कंपनी की स्थिति" (कंपनी का नाम और शाखा का नाम) को संतुष्ट करती हैं और फिर कर्मचारी संग्रह पर दूसरी क्वेरी उन सभी कर्मचारियों को वापस कर देगी जिनके पास निर्दिष्ट नाम है और जो उन कंपनियों में काम कर रहे हैं जिनकी आईडी पहली क्वेरी में लौटा दी गई है।
क्या आप इसे किसी अन्य तरीके से करेंगे? क्या ऐसा करने के लिए कुछ और "अनुशंसित" तरीका है? क्या आप कुछ सुधार जोड़ देंगे?
अधिक महत्वपूर्ण बात यह है कि स्थिति में क्या करना है जब इन दो प्रश्नों के परिणाम परिणाम छोटे छेड़छाड़ करते हैं? उस मामले में प्रदर्शन में सुधार कैसे करें?
प्रतिक्रिया के लिए धन्यवाद। समस्या, उदाहरण के लिए कंपनी, शाखा और कर्मचारी सिर्फ एक उदाहरण थे। मुझे असाइनमेंट सरणी के साथ कई से अधिक रिश्तों का सिमुलेशन पसंद है। मैं इसका उपयोग करूंगा और वहां सभी "खोजने योग्य" फ़ील्ड जोड़ दूंगा। मैं 16 एमबी सीमा नहीं मारूंगा, लेकिन मैं कई संग्रहों के साथ जाने की सोच रहा था - एक कंपनी के लिए (शाखा इसमें एम्बेडेड होगी), और एक कर्मचारी के लिए। – kevin