Database Normalization (2NF and 3NF)

আমরা গত পর্বে দেখেছিলাম নরমালাইজেশন এর বেসিক অংশ এবং First Normal form (1NF)। এ পর্বে আমরা আলোচনা করব Database Normalization (2NF and 3NF), Second Normal form (2NF)  এবং Third Normal form (3NF)  নিয়ে।

Second Normal form (2NF)  এর জন্য দুইটি শর্ত পূরণ করতে হবে –

১)  টেবিলটি First Normal form (1NF)  এ থাকতে হবে

২) কোনও non-prime অথবা non-key attribute, candidate key এর subset এর উপর নির্ভরশীল হতে পারবে না।

 

এখন প্রশ্ন হচ্ছে candidate key কি?

candidate key মানে এমন কলাম যা একটি টেবিলের প্রতিটি রেক কে আলাদা ভাবে চিহ্নিত করতে পারে। একটি টেবিলের এক বা একাধিক candidate key থাকতে পারে। এর মধ্যে একটি বিশেষ candidate key কে আমরা primary key বলি। যে attribute/column কোনও candidate key এর অংশ নয় তাকে non-prime attribute অথবা non-key attribute বলে।

 

আমদের গত ব্লগের Student টেবিলটি First normal form (1NF) এ আছে। আমাদের দ্বিতীয় শর্তটি পূরণ করতে হবে। Student টেবিল থেকে আমরা লক্ষ্ করি যে, {stdRoll, subjectName} কলাম দুটি মিলে হচ্ছে একটা candidate key এবং name, department, semester কলামগুলো হচ্ছে non-prime attribute।

এখন name, department, semester কলামগুলি শুধুমাত্র stdRoll কলামের উপর নির্ভরশীল এবং stdRoll হল candidate key: { stdRoll, subjectName } এর একটি subset।

আমরা Student টেবিলটিকে নিচের মত করে Second normal form (2NF) এ নিতে পারি। আমারা একটি নতুন টেবিল Student_Subject তৈরি করলাম স্টুডেন্ট এবং সাবজেক্ট এর মধ্যে সম্পর্ক ঠিক রাখার জন্য।

 

 

 

 

 

Table: Student

Students Roll name department semester
40101 Md. Kamrul Islam Computer First
40102 Ruhul Amin Electrical Third
40103 Rejaul Karim Civil Fourth
40104 Fayej Chowdhury Textile Seventh
40105 Faria Rahman AIDT First

Table: Student Subject

Students Roll Subject Name
40101 Bangla
40101 English
40101 Mathematics
40102 Bangla
40102 ICT
40102 Mathematics
40103 Bangla
40103 English
40103 ICT
40104 Programming in Java
40104 English
40104 Mathematics
40105 Bangla
40105 English
40105 DBMS

 

 

তাহলে আমাদের ডাটাবেজ এখন Second normal form (2NF)-এ চলে আসল। এবারে আমরা শেষ ধাপে যাব এবং একে Third normal form (3NF)-এ নেব। যার মাধ্যমে আমাদের নরমালাইজেশন করার প্রক্রিয়াটি সম্পন্ন হবে।

Third normal form (3NF) এ নেওয়ার জন্য আমদের নিচের দুটি শর্ত পূরণ করতে হবে –

১) টেবিল Second normal form (2NF) এ থাকতে হবে

২) কোনো Transitive functional dependency থাকতে পারবে না

এটা আবার কি?

Transitive functional dependency – মনে করি একটি টেবিলের প্রাইমারি কি (primary key) হচ্ছে A এবং এই টেবিলের দুটি নন-প্রাইম (non-prime) কলাম হচ্ছে B এবং C, যেখানে C কলামের ভ্যালু যতটা A কলামের ভ্যালুর উপরে নির্ভরশীল তার চাইতে B কলামের ভ্যালুর উপর বেশি নির্ভরশীল, আবার B কলামের ভ্যালু A কলামের ভ্যালুর উপরে সরাসরি নির্ভরশীল, তাহলে আমরা বলতে পারি যে C কলাম transitively কলাম A এর উপর নির্ভরশীল। ওই যে, ছাগল ঘাস খায়, মানুষ ছাগল খায়, তার মানে মানুষ ঘাস খায় – এরকম লজিক আর কী।]

আমাদের Student টেবিলটিতে stdRoll হচ্ছে প্রাইমারি কি (primary key) এবং department আর semester হচ্ছে দুটি নন-প্রাইম (non-prime) কলাম। আমরা লক্ষ করি যে, semester কলামটি যতটা studentId কলামের উপরে নির্ভরশীল তার চাইতে বেশি নির্ভরশীল department কলামটির উপরে এবং department কলামটি আবার stdRoll কলামের উপরে সরাসরি নির্ভরশীল(যেহেতু ‍student এর পরিচয় তার department)। সুতরাং আমরা বলতে পারি যে semester কলামটি transitively কলাম stdRoll এর উপর নির্ভরশীল।

তাই Student টেবিলটিকে Third normal form (3NF)-এ নিতে নিচের মতো পরিবর্তন করতে পারি এবং dep_semester নামে একটি নতুন টেবিল তৈরি করতে পারি –

 

Table: Student

Students Roll name department
40101 Md. Kamrul Islam Computer
40102 Ruhul Amin Electrical
40103 Rejaul Karim Civil
40104 Fayej Chowdhury Textile
40105 Faria Rahman AIDT

 

Table: dep_semester

department semester
Computer First
Electrical Third
Civil Fourth
Textile Seventh
AIDT First

 

 

Table: StudentSubject

Students Roll Subject Name
40101 Bangla
40101 English
40101 Mathematics
40102 Bangla
40102 ICT
40102 Mathematics
40103 Bangla
40103 English
40103 ICT
40104 Programming in Java
40104 English
40104 Mathematics
40105 Bangla
40105 English
40105 DBMS

 

 

তাহলে আমরা নরমালাইজেশন করতে গিয়ে একটি টেবিল কে ভেঙে তিনটি টেবিলে রূপান্তর করলাম।  আশা করি আপনারা বুঝতে পেরেছেন কেন আমরা একটি টেবিল কে ভেঙে তিনটি টেবিলে রূপান্তর করেছে।  এইরকম আরো তিন থেকে চারটি টেবিলকে ভেঙে নরমালাইজেশন চর্চা করুন।  আশা করি নরমালাইজেশন এর কনসেপ্ট আপনাদের কাছে ক্লিয়ার হবে। যত বেশি চর্চা করব ততবেশি নরমালাইজেশন টা আমরা বুঝতে পারবো ধন্যবাদ সবাইকে।

 

জহির আহমেদ চৌধুরী

ইন্সট্রাক্টর,  কম্পিউটার ডিপার্টমেন্ট

Tags: No tags

Comments are closed.