Normalization হল ডেটাবেস ডিজাইনে একটি প্রক্রিয়া যা ডেটার অভ্যন্তরীণ কাঠামোকে উন্নত করার জন্য ব্যবহৃত হয়, যাতে ডেটাবেসে ডুপ্লিকেট ডেটা হ্রাস পায় এবং ডেটাবেসের কার্যকারিতা এবং এক্সটেনশিবিলিটি উন্নত হয়। এটি বিশেষত ডেটাবেসের সুসংগতি (Consistency) এবং পারফরম্যান্স উন্নত করতে সহায়তা করে। Normalization বিভিন্ন ধাপে বিভক্ত, যা "Normal Forms" (NF) নামে পরিচিত।
ডেটাবেস নর্মালাইজেশন সাধারণত 1NF, 2NF, 3NF, এবং BCNF পর্যন্ত হয়, এবং প্রত্যেকটি ফর্মে কিছু নির্দিষ্ট শর্ত পূরণ করতে হয়। চলুন, এগুলির ব্যবহার এবং পার্থক্য সম্পর্কে বিস্তারিত আলোচনা করি।
1. First Normal Form (1NF)
1NF হল ডেটাবেসের প্রথম স্তরের নর্মাল ফর্ম। একটি টেবিল 1NF এ থাকবে যদি তার সমস্ত কলাম Atomic (অ্যাটমিক) মান ধারণ করে এবং কোনো কলামে Repeating Groups বা Arrays না থাকে।
1NF-এর শর্তাবলী:
- প্রতিটি কলামের মান অবশ্যই Atomic বা indivisible হতে হবে, অর্থাৎ কলামের মধ্যে একাধিক মান থাকতে পারবে না।
- কোনো টেবিলের কোনো কলামে Repeated Groups বা Multiple Values থাকা যাবে না।
- প্রতিটি রেকর্ডের জন্য একটি ইউনিক প্রাইমারি কি থাকতে হবে।
ব্যবহার:
1NF এর মাধ্যমে, ডেটাবেসের তথ্য টেবিলের প্রতিটি কলামে একক (Atomic) মান ধারণ করে, যা ডুপ্লিকেট বা জটিলতাকে কমিয়ে এনে ডেটার গঠনকে সহজ করে।
উদাহরণ:
| Customer_ID | Customer_Name | Phone_Numbers |
|---|---|---|
| 1 | John Doe | 123-4567, 234-5678 |
| 2 | Jane Smith | 345-6789 |
এই টেবিলটি 1NF এ নেই কারণ Phone_Numbers কলামে একাধিক ফোন নম্বর রয়েছে। 1NF এ আনতে, কলামটিকে ভেঙে দেওয়া হবে:
| Customer_ID | Customer_Name | Phone_Number |
|---|---|---|
| 1 | John Doe | 123-4567 |
| 1 | John Doe | 234-5678 |
| 2 | Jane Smith | 345-6789 |
এখন, Phone_Number কলামে একক মান রয়েছে এবং প্রতিটি রেকর্ডে একক ফোন নম্বর রয়েছে।
2. Second Normal Form (2NF)
2NF একটি টেবিল 1NF এর শর্তগুলি পূরণ করার পর তৈরি হয়, এবং তার সঙ্গে Partial Dependency অপসারণ করতে হয়। অর্থাৎ, যদি কোনো কলাম (Non-Primary Key) শুধুমাত্র প্রাইমারি কী এর অংশ উপর নির্ভরশীল হয়, তবে সেটি 2NF এ থাকার জন্য সেটিকে আলাদা টেবিলে সরানো হয়।
2NF-এর শর্তাবলী:
- টেবিল 1NF এ থাকতে হবে।
- সকল Non-prime কলামগুলোর অবশ্যই পুরো প্রাইমারি কী (Primary Key) এর উপর নির্ভরশীল হতে হবে (Partial Dependency দূর করতে হবে)।
ব্যবহার:
2NF টেবিলগুলোর মধ্যে তথ্যের পুনরাবৃত্তি কমায় এবং ডেটার অখণ্ডতা নিশ্চিত করে, কারণ এটি প্রাইমারি কী এর সম্পূর্ণ উপর নির্ভরশীল।
উদাহরণ:
ধরা যাক, আমরা একটি টেবিল তৈরি করেছি যেখানে Course এবং Student এর সম্পর্কের তথ্য রয়েছে:
| Student_ID | Course_ID | Instructor | Student_Name |
|---|---|---|---|
| 1 | C101 | Dr. A | John Doe |
| 2 | C102 | Dr. B | Jane Smith |
| 1 | C102 | Dr. B | John Doe |
এই টেবিলটি 1NF এ থাকতে পারে, তবে 2NF এর জন্য Instructor কলামটি শুধুমাত্র Course_ID এর উপর নির্ভরশীল, কিন্তু Student_ID এর উপর নয়। তাই আমরা Instructor কলামটি আলাদা টেবিলে নিয়ে যাব এবং টেবিলটিকে 2NF এ রূপান্তর করব।
3. Third Normal Form (3NF)
3NF একটি টেবিল 2NF এর শর্তাবলী পূরণ করার পর তৈরি হয়, এবং তার সঙ্গে Transitive Dependency অপসারণ করতে হয়। অর্থাৎ, যদি কোনো কলাম অন্য কলামের মাধ্যমে নির্ভরশীল হয় (অথবা কোনও Non-Primary Key কলাম অন্য Non-Primary Key কলামের উপর নির্ভরশীল থাকে), তবে সেটি 3NF এ থাকা যাবে না।
3NF-এর শর্তাবলী:
- টেবিল 2NF এ থাকতে হবে।
- কোনও Transitive Dependency (যে প্রক্রিয়ায় একটি কলাম অন্য কলামের মাধ্যমে নির্ভরশীল) থাকতে পারবে না।
ব্যবহার:
3NF ডেটার পুনরাবৃত্তি এবং অপ্রয়োজনীয় তথ্যকে হ্রাস করে। এতে ডেটাবেসের কাঠামো আরও পরিষ্কার এবং একটি স্ট্যান্ডার্ড ফরম্যাটে থাকে।
উদাহরণ:
ধরা যাক, আমাদের Student টেবিল আছে:
| Student_ID | Student_Name | Instructor | Department |
|---|---|---|---|
| 1 | John Doe | Dr. A | Physics |
| 2 | Jane Smith | Dr. B | Math |
এখানে Department কলামটি Instructor কলামের উপর নির্ভরশীল, যা 3NF এর নিয়মের বিরুদ্ধে। আমরা Department কলামটি আলাদা টেবিলে নিয়ে যাব এবং 3NF এ রূপান্তর করব।
4. Boyce-Codd Normal Form (BCNF)
BCNF হল 3NF এর উন্নত একটি ফর্ম, যেখানে প্রাইমারি কী এর প্রত্যেকটি অংশকে ত্রুটির অনুমতি না দিয়ে, পুরোপুরি নির্ভরশীল হতে হবে। 3NF এ কিছু ক্ষেত্রে Transitive Dependency থাকলেও BCNF এ তা থাকে না।
BCNF-এর শর্তাবলী:
- টেবিল 3NF এ থাকতে হবে।
- প্রতিটি ফাংশনাল ডিপেনডেন্সি একটি সুপার কী এর উপর নির্ভরশীল হতে হবে।
ব্যবহার:
BCNF নর্মাল ফর্মে ডেটাবেস আরও সঠিকভাবে ডিজাইন করা হয় এবং আরও শক্তিশালী কনসিস্টেন্সি বজায় থাকে। এটি ডেটাবেস ডিজাইনে আরও উন্নত এবং নির্ভুল কাঠামো প্রদান করে।
উদাহরণ:
ধরা যাক, আমাদের একটি টেবিল রয়েছে:
| Course_ID | Instructor | Department |
|---|---|---|
| C101 | Dr. A | Physics |
| C102 | Dr. B | Math |
এখানে Instructor নির্ভরশীল Department এর উপর, কিন্তু Department অবশ্যই Instructor এর উপর নির্ভরশীল নয়। এটি BCNF এর শর্ত পূরণ না করে। BCNF এ আসতে, Department আলাদা টেবিলে চলে যাবে।
সারাংশ
- 1NF: ডেটা অবশ্যই Atomic হতে হবে এবং Repeating Groups থাকবে না।
- 2NF: 1NF পূরণের পর Partial Dependency অপসারণ করতে হবে।
- 3NF: 2NF পূরণের পর Transitive Dependency অপসারণ করতে হবে।
- BCNF: 3NF পূরণের পর, সমস্ত ফাংশনাল ডিপেনডেন্সি অবশ্যই সুপার কী এর উপর নির্ভরশীল হতে হবে।
এই নর্মাল ফর্মগুলো ডেটাবেসের স্ট্রাকচারকে আরও সুশৃঙ্খল এবং কার্যকর করে তোলে, ডেটার অখণ্ডতা বজায় রাখে, এবং ডেটাবেসের পারফরম্যান্স ও কার্যক্ষমতা উন্নত করতে সাহায্য করে।
Read more