এই কোর্সের আগের প্রতিটা lesson সেই শব্দের মানে define না করেই একটা relational database ব্যবহার করেছে। এই lesson conceptual ভিত্তি — সিনট্যাক্স স্বাচ্ছন্দ্য হয়ে গেলেও পড়ার যোগ্য।
Data table-এ organize হয় (আনুষ্ঠানিকভাবে relation বলা হয়), প্রতিটার column-এর একটা fixed set আছে, আর row একে অপরের সাথে শেয়ার করা key দিয়ে সম্পর্কিত — আগের Data Constraints lesson-এর foreign key ঠিক এই সম্পর্ক mechanism-ই বাস্তবে।
একটা Relational Database Management System হলো সেই software যা relational data সংরক্ষণ, organize, আর একটা program-কে query করতে দেয় — PostgreSQL, MySQL, SQL Server, আর Oracle Database সবই RDBMS; SQL প্রায় সবগুলোই ব্যবহার করা ভাষা।
| সুবিধা | কেন এটা গুরুত্বপূর্ণ |
|---|---|
| Data integrity | Constraint (PRIMARY KEY, FOREIGN KEY, CHECK) শুধু application code-এ না, database level-এ correctness প্রয়োগ করে |
| Duplicate data নেই | Normalization (একই তথ্য একাধিক জায়গায় repeat করা এড়াতে data organize করা) update-কে consistent রাখে |
| একটা standard query language | SQL ভিন্ন RDBMS-এর মধ্যে ব্যাপকভাবে transferable, বেশিরভাগ NoSQL query API-র মতো না |
| শক্তিশালী consistency | আগের lesson থেকে একটা transaction-এর ACID গ্যারান্টি concurrent use-এ data-কে বিশ্বাসযোগ্য বানায় |
| সীমাবদ্ধতা | কেন এটা গুরুত্বপূর্ণ |
|---|---|
| একটা fixed schema | একটা table-এর প্রতিটা row একই column structure-এ ফিট করতে হবে — স্বাভাবিকভাবে অনিয়মিত data-র জন্য বিশ্রী |
| Horizontally scale করা কঠিন | join দ্রুত রেখে অনেক server জুড়ে একটা relational database ভাগ করা সত্যিকারভাবে কঠিন একটা সমস্যা |
| Join খরচবহুল হয়ে যায় | অনেক সম্পর্কিত table স্পর্শ করা একটা query সাবধান indexing ছাড়া data বাড়ার সাথে সাথে অনেক ধীর হয়ে যেতে পারে |
একটা NoSQL database (MongoDB, Redis, Cassandra, আর অন্যান্য) flexibility আর সহজ horizontal scaling-এর জন্য relational model-এর কিছু গ্যারান্টি trade করে — সাধারণত fixed-schema table-এর বদলে document, key-value pair, বা graph সংরক্ষণ করে।
| প্রশ্ন | SQL-কে সমর্থন করে | NoSQL-কে সমর্থন করে |
|---|---|---|
| Data-র কি স্পষ্ট, স্থির structure আছে? | হ্যাঁ | না — এটা row থেকে row ভিন্ন |
| Record-এর মধ্যে সম্পর্ক কি অনেক গুরুত্বপূর্ণ? | হ্যাঁ — join একটা মূল tool | কম — data প্রায়ই প্রতি document self-contained |
| কঠোর consistency (ACID) কি critical? | হ্যাঁ — banking, inventory, টাকা-সম্পর্কিত যেকোনো কিছু | কখনো speed/scale-এর জন্য relax করা গ্রহণযোগ্য |
| এটা কি বিশাল, distributed volume-এ scale করা দরকার? | কঠিন, যদিও modern RDBMS এটা উন্নত করেছে | প্রায়ই শুরু থেকেই এর জন্য design করা |
এরপর কোথায় যাবেন
এই সাইটের MongoDB কোর্স এই তুলনার NoSQL দিকটা গভীরভাবে কভার করে — এখানের relational model শক্ত মনে হলে একবার দেখার যোগ্য, একই সমস্যা সত্যিকারভাবে ভিন্ন উপায়ে সমাধান করা দেখতে।