📋 বিষয়সূচী (Table of Contents)

01

এক্সেল ফাইল কেন যথেষ্ট না?

⏱ ১৫ মিনিট
কল্পনা করো, তুমি একটা বড় অনলাইন শপিং কোম্পানির মালিক — নাম দিলাম "শপনগর"। প্রতিদিন তোমার কোম্পানিতে আসছে:
  • 👤 ৫০,০০০ নতুন কাস্টমার রেজিস্ট্রেশন
  • 👀 ১,০০,০০০ প্রোডাক্ট ভিউ
  • 🛒 ২০,০০০ অর্ডার
  • 💳 ১৫,০০০ পেমেন্ট
  • 🚚 হাজার হাজার ডেলিভারি আপডেট
তুমি প্রথমে ভাবলে — "একটা এক্সেল ফাইল বানিয়ে সব লিখে রাখি!" চলো দেখি এতে কী হয়।
  • এই বিশাল ডেটা কি একটা মাইক্রোসফট এক্সেল ফাইলে রাখা সম্ভব?
  • দুইজন এমপ্লয়ি যদি একই সময়ে একই ফাইল এডিট করে, কী হবে?
  • ফাইলটা যদি বড় হতে হতে ৫ GB হয়ে যায়, তাহলে খোলাই তো কষ্টকর হবে — তখন কী হবে?
  • এক লাখ অর্ডারের মধ্যে থেকে একজন কাস্টমারের একটা অর্ডার কীভাবে সেকেন্ডের মধ্যে খুঁজে বের করবে?

বাস্তবতা হলো — এক্সেলে এই সমস্যাগুলো হবেই:

সমস্যাএক্সেলে যা হয়
একসাথে একাধিক মানুষ কাজ করাফাইল লক হয়ে যায়, একজনের এডিট আরেকজনের এডিট মুছে ফেলতে পারে
বড় পরিমাণ ডেটাফাইল স্লো হয়ে যায়, ক্র্যাশ করে, ওপেন হতেই সময় লাগে
দ্রুত খোঁজা (Search)Ctrl+F দিয়ে ম্যানুয়ালি খুঁজতে হয় — লাখো রো-তে এটা অসম্ভব রকম ধীর
ডেটার নিরাপত্তাযে কেউ পুরো ফাইল ডিলিট বা কপি করে নিয়ে যেতে পারে
একাধিক অ্যাপ থেকে অ্যাক্সেসওয়েবসাইট, মোবাইল অ্যাপ — সবাই একসাথে একটা এক্সেল ফাইল থেকে ডেটা নিতে পারে না

এই কারণেই মানুষ ধীরে ধীরে একটা বিবর্তনের মধ্য দিয়ে গিয়েছে:

📓 খাতা / নোটবুক
📊 এক্সেল ফাইল
🗄️ ডেটাবেজ
খাতা ১ জন লিখতে পারে এক্সেল কয়েকজন, ছোট ডেটা হাজার রো পর্যন্ত ঠিকঠাক ডেটাবেজ লক্ষ লক্ষ ইউজার একই সময়ে অনেকে কাজ করে নিরাপদ ও দ্রুত সার্চ

চিত্র ১.১ — ডেটা ম্যানেজমেন্টের বিবর্তন: খাতা থেকে ডেটাবেজ পর্যন্ত

মিনি অ্যাক্টিভিটি (৫ মিনিট): শিক্ষার্থীদের জোড়ায় ভাগ করো। প্রতি জোড়া একটা বাস্তব বিজনেস চিন্তা করবে (যেমন — একটা মুদির দোকান বড় হয়ে চেইন শপ হয়ে গেছে)। তারা লিখবে — কোন কোন সমস্যা তারা এক্সেলে ফেস করবে যদি ব্যবসা বড় হয়?
02

ডেটা, ইনফরমেশন আর ডেটাবেজ — পার্থক্য কী?

⏱ ১৫ মিনিট
মনে করো তোমার কাছে আছে: "রহিম, ১৭, ক্লাস ১২" — এগুলো আলাদা আলাদা শব্দ, এখনো কোনো অর্থবহ বাক্য না। এটাই হলো Data — কাঁচা তথ্য। কিন্তু যখন বলি — "রহিম নামের ১৭ বছর বয়সী একজন ছাত্র ক্লাস ১২-তে পড়ে" — তখন এটা অর্থবহ হয়ে যায়। এটাই Information
Data = কাঁচা, প্রসেস না করা সংখ্যা/লেখা/তথ্যকণা (যেমন: 17, "Rahim", "Class 12")।
Information = প্রসেস করা, অর্থবহ, সিদ্ধান্ত নেওয়ার উপযোগী ডেটা।
Database = সংগঠিতভাবে সংরক্ষিত ডেটার একটা সংগ্রহ, যেখান থেকে সহজে খোঁজা, যোগ করা, পরিবর্তন করা যায়।
DBMS (Database Management System) = যে সফটওয়্যার দিয়ে ডেটাবেজ তৈরি, নিয়ন্ত্রণ ও পরিচালনা করা হয় (যেমন: MySQL, PostgreSQL)।

একই ধারণা, ভিন্ন ভিন্ন জায়গায়

প্রেক্ষাপটData (কাঁচা)Information (অর্থবহ)
🏫 স্টুডেন্ট রেকর্ড101, Karim, 78রোল ১০১-এর করিম গণিতে ৭৮ পেয়েছে
🏥 হাসপাতাল রেকর্ডP045, 102°Fরোগী P045-এর জ্বর ১০২° ফারেনহাইট — ডাক্তার দেখতে হবে
📚 লাইব্রেরি বইB220, 3বই B220-এর ৩ কপি বর্তমানে শেলফে আছে
🏦 ব্যাংক অ্যাকাউন্টAC5521, 50000অ্যাকাউন্ট AC5521-এ ব্যালেন্স ৫০,০০০ টাকা
🛒 অনলাইন শপিংU882, ORD119ইউজার U882 অর্ডার ORD119 প্লেস করেছে
প্রতিটা ছাত্রকে জিজ্ঞাসা করো — তোমাদের মোবাইলের কন্ট্যাক্ট লিস্ট কি একটা ডেটাবেজ? (উত্তর: হ্যাঁ! এটাও একটা ছোট, সহজ ডেটাবেজ — নাম, নাম্বার সংগঠিতভাবে রাখা আছে, খুঁজে বের করা যায়।)
ইন্টারঅ্যাক্টিভ ল্যাব

Data → Information → Database সিঁড়ি

প্রেক্ষাপট বেছে নাও, তারপর ধাপে ধাপে দেখো কাঁচা ডেটা কীভাবে অর্থবহ তথ্য আর সংগঠিত ডেটাবেজে পরিণত হয়।

101, Karim, 78
03

Table, Row, Column — বিল্ডিং ব্লকগুলো চেনা

⏱ ২০ মিনিট

ধরো আমরা একটা Student Management System বানাচ্ছি। নিচের টেবিলটা দেখো:

Students টেবিল StudentID Name Age Class 101 করিম 17 ১২ 102 সুমাইয়া 16 ১১ ↑ Cell (একটা একক মান) ↑ Row / Record (একজন স্টুডেন্টের সব তথ্য) Column / Field ↓

চিত্র ৩.১ — একটা টেবিলের ভেতরের প্রতিটা অংশ

টার্মরিয়েল-লাইফ অ্যানালজিটেকনিক্যাল অর্থ
Databaseপুরো একটা আলমারি, যেখানে অনেকগুলো ফাইল/খাতা গোছানো আছেএকাধিক সম্পর্কিত টেবিলের সংগ্রহ
Tableআলমারির একটা নির্দিষ্ট খাতা (যেমন: শুধু স্টুডেন্টদের খাতা)রো ও কলামে সাজানো ডেটা গ্রিড
Row (Record)খাতার একটা লাইন — একজন নির্দিষ্ট স্টুডেন্টের সব তথ্যটেবিলের একটা সম্পূর্ণ এন্ট্রি
Column (Field/Attribute)খাতার একটা নির্দিষ্ট বৈশিষ্ট্য কলাম, যেমন শুধু "বয়স" এর কলামএকটা নির্দিষ্ট ধরনের ডেটা ধারণকারী উলম্ব অংশ
Cellএকটা নির্দিষ্ট রো আর কলামের কাটাকাটি জায়গায় একটা মানএকটা একক ডেটা ভ্যালু
Schemaখাতা বানানোর আগেই বানানো নকশা — কোন কলাম কী টাইপের হবেটেবিলের গঠন/ব্লুপ্রিন্ট (নাম, টাইপ, নিয়ম)
Entityবাস্তব জগতের একটা জিনিস, যেমন — একজন "স্টুডেন্ট"যা নিয়ে তথ্য সংরক্ষণ করা হচ্ছে (সাধারণত একটা টেবিল = একটা এনটিটি)
Attributeএনটিটির একটা বৈশিষ্ট্য, যেমন — স্টুডেন্টের "নাম", "বয়স"এনটিটির একটা প্রপার্টি (কলামের সাথে সমতুল্য)
শিক্ষার্থীদের বলো তাদের নিজেদের ক্লাসের একটা "Students" টেবিল হাতে খাতায় এঁকে ফেলতে — কমপক্ষে ৪টা কলাম আর ৩টা রো দিয়ে।
04

SQL (Relational) বনাম NoSQL ডেটাবেজ

⏱ ২০ মিনিট

Relational Database (SQL)

কল্পনা করো তোমার একটা রেজিস্টার খাতা আছে, যেখানে সারি-কলাম আকারে সব গোছানো, আর প্রতিটা খাতার মধ্যে যোগসূত্র (রেফারেন্স) আছে — যেমন Orders খাতায় Customer-এর ID লেখা থাকে, যেটা দিয়ে Customers খাতায় গিয়ে পুরো ডিটেইলস পাওয়া যায়। এটাই রিলেশনাল ডেটাবেজের ধারণা।

জনপ্রিয় Relational Database: MySQLPostgreSQLSQL ServerOracle

NoSQL Database

কিন্তু Facebook বা Instagram-এর মতো কোম্পানিতে যখন প্রতি সেকেন্ডে কোটি কোটি পোস্ট, কমেন্ট, লাইক আসে, আর ডেটার গঠন প্রতিবার একরকম হয় না (কারো পোস্টে ছবি আছে, কারো নেই, কারো লোকেশন ট্যাগ আছে) — তখন কড়াকড়ি Schema মেনে চলা কঠিন হয়ে যায়। এই সমস্যা সমাধানের জন্য এসেছে NoSQL
NoSQL টাইপকীভাবে ডেটা রাখেউদাহরণ
Document Databaseপ্রতিটা রেকর্ড একটা JSON-এর মতো ডকুমেন্টMongoDB
Key-Value Databaseশুধু একটা "কী" আর তার "ভ্যালু" — যেমন ডিকশনারিRedis
Column-Family Databaseবিশাল পরিমাণ ডেটা কলাম আকারে, খুব দ্রুত রাইট/রিডCassandra
Graph Databaseসম্পর্ক/নেটওয়ার্ক (যেমন — কে কার বন্ধু)Neo4j

SQL বনাম NoSQL — সম্পূর্ণ তুলনা

বিষয়SQL (Relational)NoSQL
Structureকড়াকড়ি রো-কলাম গঠননমনীয়, বিভিন্ন গঠন সমর্থন করে
Scalabilityসাধারণত Vertical (বড় সার্ভার)Horizontal (অনেক সার্ভার জুড়ে)
Consistencyখুব কড়া (ACID)কিছুটা নমনীয় (Eventual Consistency)
FlexibilitySchema আগে থেকেই ঠিক করতে হয়Schema পরিবর্তনযোগ্য
Speed (বড় ডেটায়)জটিল রিলেশনে ভালোবিশাল, দ্রুত-পরিবর্তনশীল ডেটায় ভালো
ব্যবহারব্যাংকিং, ই-কমার্স অর্ডার সিস্টেমসোশ্যাল মিডিয়া ফিড, রিয়েল-টাইম চ্যাট, IoT
জনপ্রিয় টুলMySQL, PostgreSQLMongoDB, Redis, Cassandra
কখন SQL, কখন NoSQL? — ব্যাংকের টাকা লেনদেনে কি ভুল সহ্য করা যায়? (না!) তাই ব্যাংক SQL ব্যবহার করে। কিন্তু Facebook-এ একটা লাইক ১ সেকেন্ড পরে দেখালে কিছু হয় না — তাই ওরা NoSQL ব্যবহার করতে পারে।
ইন্টারঅ্যাক্টিভ ল্যাব

SQL vs NoSQL — সিনারিও পিকার

বিজনেস সিনারিও বেছে নাও — কোন ধরনের ডেটাবেজ উপযুক্ত এবং কেন, তা দেখো।

05

টেবিলগুলো একে অপরের সাথে কীভাবে যুক্ত হয়?

⏱ ২৫ মিনিট

Primary Key

তোমার জাতীয় পরিচয়পত্র (NID) নাম্বার — এই দেশে দুইজন মানুষের NID কখনো একরকম হবে না। এটাই Primary Key-র ধারণা — প্রতিটা রো-কে ইউনিকভাবে চেনার একটা উপায়।
Primary Key = এমন একটা কলাম (বা কলামের সেট) যা টেবিলের প্রতিটা রো-কে ইউনিকভাবে চিহ্নিত করে। এটা কখনো NULL বা ডুপ্লিকেট হতে পারে না।

Foreign Key

একটা Orders টেবিলে যদি "CustomerID" কলাম থাকে, যেটা আসলে Customers টেবিলের Primary Key-কে রেফার করে — তাহলে সেটাই Foreign Key। এটা দুই টেবিলের মধ্যে সেতু তৈরি করে।
Foreign Key = একটা টেবিলের কলাম, যা অন্য টেবিলের Primary Key-কে পয়েন্ট করে, দুই টেবিলের মধ্যে সম্পর্ক স্থাপন করতে।
Key টাইপসংজ্ঞাউদাহরণ
Candidate Keyযেসব কলাম Primary Key হওয়ার যোগ্যতা রাখেStudentID, Email — দুটোই ইউনিক হতে পারে
Composite Keyএকাধিক কলাম মিলে তৈরি Primary KeyOrderID + ProductID মিলে একটা লাইন-আইটেম শনাক্ত করা
Unique Keyডুপ্লিকেট হতে পারবে না, কিন্তু NULL হতে পারে (Primary Key-র চেয়ে কম কড়া)Phone Number কলাম

তিন ধরনের Relationship

1 : 1 Employee Passport 1 : N Customer Order 1 Order 2 Order 3 M : N Student 1 Student 2 Course A Course B

চিত্র ৫.১ — এক ধাপে তিন ধরনের সম্পর্ক: 1:1, 1:N এবং M:N

Relationship টাইপবিজনেস উদাহরণব্যাখ্যা
One-to-One (1:1)Employee ↔ Passportএকজন কর্মীর একটাই পাসপোর্ট, একটা পাসপোর্ট একজনেরই
One-to-Many (1:N)Customer → Ordersএকজন কাস্টমার অনেকগুলো অর্ডার করতে পারে
Many-to-Many (M:N)Students ↔ Coursesএকজন স্টুডেন্ট অনেক কোর্স নিতে পারে, একটা কোর্সেও অনেক স্টুডেন্ট থাকতে পারে
ইন্টারঅ্যাক্টিভ ল্যাব

Key Matcher — PK, FK, Unique, Composite

প্রতিটি কলাম/সম্পর্কের জন্য সঠিক Key টাইপ বেছে নাও।

06

একই ডেটা বারবার লেখা কেন খারাপ?

⏱ ১৫ মিনিট
ধরো Orders টেবিলে প্রতিটা অর্ডারের সাথে কাস্টমারের নাম, ঠিকানা, ফোন নাম্বার — সব আবার আবার লিখে রাখা হচ্ছে। একজন কাস্টমার ১০০টা অর্ডার করলে তার ঠিকানা ১০০ বার লেখা হবে! একদিন সে ঠিকানা পরিবর্তন করলে ১০০ জায়গায় আপডেট করতে হবে — একটা জায়গা মিস হলেই ডেটা এলোমেলো (Inconsistent)।

Before Normalization (ভুল পদ্ধতি)

OrderIDCustomerNameCustomerAddressProduct
1করিমঢাকাল্যাপটপ
2করিমঢাকামাউস
3করিমঢাকাকীবোর্ড
সমস্যাযুক্ত একটা টেবিল
Normalize করা

After Normalization (সঠিক পদ্ধতি)

Customers
CustomerIDName
C1করিম (ঢাকা)
Orders
OrderIDCustomerIDProduct
1C1ল্যাপটপ
2C1মাউস

এখন করিমের ঠিকানা বদলাতে হলে শুধু একবার, Customers টেবিলে গিয়ে বদলালেই যথেষ্ট।

নর্মাল ফর্মমূল নিয়ম (সহজ ভাষায়)
1NFপ্রতিটা সেলে একটাই মান থাকবে (একসাথে একাধিক ভ্যালু না, যেমন এক ঘরে "মাউস, কীবোর্ড" লেখা যাবে না)
2NFপ্রতিটা কলাম পুরো Primary Key-এর উপর নির্ভরশীল হতে হবে, আংশিক না
3NFএকটা কলাম যেন অন্য একটা নন-কী কলামের উপর নির্ভর না করে (Transitive dependency বাদ)
Normalization করলে ডেটা রিপিট কম হয়, স্টোরেজ বাঁচে, আর আপডেট করা সহজ হয় — কিন্তু বেশি টেবিলে ডেটা জোড়া লাগাতে (JOIN) একটু বেশি কাজ করতে হয়। এটাই একটা ট্রেড-অফ।
07

SQL কী, আর কেন গুরুত্বপূর্ণ?

⏱ ১০ মিনিট
SQL (Structured Query Language) হলো একটা ভাষা, যা দিয়ে আমরা রিলেশনাল ডেটাবেজের সাথে কথা বলি — ডেটা চাওয়া, যোগ করা, বদলানো বা মুছে ফেলার জন্য।

SQL-কে ভাবতে পারো — একটা লাইব্রেরিয়ানকে কথায় বলার মতো: "আমাকে ১৯৯০ সালের পরের সব বাংলা উপন্যাসের বইয়ের লিস্ট দাও।" SQL দিয়ে ঠিক এভাবেই ডেটাবেজকে অনুরোধ করা হয়।

কমান্ডরিয়েল-লাইফ অ্যানালজিকাজ
SELECTলাইব্রেরিয়ানকে বলা — "আমাকে এই বইগুলো দেখাও"ডেটা পড়া / দেখা
INSERTলাইব্রেরিতে নতুন বই যোগ করানতুন রো যোগ করা
UPDATEএকটা বইয়ের তথ্য সংশোধন করা (যেমন কপি সংখ্যা)বিদ্যমান রো পরিবর্তন করা
DELETEএকটা পুরনো/নষ্ট বই তালিকা থেকে সরিয়ে ফেলারো মুছে ফেলা
ইন্টারঅ্যাক্টিভ ল্যাব

SQL Command Quiz

কাজের ধরন বেছে নাও, তারপর সঠিক SQL keyword ট্যাপ করো।

08

Data Scientist-রা ডেটাবেজ কীভাবে ব্যবহার করে?

⏱ ১০ মিনিট

প্রায় প্রতিটা বড় প্রযুক্তি কোম্পানির পেছনে বিশাল ডেটাবেজ কাজ করে:

কোম্পানিডেটাবেজ কীসের জন্য ব্যবহার হয়
🏦 ব্যাংকিং সিস্টেমপ্রতিটা লেনদেন, ব্যালেন্স নির্ভুলভাবে ট্র্যাক করা
🏥 হাসপাতাল ম্যানেজমেন্টরোগীর ইতিহাস, প্রেসক্রিপশন, রিপোর্ট
📘 Facebookবিলিয়ন পোস্ট, ফ্রেন্ড কানেকশন সংরক্ষণ
▶️ YouTube / Netflixভিডিও মেটাডেটা, ইউজার ওয়াচ হিস্ট্রি (রিকমেন্ডেশনের জন্য)
📦 Amazonপ্রোডাক্ট, ইনভেন্টরি, অর্ডার, ডেলিভারি
🚗 Uberরিয়েল-টাইম রাইড, ড্রাইভার লোকেশন
🍔 ফুড ডেলিভারি অ্যাপরেস্টুরেন্ট মেনু, অর্ডার স্ট্যাটাস

Data Scientist-রা মডেল ট্রেইন করার আগে ডেটাবেজ থেকেই SQL Query দিয়ে ডেটা বের করে আনে (Extract), তারপর প্রসেস করে। তাই SQL শেখা একজন Data Scientist-এর জন্য প্রায় বাধ্যতামূলক।

আরও কিছু কনসেপ্ট (উচ্চ পর্যায়ের ডেটা সিস্টেম)

টার্মসহজ ধারণা
Data Warehouseবিভিন্ন সোর্স থেকে আসা ঐতিহাসিক ডেটা এক জায়গায় গুছিয়ে রাখা — রিপোর্ট/অ্যানালিসিসের জন্য
Data Lakeযেকোনো ধরনের কাঁচা ডেটা (স্ট্রাকচার্ড/আনস্ট্রাকচার্ড) একসাথে জমা রাখার জায়গা
BigQuery (Google)ক্লাউডে বিশাল ডেটার উপর সেকেন্ডে সেকেন্ডে অ্যানালাইসিস করার সার্ভিস
Snowflakeক্লাউড-বেজড Data Warehouse, বিভিন্ন কোম্পানি ডেটা অ্যানালিটিক্সের জন্য ব্যবহার করে
09

হাতে-কলমে: Python দিয়ে SQLite ডেটাবেজ

⏱ লাইভ ডেমো

আমরা এখন Google Colab-এ একটা ছোট ডেটাবেজ বানিয়ে ফেলব। কোনো আগের প্রোগ্রামিং জ্ঞান দরকার নেই — প্রতিটা লাইন ব্যাখ্যা করা হবে।

ধাপ ১ — ডেটাবেজ তৈরি করা

Colab Cell 1 · Python
import sqlite3

# ডেটাবেজের সাথে কানেকশন তৈরি (না থাকলে নতুন তৈরি হবে)
conn = sqlite3.connect("school.db")
cursor = conn.cursor()

print("ডেটাবেজ তৈরি হয়ে গেছে ✅")
ডেটাবেজ তৈরি হয়ে গেছে ✅
লাইন বাই লাইন:
১) import sqlite3 — পাইথনের বিল্ট-ইন লাইব্রেরি যা দিয়ে SQLite ডেটাবেজ চালানো যায়।
২) sqlite3.connect("school.db") — "school.db" নামের একটা ফাইল তৈরি/কানেক্ট করা, এটাই আমাদের ডেটাবেজ।
৩) cursor — এটা দিয়েই আমরা SQL কমান্ড চালাব।
অনেকে conn.close() না করে কানেকশন খোলা রেখে দেয় — এতে ফাইল লক হয়ে যেতে পারে। কাজ শেষে সবসময় কানেকশন বন্ধ করা উচিত।

ধাপ ২ — টেবিল তৈরি করা

Colab Cell 2 · Python
cursor.execute("""
CREATE TABLE IF NOT EXISTS students (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER,
    class TEXT
)
""")
conn.commit()
print("টেবিল তৈরি হয়ে গেছে ✅")
টেবিল তৈরি হয়ে গেছে ✅
ব্যাখ্যা: CREATE TABLE দিয়ে নতুন টেবিল বানানো হয়। id INTEGER PRIMARY KEY মানে id কলামটাই ইউনিক আইডেন্টিফায়ার। conn.commit() ছাড়া পরিবর্তন ডেটাবেজে স্থায়ীভাবে সেভ হয় না।

ধাপ ৩ — ডেটা যোগ করা (Insert)

Colab Cell 3 · Python
cursor.execute("INSERT INTO students (name, age, class) VALUES (?, ?, ?)",
               ("করিম", 17, "১২"))
cursor.execute("INSERT INTO students (name, age, class) VALUES (?, ?, ?)",
               ("সুমাইয়া", 16, "১১"))
conn.commit()
print("২ জন স্টুডেন্ট যোগ হয়েছে ✅")
২ জন স্টুডেন্ট যোগ হয়েছে ✅
? চিহ্নগুলো হলো প্লেসহোল্ডার — সরাসরি ভ্যালু বসালে "SQL Injection" নামক নিরাপত্তা ঝুঁকি হতে পারে, তাই সবসময় ? ব্যবহার করা Best Practice।

ধাপ ৪ — ডেটা পড়া (Read / SELECT)

Colab Cell 4 · Python
cursor.execute("SELECT * FROM students")
rows = cursor.fetchall()
for row in rows:
    print(row)
(1, 'করিম', 17, '১২')
(2, 'সুমাইয়া', 16, '১১')
fetchall() সব রেজাল্ট একটা লিস্ট হিসেবে নিয়ে আসে। ছোট ডেটাসেটে ঠিক আছে, কিন্তু লাখ লাখ রো থাকলে fetchone() বা batch করে আনা উচিত — নাহলে মেমোরি ভরে যাবে।

ধাপ ৫ — ডেটা পরিবর্তন করা (Update)

Colab Cell 5 · Python
cursor.execute("UPDATE students SET age = ? WHERE name = ?", (18, "করিম"))
conn.commit()
print("করিমের বয়স আপডেট হয়েছে ✅")
করিমের বয়স আপডেট হয়েছে ✅
ভয়ংকর ভুল: WHERE ছাড়া UPDATE চালালে টেবিলের সবার বয়স বদলে যাবে! সবসময় WHERE কন্ডিশন ভালোভাবে চেক করো।

ধাপ ৬ — ডেটা মুছে ফেলা (Delete)

Colab Cell 6 · Python
cursor.execute("DELETE FROM students WHERE name = ?", ("সুমাইয়া",))
conn.commit()
print("সুমাইয়ার রেকর্ড মুছে ফেলা হয়েছে ✅")
সুমাইয়ার রেকর্ড মুছে ফেলা হয়েছে ✅

ধাপ ৭ — শর্তসাপেক্ষে ডেটা ফিল্টার করা

Colab Cell 7 · Python
cursor.execute("SELECT * FROM students WHERE age > 15")
for row in cursor.fetchall():
    print(row)

conn.close()
(1, 'করিম', 18, '১২')
WHERE age > 15 শুধু শর্ত পূরণ করা রো-গুলোই দেখায়। শেষে conn.close() দিয়ে কানেকশন বন্ধ করা হয়েছে — এটা Best Practice।
10

বিগিনাররা যেসব ভুল করে

⏱ ১০ মিনিট
ভুল ধারণাকেন এটা ভুলসমাধান
Database আর Table গুলিয়ে ফেলাDatabase হলো পুরো আলমারি, Table হলো একটা খাতা মাত্রমনে রাখো — একটা Database-এ অনেক Table থাকতে পারে
Row আর Column গুলিয়ে ফেলাRow = আনুভূমিক (একজনের সব তথ্য), Column = উলম্ব (একটা বৈশিষ্ট্য)উদাহরণ দিয়ে বারবার প্র্যাকটিস করো
Primary Key ভুলে যাওয়াকোন রো ইউনিক তা বোঝা যায় না, ডুপ্লিকেট হয়ে যেতে পারেপ্রতিটা টেবিলে অবশ্যই একটা Primary Key রাখো
সব ডেটা একটা টেবিলে রাখাডেটা রিপিট হয়, আপডেট করা কঠিন হয়ে যায়Normalization করে আলাদা আলাদা টেবিলে ভাগ করো
Relationship উপেক্ষা করাটেবিলগুলো বিচ্ছিন্ন হয়ে যায়, ডেটা জোড়া লাগানো যায় নাForeign Key দিয়ে টেবিল কানেক্ট করো
এক্সেলকে ডেটাবেজ মনে করাএক্সেলে multi-user, বড় স্কেল, রিলেশনশিপ ম্যানেজমেন্ট নেইছোট, একক ব্যবহারের জন্যই শুধু এক্সেল ঠিক আছে
SQL আর MySQL একই জিনিস ভাবাSQL হলো ভাষা, MySQL হলো সেই ভাষা ব্যবহার করে এমন একটা DBMS সফটওয়্যারSQL = ভাষা, MySQL/PostgreSQL = সফটওয়্যার যা এই ভাষা বোঝে
11

বড় কোম্পানিগুলো কীভাবে বিশাল ডেটাবেজ সামলায়?

⏱ সংক্ষিপ্ত আলোচনা
প্র্যাকটিসসহজ ব্যাখ্যা
Data Backupনিয়মিত কপি রাখা, যাতে ডেটা হারিয়ে গেলেও ফিরে পাওয়া যায়
Securityপাসওয়ার্ড, এনক্রিপশন, অ্যাক্সেস কন্ট্রোল দিয়ে ডেটা সুরক্ষিত রাখা
Indexingবইয়ের সূচিপত্রের মতো — দ্রুত খোঁজার জন্য বিশেষ কাঠামো
Scalabilityইউজার বাড়লে সিস্টেম যেন ভেঙে না পড়ে, বরং বাড়তে পারে
Replicationএকই ডেটার একাধিক কপি বিভিন্ন সার্ভারে রাখা, যাতে একটা সার্ভার নষ্ট হলেও সিস্টেম চলতে থাকে
Cloud Databasesনিজের সার্ভার না কিনে Google/AWS/Azure-এর সার্ভারে ডেটাবেজ চালানো
12

সম্পূর্ণ উদাহরণ: একটা অনলাইন শপিং সিস্টেম

⏱ সারসংক্ষেপ ও ডিজাইন

"শপনগর"-এর জন্য চারটা মূল টেবিল দরকার:

Customers CustomerID (PK) Name, Address Orders OrderID (PK) CustomerID (FK) Products ProductID (PK) Name, Price Payments PaymentID (PK) OrderID (FK)

চিত্র ১২.১ — Customers → Orders → Products এবং Orders → Payments সম্পর্ক

টেবিলমূল কলামসম্পর্ক
CustomersCustomerID (PK), Name, Address, Phoneএকজন কাস্টমার → অনেক Order (1:N)
OrdersOrderID (PK), CustomerID (FK), OrderDateCustomers ও Products-এর মধ্যে সংযোগকারী
ProductsProductID (PK), Name, Price, StockOrders-এর সাথে M:N (এক অর্ডারে অনেক প্রোডাক্ট, এক প্রোডাক্ট অনেক অর্ডারে)
PaymentsPaymentID (PK), OrderID (FK), Amount, Methodপ্রতিটা Order-এর একটা Payment (1:1 বা 1:N রিফান্ড থাকলে)

কেন এই ডিজাইন গুরুত্বপূর্ণ: যদি Customers টেবিল না থাকতো, প্রতিটা অর্ডারে কাস্টমারের নাম-ঠিকানা বারবার লিখতে হতো (Part 6-এ যেমন দেখেছি)। Foreign Key দিয়ে সংযোগ থাকায় ডেটা একবারই লেখা লাগে, কিন্তু প্রয়োজনে সব জোড়া লাগিয়ে (JOIN করে) দেখা যায়।

অতিরিক্ত ডিজাইন অনুশীলন (ক্লাস অ্যাসাইনমেন্ট)

13

রিভিশন, MCQ, ভাইভা ও ইন্টারভিউ প্রশ্ন

⏱ শেষ ধাপ

দ্রুত রিভিশন নোট

ভাইভা প্রশ্ন (মৌখিক)

১. Database আর DBMS-এর মধ্যে পার্থক্য কী?

Database হলো সংগঠিত ডেটার সংগ্রহ, আর DBMS হলো সেই ডেটাবেজ পরিচালনা করার সফটওয়্যার (যেমন MySQL)।

২. Primary Key NULL হতে পারে কি?

না, Primary Key কখনো NULL হতে পারে না — কারণ এটাই প্রতিটা রো-কে ইউনিকভাবে চিহ্নিত করে।

৩. এক্সেল আর ডেটাবেজের মূল পার্থক্য কী?

এক্সেল একজন/কয়েকজনের জন্য ছোট স্কেলে ভালো; ডেটাবেজ বড় স্কেলে, মাল্টি-ইউজার, নিরাপদ ও দ্রুত।

ইন্টারভিউ প্রশ্ন (৩০টি — বিগিনার লেভেল)

১. ডেটাবেজ কী?

সংগঠিতভাবে সংরক্ষিত ডেটার একটা সংগ্রহ যেখান থেকে সহজে ডেটা খোঁজা, যোগ করা যায়।

২. DBMS কী?

ডেটাবেজ তৈরি ও পরিচালনার সফটওয়্যার সিস্টেম।

৩. RDBMS আর DBMS-এর পার্থক্য কী?

RDBMS-এ ডেটা টেবিল আকারে, রিলেশনশিপসহ থাকে; সাধারণ DBMS-এ এই কড়াকড়ি নাও থাকতে পারে।

৪. Primary Key কী?

প্রতিটা রো-কে ইউনিকভাবে চিহ্নিত করার কলাম।

৫. Foreign Key কী?

একটা টেবিলের কলাম যা অন্য টেবিলের Primary Key-কে রেফার করে।

৬. Candidate Key কী?

যেসব কলাম Primary Key হওয়ার যোগ্যতা রাখে।

৭. Composite Key কী?

একাধিক কলাম মিলে তৈরি Primary Key।

৮. Normalization কেন করা হয়?

ডেটা রিপিটেশন কমাতে এবং আপডেট সহজ করতে।

৯. 1NF, 2NF, 3NF সংক্ষেপে কী?

1NF: একটা সেলে একটাই মান। 2NF: পুরো Key-এর উপর নির্ভরশীলতা। 3NF: নন-কী কলামের উপর নির্ভরশীলতা বাদ।

১০. SQL কী?

রিলেশনাল ডেটাবেজের সাথে যোগাযোগের জন্য ব্যবহৃত ভাষা।

১১. SQL আর MySQL-এর পার্থক্য কী?

SQL ভাষা, MySQL সেই ভাষা ব্যবহারকারী একটা DBMS সফটওয়্যার।

১২. SELECT কী করে?

ডেটাবেজ থেকে ডেটা পড়ে/দেখায়।

১৩. NoSQL কেন তৈরি হয়েছিল?

বিশাল, দ্রুত-পরিবর্তনশীল, নমনীয় গঠনের ডেটা সামলানোর জন্য।

১৪. Document Database কী?

প্রতিটা রেকর্ড JSON-এর মতো ডকুমেন্ট আকারে থাকে (যেমন MongoDB)।

১৫. Key-Value ডেটাবেজ কী?

একটা key আর তার সাথে যুক্ত একটা value রাখা হয় (যেমন Redis)।

১৬. One-to-Many সম্পর্কের উদাহরণ দাও।

একজন কাস্টমার অনেক অর্ডার করতে পারে।

১৭. Many-to-Many সম্পর্কের উদাহরণ দাও।

স্টুডেন্ট ও কোর্স — একজন স্টুডেন্ট অনেক কোর্স নিতে পারে, একটা কোর্সে অনেক স্টুডেন্ট থাকতে পারে।

১৮. Schema কী?

টেবিলের গঠন — কলামের নাম, টাইপ, নিয়ম।

১৯. Entity ও Attribute কী?

Entity = বাস্তব জগতের বস্তু (যেমন Student); Attribute = তার বৈশিষ্ট্য (যেমন নাম, বয়স)।

২০. ACID কী বোঝায়?

Atomicity, Consistency, Isolation, Durability — SQL ডেটাবেজের লেনদেন নিরাপদ রাখার নিয়মাবলি।

২১. Data Warehouse কী?

বিভিন্ন সোর্স থেকে ঐতিহাসিক ডেটা এক জায়গায় গুছিয়ে রাখার সিস্টেম, রিপোর্টের জন্য।

২২. Data Lake কী?

যেকোনো ধরনের কাঁচা ডেটা একসাথে জমা রাখার জায়গা।

২৩. Indexing কী?

বইয়ের সূচিপত্রের মতো — দ্রুত সার্চের জন্য বিশেষ কাঠামো।

২৪. Replication কেন দরকার?

একটা সার্ভার নষ্ট হলেও সিস্টেম চালু রাখতে ডেটার একাধিক কপি রাখা হয়।

২৫. Excel-কে ডেটাবেজ বলা যায় না কেন?

মাল্টি-ইউজার সাপোর্ট, বড় স্কেল, রিলেশনশিপ ম্যানেজমেন্ট, নিরাপত্তা — এসবের অভাব আছে।

২৬. Cloud Database কী?

নিজের সার্ভার না কিনে AWS/GCP/Azure-এর সার্ভারে ডেটাবেজ চালানো।

২৭. WHERE ক্লজ ছাড়া UPDATE চালালে কী হয়?

টেবিলের সব রো-এর ভ্যালু পরিবর্তন হয়ে যায় — এটা বিপজ্জনক ভুল।

২৮. Unique Key আর Primary Key-এর পার্থক্য কী?

Unique Key NULL হতে পারে, কিন্তু Primary Key কখনো NULL হতে পারে না।

২৯. একজন Data Scientist কেন SQL শিখবে?

মডেল ট্রেইনিংয়ের আগে ডেটাবেজ থেকে ডেটা বের করে আনতে (Extract) SQL লাগে।

৩০. BigQuery/Snowflake কী?

ক্লাউডে বিশাল ডেটার উপর দ্রুত অ্যানালিসিস করার Data Warehouse সার্ভিস।

MCQ (উত্তরসহ)

১. নিচের কোনটি Primary Key-এর বৈশিষ্ট্য? (a) NULL হতে পারে (b) ডুপ্লিকেট হতে পারে (c) ইউনিক ও NOT NULL (d) কোনোটিই না

উত্তর: (c) ইউনিক ও NOT NULL

২. MongoDB কোন ধরনের ডেটাবেজ? (a) Relational (b) Document NoSQL (c) Graph (d) Key-Value

উত্তর: (b) Document NoSQL

৩. দুই টেবিলের সংযোগ তৈরি করে কোনটা? (a) Primary Key (b) Foreign Key (c) Schema (d) Index

উত্তর: (b) Foreign Key

৪. SELECT কমান্ডের কাজ কী? (a) ডেটা মোছা (b) ডেটা যোগ করা (c) ডেটা পড়া (d) টেবিল বানানো

উত্তর: (c) ডেটা পড়া

৫. 1NF-এর মূল শর্ত কী? (a) একটা সেলে একাধিক ভ্যালু (b) একটা সেলে একটাই ভ্যালু (c) Foreign Key থাকা লাগবে (d) কোনোটিই না

উত্তর: (b) একটা সেলে একটাই ভ্যালু

ক্লাসরুম অ্যাক্টিভিটি সারসংক্ষেপ

হোমওয়ার্ক অ্যাসাইনমেন্ট

  1. নিজের পছন্দের যেকোনো একটা বিজনেস (যেমন — একটা রেস্টুরেন্ট) এর জন্য ৩টা টেবিল ডিজাইন করো, প্রতিটাতে Primary Key ও Foreign Key দেখাও।
  2. Google Colab-এ আজকের শেখানো ৭টা ধাপ নিজে নিজে আবার রান করো, এবার নিজের পছন্দের ডেটা দিয়ে।
  3. SQL vs NoSQL তুলনা টেবিলটা মুখস্থ না করে, নিজের ভাষায় ৫টা বাক্যে লেখো।