6.2.3 ডেটাবেজ রিলেশনশিপ (Database Relationship)

ডেটাবেজ রিলেশনশিপ বলতে আসলে ডেটাবেজের টেবিলেগুলোর মধ্যে সম্পর্ক বোঝানো হয়। একটি ডেটাবেজে এক বা একাধিক টেবিল থাকতে পারে। যখন একাধিক টেবিল থাকে, তখন প্রায়শই টেবিলগুলোর মধ্যে সম্পর্ক বা রিলেশনশিপ (relationship) থাকে। এই রিলেশনশিপ আবার তিন ধরনের হতে পারে।
১. ওয়ান টু ওয়ান (One to One)
২. ওয়ান টু মেনি (One to many)
৩. মেনি টু মেনি (many to many)

১. ওয়ান টু ওয়ান রিলেশন

দুটি টেবিলের মধ্যে যদি ওয়ান টু ওয়ান রিলেশনশিপ থাকে, তবে একটি টেবিলের একটি রো-এর সঙ্গে অন্য টেবিলের একটিমাত্র রো-এর সম্পর্ক খুঁজে পাওয়া যাবে। ধরা যাক, শিক্ষার্থীদের সাধারণ তথ্য রাখার জন্য একটি টেবিল student_info তৈরি হলো। আবার শিক্ষার্থীদের যোগাযোগের ঠিকানা রাখার জন্য তৈরি করা হলো student_contact টেবিল। টেবিলগুলো নিম্নরূপ:

টেবিলের নাম : student_info

Roll
(integer, primary key)
Name
(text)
Class
(integer)
1Mizanur Rahman6
2Mosharraf Hossain7
3Subir Kumar6

টেবিলের নাম : student_contact

ID
(integer, primary key)
Roll
(integer)
Phone
(text)
Email
(text)
Address
(text)
11012345678mizan@email.comAdabor, Shyamoli, Dhaka
22012345543mosharraf@email.comSector 3, Uttara, Dhaka
33014343678subir@email.comCollege Road, Mymensingh

উপরের টেবিল দুটির মধ্যে ওয়ান টু ওয়ান রিলেশনশিপ বিদ্যমান। যেমন- student_info টেবিলের প্রতিটি রো-তে একজন শিক্ষার্থীর তথ্য রয়েছে। এই টেবিলের প্রাইমারি কি হচ্ছে Roll (যদিও প্রাইমারি কি হিসেবে Roll) সবসময় সঠিক নয়, তবে এখানে আলোচনার সুবিধার্থে একটি প্রাইমারি কি হিসেবে ঘোষণা করা হয়েছে। এখন, এই টেবিলে প্রতিটি শিক্ষার্থী (রো)-এর জন্য student_contact টেবিলে একটি রো থাকবে, যেখানে ওই শিক্ষার্থীর যোগাযোগের ঠিকানা (ফোন, ইমেইল, বাসার ঠিকানা) থাকবে। student_info টেবিলে Roll হচ্ছে প্রাইমারি কি, কিন্তু student_contact টেবিলে Roll হচ্ছে ফরেন কি (foreign key)। একটি টেবিলের প্রাইমারি কি অন্য টেবিলে যখন ব্যবহার করা হয়, তখন সেই টেবিলে সেই কি-কে ফরেন কি বলা হয়। এই বিশেষ কি দিয়ে টেবিলদুটি সম্পর্কযুক্ত হয়।

২. ওয়ান টু মেনি রিলেশন

ধরা যাক, শিক্ষার্থীদের পরীক্ষার ফল সংরক্ষণ করার জন্য result নামের একটি টেবিল তৈরি করা হলো। টেবিলের প্রতিটি রো-তে একজন শিক্ষার্থীর একটি বিষয়ে পরীক্ষায় প্রাপ্ত নম্বর থাকবে।

টেবিলের নাম : result

ID
(integer, primary key)
Roll
(integer)
Subject
(Text)
Marks
(Decimal)
11Bangla70
21English76
32Bangla68
42English81

এখানে দেখা যাচ্ছে যে, student_info টেবিলের একটি রো-এর সঙ্গে result টেবিলের একাধিক রো-এর সম্পর্ক রয়েছে। যেমন- রোল নম্বর 1 যার, তার দুটি বিষয়ে প্রাপ্ত নম্বর result টেবিলে দুটি রো-তে রাখা আছে। student_info ও result টেবিলের মধ্যকার সম্পর্ককে ওয়ান টু মেনি রিলেশনশিপ বলা হয়, কারণ প্রথম টেবিলের একটি রো-এর সঙ্গে দ্বিতীয় টেবিলের একাধিক রো-এর সম্পর্ক রয়েছে। result টেবিলের roll হচ্ছে ফরেন কি।

৩. মেনি টু মেনি

যখন দুটি টেবিল এমনভাবে সম্পর্কযুক্ত হয় যে, প্রথম টেবিলের একটি রো দ্বিতীয় টেবিলের একাধিক রো-এর সঙ্গে সম্পর্কযুক্ত, আবার দ্বিতীয় টেবিলের একটি রো, প্রথম টেবিলের একাধিক রো-এর সঙ্গে সম্পর্কযুক্ত হয়, তখন তাদের মধ্যকার সম্পর্ককে বলা হয় মেনি টু মেনি রিলেশনশিপ।

ধরা যাক, স্কুলে বিভিন্ন ক্লাব তৈরি করা হয়েছে। যেমন- ফুটবল ক্লাব, ক্রিকেট ক্লাব, দাবা ক্লাব, বির্তক ক্লাব, বিজ্ঞান ক্লাব, সাংস্কৃতিক ক্লাব ইত্যাদি। একজন শিক্ষার্থী এক বা একাধিক ক্লাবের সদস্য হতে পারে। আবার একটি ক্লাবে একাধিক শিক্ষার্থী থাকতে পারে। নিচে club টেবিলটি দেওয়া হলো-

টেবিলের নাম : club

Name
(Text)
Moderator
(Text)
Established
(Date)
Cricket ClubMr. Ruhul Amin1-1-2000
Football ClubMr. Shahidul Islam5-1-1998
Debating ClubMr. Sumon Kumar3-7-2020
Chess ClubMs. Fatema Akhter1-1-2001

এই টেবিলের প্রাইমারি কি হচ্ছে Name অর্থাৎ প্রতিটি ক্লাবের অনন্য (unique) নাম থাকবে, একই নামে একাধিক ক্লাব থাকতে পারবে না।

এখন student_info ও club টেবিল দুটির মধ্যে সম্পর্ক স্থাপনের জন্য আমাদেরকে আরেকটি টেবিল তৈরি করতে হবে।

টেবিলের নাম : student_club

Roll
(Integer)
Club_name
(text)
1Cricket Club
2Cricket Club
2Football Club
2Chess Club
2Debating Club

মেনি টু মেনি রিলেশনশিপের জন্য এরকম একটি টেবিল তৈরি করতে হয়, যার কাজ হচ্ছে মূল টেবিলদুটি যুক্ত করা।