← Back to list

সহজ ভাষায় বলতে গেলে, Normalization-এর মূল লক্ষ্য হলো Database-কে এমনভাবে সাজানো, যাতে একই তথ্য…

ধরুন, একটি Student Management System-এ Student-এর নাম, Course-এর নাম, Teacher-এর নাম এবং Teacher-এর ফোন নম্বর সব একই টেবিলে রাখা হয়েছে।…

Abrar Fahim · 2026-07-20 04:57 · 0 claps · 3.2 min read
#normalization #denormalization #system-design-interview
Open on Medium ↗
Wiki topics: BIZ · Business Strategy EDU · Education & Learning

সহজ ভাষায় বলতে গেলে, Normalization-এর মূল লক্ষ্য হলো Database-কে এমনভাবে সাজানো, যাতে একই তথ্য বারবার সংরক্ষণ করতে না হয়। এর ফলে Data Redundancy কমে, Database Consistent থাকে এবং ভবিষ্যতে Data Update বা Maintain করা অনেক সহজ হয়ে যায়।

ধরুন, একটি Student Management System-এ Student-এর নাম, Course-এর নাম, Teacher-এর নাম এবং Teacher-এর ফোন নম্বর সব একই টেবিলে রাখা হয়েছে। প্রথম দেখায় এটি সহজ মনে হলেও, বাস্তবে এটি অনেক সমস্যার কারণ হতে পারে।

যদি একজন শিক্ষক ২,০০০ জন শিক্ষার্থীকে পড়ান, তাহলে তার ফোন নম্বর ২,০০০ বার Database-এ সংরক্ষণ হবে। একদিন যদি সেই শিক্ষক নম্বর পরিবর্তন করেন, তাহলে ২,০০০টি Row Update করতে হবে। ভুল করে যদি একটি Row-ও বাদ পড়ে যায়, তাহলে একই শিক্ষকের জন্য Database-এ দুই ধরনের ফোন নম্বর দেখা যাবে। এটিই Data Inconsistency-এর একটি সাধারণ উদাহরণ।

এই সমস্যার সমাধানই হলো Normalization। এখানে Teacher-এর তথ্য আলাদা একটি Table-এ রাখা হবে এবং Student বা Course Table-এ শুধু Teacher ID সংরক্ষণ করা হবে। ফলে শিক্ষক ফোন নম্বর পরিবর্তন করলে শুধু একটি জায়গায় Update করলেই পুরো System-এ নতুন তথ্য পাওয়া যাবে।

Normalization সাধারণত কয়েকটি ধাপে করা হয়। এর মধ্যে সবচেয়ে বেশি ব্যবহৃত হলো First Normal Form (1NF), Second Normal Form (2NF) এবং Third Normal Form (3NF)। বাস্তব জীবনের প্রায় সব সফটওয়্যার প্রজেক্টেই এই তিনটি ধাপ পর্যন্ত অনুসরণ করাই যথেষ্ট।

First Normal Form (1NF)-এর মূল উদ্দেশ্য হলো প্রতিটি Column-এ একটি মাত্র Value রাখা। অর্থাৎ একটি Cell-এর মধ্যে একাধিক তথ্য রাখা যাবে না। যেমন, যদি একটি Student Table-এর Phone Number কলামে 01711111111, 01822222222 একসাথে রাখা হয়, তাহলে সেটি 1NF অনুসরণ করছে না। প্রতিটি Row এবং প্রতিটি Column-এ একটি করে Atomic Value থাকতে হবে।

এরপর আসে Second Normal Form (2NF)। এখানে নিশ্চিত করা হয় যে Table-এর প্রতিটি Non-key Column সম্পূর্ণভাবে Primary Key-এর উপর নির্ভরশীল। ধরুন একটি Student_Course টেবিলে Student ID, Course ID, Student Name এবং Course Fee রাখা হয়েছে। এখানে Student Name শুধুমাত্র Student ID-এর উপর নির্ভর করে এবং Course Fee শুধুমাত্র Course ID-এর উপর নির্ভর করে। তাই এগুলো আলাদা Table-এ রাখা উচিত। এতে Partial Dependency দূর হয় এবং Database আরও Clean হয়।

সবশেষে আসে Third Normal Form (3NF)। এখানে মূল লক্ষ্য হলো Transitive Dependency দূর করা। অর্থাৎ একটি Non-key Column যেন আরেকটি Non-key Column-এর উপর নির্ভর না করে। উদাহরণ হিসেবে, যদি Course Table-এ Teacher ID-এর পাশাপাশি Teacher Phone Number-ও রাখা হয়, তাহলে Teacher Phone Number আসলে Teacher ID-এর উপর নির্ভর করছে, Course-এর উপর নয়। তাই Teacher সম্পর্কিত সব তথ্য Teacher Table-এ রাখা হবে এবং Course Table-এ শুধু Teacher ID থাকবে।

এই তিনটি ধাপ অনুসরণ করলে Database অনেক বেশি Maintainable, Scalable এবং Error-free হয়ে যায়। তাই ইন্ডাস্ট্রিতে নতুন Database Design করার সময় সাধারণত 3NF পর্যন্ত Normalize করাকেই Best Practice হিসেবে ধরা হয়।

এ কারণেই বেশিরভাগ Enterprise Application, Banking Software, ERP System কিংবা E-commerce Platform-এ Database সাধারণত Third Normal Form (3NF) পর্যন্ত Design করা হয়। এতে Database অনেক বেশি Clean, Reliable এবং Maintainable থাকে।

তবে Database Design-এর আরেকটি গুরুত্বপূর্ণ দিক হলো Performance। Database যত বেশি Normalize হবে, তত বেশি Table JOIN করতে হবে। ছোট Application-এ এটি খুব একটা সমস্যা না হলেও, বড় Scale-এর Application-এ লক্ষ লক্ষ Request Handle করার সময় JOIN অনেক ক্ষেত্রে Performance Bottleneck তৈরি করতে পারে।

এখানেই আসে Denormalization। Denormalization হলো ইচ্ছাকৃতভাবে কিছু Data Duplicate করে রাখা, যাতে বারবার বিভিন্ন Table JOIN না করেও প্রয়োজনীয় তথ্য খুব দ্রুত পাওয়া যায়। অর্থাৎ এখানে লক্ষ্য Data Structure সুন্দর রাখা নয়, বরং Read Performance সর্বোচ্চ করা।

ধরুন, Facebook বা LinkedIn-এর News Feed দেখানোর সময় প্রতিটি Post-এর সঙ্গে User-এর নাম, Profile Picture, Like Count এবং Comment Count দেখাতে হয়। যদি প্রতিবার এসব তথ্য বিভিন্ন Table থেকে JOIN করে আনতে হয়, তাহলে Response Time বেড়ে যেতে পারে। তাই অনেক ক্ষেত্রে প্রয়োজনীয় কিছু তথ্য Post-এর সঙ্গেই সংরক্ষণ করা হয়, যাতে একটি Query-তেই বেশিরভাগ Data পাওয়া যায়।

অবশ্য এর একটি Trade-off রয়েছে। একই Data একাধিক জায়গায় থাকার কারণে Storage কিছুটা বেশি লাগে এবং কোনো তথ্য পরিবর্তন হলে একাধিক জায়গায় Update করার প্রয়োজন হতে পারে। তাই Denormalization সব সমস্যার সমাধান নয়; এটি মূলত Performance Optimization-এর একটি কৌশল।

আমার কাছে সবচেয়ে ভালো Approach হলো, Project-এর শুরুতে Database-কে 3NF পর্যন্ত Normalize করা। এরপর যদি Performance সমস্যা দেখা দেয়, তাহলে প্রথমে Proper Indexing, Query Optimization, Caching (Redis) কিংবা Read Replica ব্যবহার করার চেষ্টা করা উচিত। এসব করার পরও যদি নির্দিষ্ট Query ধীরগতির থাকে, তখন প্রয়োজন অনুযায়ী Denormalization করা যেতে পারে।

সবশেষে, ভালো Database Design মানে শুধু বেশি Table বা কম Table নয়। একজন দক্ষ Backend Engineer জানেন কোথায় Data Integrity সবচেয়ে গুরুত্বপূর্ণ, কোথায় Performance সবচেয়ে গুরুত্বপূর্ণ এবং কীভাবে এই দুটির মধ্যে সঠিক Balance তৈরি করতে হয়। এই Balance-ই একটি Scalable এবং Maintainable System তৈরির অন্যতম ভিত্তি।

Database #SQL #DatabaseDesign #Normalization #Denormalization #BackendDevelopment #SoftwareEngineering #SystemDesign #PostgreSQL #MySQL


메타데이터
post_id
f6ee3cd3cbd2
slug
সহজ-ভাষায়-বলতে-গেলে-normalization-এর-মূল-লক্ষ্য-হলো-database-কে-এমনভাবে-সাজানো-যাতে-একই-তথ্য-f6ee3cd3cbd2
url
https://medium.com/@abrarfahimtasin/%E0%A6%B8%E0%A6%B9%E0%A6%9C-%E0%A6%AD%E0%A6%BE%E0%A6%B7%E0%A6%BE%E0%A7%9F-%E0%A6%AC%E0%A6%B2%E0%A6%A4%E0%A7%87-%E0%A6%97%E0%A7%87%E0%A6%B2%E0%A7%87-normalization-%E0%A6%8F%E0%A6%B0-%E0%A6%AE%E0%A7%82%E0%A6%B2-%E0%A6%B2%E0%A6%95%E0%A7%8D%E0%A6%B7%E0%A7%8D%E0%A6%AF-%E0%A6%B9%E0%A6%B2%E0%A7%8B-database-%E0%A6%95%E0%A7%87-%E0%A6%8F%E0%A6%AE%E0%A6%A8%E0%A6%AD%E0%A6%BE%E0%A6%AC%E0%A7%87-%E0%A6%B8%E0%A6%BE%E0%A6%9C%E0%A6%BE%E0%A6%A8%E0%A7%8B-%E0%A6%AF%E0%A6%BE%E0%A6%A4%E0%A7%87-%E0%A6%8F%E0%A6%95%E0%A6%87-%E0%A6%A4%E0%A6%A5%E0%A7%8D%E0%A6%AF-f6ee3cd3cbd2
canonical_url
https://medium.com/@abrarfahimtasin/%E0%A6%B8%E0%A6%B9%E0%A6%9C-%E0%A6%AD%E0%A6%BE%E0%A6%B7%E0%A6%BE%E0%A7%9F-%E0%A6%AC%E0%A6%B2%E0%A6%A4%E0%A7%87-%E0%A6%97%E0%A7%87%E0%A6%B2%E0%A7%87-normalization-%E0%A6%8F%E0%A6%B0-%E0%A6%AE%E0%A7%82%E0%A6%B2-%E0%A6%B2%E0%A6%95%E0%A7%8D%E0%A6%B7%E0%A7%8D%E0%A6%AF-%E0%A6%B9%E0%A6%B2%E0%A7%8B-database-%E0%A6%95%E0%A7%87-%E0%A6%8F%E0%A6%AE%E0%A6%A8%E0%A6%AD%E0%A6%BE%E0%A6%AC%E0%A7%87-%E0%A6%B8%E0%A6%BE%E0%A6%9C%E0%A6%BE%E0%A6%A8%E0%A7%8B-%E0%A6%AF%E0%A6%BE%E0%A6%A4%E0%A7%87-%E0%A6%8F%E0%A6%95%E0%A6%87-%E0%A6%A4%E0%A6%A5%E0%A7%8D%E0%A6%AF-f6ee3cd3cbd2
author_url
https://medium.com/@abrarfahimtasin
status
ok
fetched_at
2026-07-30 01:40:09