MongoDB-র কোনো fixed schema নেই, কিন্তু এর মানে এই না যে schema design গুরুত্বপূর্ণ না — এর মানে সিদ্ধান্তগুলো "এই table-এর কোন column আছে" থেকে একটা ভিন্ন প্রশ্নে সরে যায়: যেকোনো দুটো related data-র জন্য, আপনি কি একটাকে অন্যটার ভিতরে embed করেন, নাকি সেগুলো আলাদা collection-এ রাখেন আর একটাকে অন্যটা থেকে reference করেন?
Embedding related data সরাসরি parent document-এর ভিতরে রাখে, একটা nested object বা array হিসেবে:
{
name: "Rahul Verma",
address: {
city: "Kolkata",
pincode: "700001"
}
}একটা query সবকিছু return করে — কোনো দ্বিতীয় lookup দরকার নেই। Embedding সেই data-র জন্য উপযুক্ত যা শুধু তার parent-এর সাথে পড়া হয় আর সীমা ছাড়া বাড়ে না, যেমন একজন user-এর একটা address, বা একটা নির্দিষ্ট order-এর line item।
Referencing related data তার নিজের collection-এ সংরক্ষণ করে, আর parent document শুধু এর দিকে নির্দেশ করা একটা _id ধরে রাখে:
// "authors" collection-এ
{ _id: "auth1", name: "Rahul Verma" }
// "posts" collection-এ
{ title: "Getting Started with MongoDB", authorId: "auth1" }Referencing সেই data-র জন্য উপযুক্ত যা অনেক parent জুড়ে পুনরায় ব্যবহৃত হয় (একজন author-এর অনেক post আছে), একটা ব্যবহারিক সীমা ছাড়া বাড়ে (একটা জনপ্রিয় post-এর হাজার হাজার comment থাকতে পারে), বা সত্যিই নিজে থেকে query আর update করা দরকার।
| পরিস্থিতি | যেদিকে ঝুঁকবেন |
|---|---|
| Data শুধু এর parent-এর সাথে যুক্ত থাকলেই অর্থবহ | Embedding |
| একাধিক parent দ্বারা data পুনরায় ব্যবহৃত হয় | Referencing |
| Nested list খুব বড় হতে পারে (হাজার+) | Referencing |
| আপনি সবসময় দুটো একসাথে পড়েন | Embedding |
| আপনার child-কে স্বাধীনভাবে query করা দরকার | Referencing |
সব-অথবা-কিছুই না এমন একটা পছন্দ না
এই সিদ্ধান্তটা SQL normalization-এর MongoDB সমতুল্য — কিন্তু প্রতি relationship অনুযায়ী সিদ্ধান্ত নেওয়া হয়, সমানভাবে প্রয়োগ করা হয় না। একই application প্রায়ই কিছু relationship embed করে আর অন্যগুলো reference করে।