समस्या यह है कि आप अपने डेटा को सामान्य से अधिक कर देते हैं। एक ऑर्डर एक ग्राहक द्वारा परिभाषित किया जाता है, जो दिए गए समय पर एक निश्चित स्थान पर रहता है, ऑर्डर के समय एक निश्चित मूल्य का भुगतान करता है (जो कि एप्लिकेशन के जीवनकाल में भारी रूप से बदल सकता है और जिसे आपको वैसे भी और कई दस्तावेज करने होते हैं अन्य पैरामीटर जो सभी केवल एक निश्चित समय में मान्य होते हैं . तो दस्तावेज़ . के लिए एक आदेश (सजा का इरादा), आपको उस निश्चित समय के लिए सभी डेटा को जारी रखने की आवश्यकता है। मैं आपको एक उदाहरण देता हूं:
{ _id: "order123456789",
date: ISODate("2014-08-01T16:25:00.141Z"),
customer: ObjectId("53fb38f0040980c9960ee270"),
items:[ ObjectId("53fb3940040980c9960ee271"),
ObjectId("53fb3940040980c9960ee272"),
ObjectId("53fb3940040980c9960ee273")
],
Total:400
}
अब, जब तक न तो ग्राहक और न ही आइटम का विवरण बदलता है, आप पुन:पेश करने में सक्षम हैं कि यह ऑर्डर कहां भेजा गया था, ऑर्डर की कीमतें क्या थीं और एक जैसे। लेकिन अब अगर ग्राहक अपना पता बदल ले तो क्या होगा? या अगर किसी वस्तु की कीमत बदल जाती है? आपको उनके संबंधित दस्तावेज़ों में उन परिवर्तनों पर नज़र रखनी होगी। यह बहुत होगा ऑर्डर को स्टोर करने में आसान और पर्याप्त रूप से कुशल:
{
_id: "order987654321",
date: ISODate("2014-08-01T16:25:00.141Z"),
customer: {
userID: ObjectId("53fb3940040980c9960ee283"),
recipientName: "Foo Bar"
address: {
street: "742 Evergreen Terrace",
city: "Springfield",
state: null
}
},
items: [
{count:1, productId:ObjectId("53fb3940040980c9960ee300"), price: 42.00 },
{count:3, productId:ObjectId("53fb3940040980c9960ee301"), price: 0.99},
{count:5, productId:ObjectId("53fb3940040980c9960ee302"), price: 199.00}
]
}
इस डेटा मॉडल और एकत्रीकरण पाइपलाइनों के उपयोग के साथ, आपको कई फायदे हैं:
- आपको किसी ग्राहक की कीमतों और पते या नाम परिवर्तन या उपहार खरीद पर स्वतंत्र रूप से नज़र रखने की आवश्यकता नहीं है - यह पहले से ही प्रलेखित है।
- एकत्रीकरण पाइपलाइनों का उपयोग करके, आप स्वतंत्र रूप से मूल्य निर्धारण डेटा संग्रहीत किए बिना मूल्य रुझान बना सकते हैं। आप बस वर्तमान . स्टोर करें ऑर्डर दस्तावेज़ में किसी आइटम की कीमत।
- यहां तक कि जटिल एकत्रीकरण जैसे मूल्य लोच, राज्य / शहर द्वारा कारोबार और समान रूप से बहुत ही सरल एकत्रीकरण का उपयोग करके किया जा सकता है।
सामान्य तौर पर, यह कहना सुरक्षित है कि एक दस्तावेज़ उन्मुख डेटाबेस में, प्रत्येक संपत्ति या क्षेत्र जो भविष्य में परिवर्तन के अधीन है और यह परिवर्तन एक अलग अर्थ का निर्माण करेगा, दस्तावेज़ के अंदर संग्रहीत किया जाना चाहिए। सब कुछ जो भविष्य में परिवर्तन के अधीन है, लेकिन अर्थ अर्थ को नहीं छूता है (उदाहरण में उपयोगकर्ता पासवर्ड) एक GUID के माध्यम से जोड़ा जा सकता है।