Pivot Table কি?:
Pivot Table হলো একটি বিশেষ ধরনের টেবিল যা ডাটাবেজে দুটি টেবিলের মধ্যে Many-to-Many সম্পর্ক তৈরি করতে ব্যবহৃত হয়। যখন কোনো ডাটাবেজে একটি টেবিলের একাধিক রেকর্ড অন্য একটি টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে, তখন সরাসরি সম্পর্ক তৈরি করা যায় না। এর পরিবর্তে, pivot table এর সাহায্যে এই দুটি টেবিলের মধ্যে সম্পর্ক স্থাপন করা হয়। এখন প্রশ্ন হচ্ছে রেকর্ড কি? এমন আরো কিছু সংজ্ঞা আছে। সেগুলো অল্প করে উপস্থাপন করে আবার মূল আলোচনার ফিরে আসছি।
যারা সংজ্ঞা গুলো জানেন, তারা এই অংশটুকু স্কিপ করতে পারেন।
ডাটাবেজে টেবিল, ফিল্ড, রেকর্ড, প্রাইমারি কি, ফরেন কি:
-
Table (টেবিল):
ডাটাবেজের ডেটা যেটির মাধ্যমে স্টোর করা হয় সেটিকে টেবিল বলা হয়। টেবিলRecord(row)
এবংField(column)
এর মাধ্যমে তৈরি হয়। যেমনঃusers
,profiles
,articles
categories
,tags
,article_category
,article_tag
-
Field (column):
টেবিলের কলাম গুলোকে ফিল্ড বলা হয়। যেমন: দ্বিতীয় চিত্রে users টেবিলের ফিল্ড:id
,name
,username
,email
, ইত্যাদি। -
Record (row):
টেবিলের অনুভূমিক row গুলোকে রেকর্ড বলা হয়। প্রতিটি রেকর্ডে কোন ব্যক্তি বা বিষয়ের প্রয়োজনীয় তথ্য সংরক্ষিত থাকে। -
প্রাইমারি কী (Primary Key):
একটি ইউনিক ফিল্ড যা একটি রেকর্ডকে অন্য রেকর্ড থেকে আলাদা করতে ব্যবহৃত হয়। মনে করুন দুইজন ব্যক্তির নাম একই। তাদেরকে এই প্রাইমারি কী এর মাধ্যমে আলাদা করা হয়। যেমনঃ সিরিয়াল নাম্বার, রোল নাম্বার, ফোন নাম্বার, তাছাড়া অনেক প্রোজেক্টে ইউজার নেম কে প্রাইমারি কী হিসেবে নির্ধারণ করা হয়। -
ফরেন কী (Foreign Key):
একটি টেবিলের প্রাইমারি কী যখন অন্য টেবিলে ইউজ হয় রিলেশন করার জন্য তখন প্রথম টেবিলের প্রাইমারি key কে দ্বিতীয় টেবিলের Foreign Key বলা হয়। -
রিলেশন: ডাটাবেজ সম্পর্ক বা রিলেশন এর মধ্য থেকে বহুল ব্যবহৃত ৩ প্রকার উপস্থাপন করা হলো:
- One-to-One
- একটি টেবিলের একটি রেকর্ড অন্য টেবিলের কেবলমাত্র একটি রেকর্ডের সাথে সম্পর্কিত থাকে।
- One-to-Many
- একটি টেবিলের একটি রেকর্ড অন্য টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।
- Many-to-Many (অনেক:অনেক সম্পর্ক)
- একটি টেবিলের একাধিক রেকর্ড অন্য টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।
ডাটাবেজ ডিজাইন করার সময় কিভাবে বুঝবেন কোন ক্ষেত্রে কোন রিলেশন প্রয়োজন। কখন Pivot Table ইউজ করতে হয়।
চিত্র অনুযায়ী ডাটাবেজ রিলেশনগুলো এমনভাবে বর্ণনা করার চেষ্টা করছি যেন, আপনাদের জন্য ডাটাবেজ ডিজাইন করতে সহজ হয়।
চিত্রে article_category এবং article_tag টেবিল দুটি Pivot Table। এবার পর্যায়ক্রমে এই ডাটাবেজ ডিজাইনে প্রতিটি ডাটাবেজ রিলেশন ব্যাখ্যা করার চেষ্টা করবো।
-
Users এবং Profiles: One-to-One সম্পর্ক
- ব্যাখ্যা:
users
এবংprofiles
টেবিলের মধ্যে একটি One-to-One রিলেশন সেট করা হয়েছে। কারন, আমার প্রয়োজন হলো One ইউজার এর, One টি প্রোফাইল থাকবে (One-to-One)। তাই এই দুই টেবিলের মধ্যে One-to-One রিলেশন সেট করে হয়েছে। যদি কারো এমন প্রয়োজন হয় যে, One ইউজার এর, Many প্রোফাইল থাকবে। তাহলে উনার জন্য One-to-Many রিলেশন সেট করতে হবে। - তাহলে ডাটাবেজ ডিজাইন করার সময়
users
টেবিলের (id) ফিল্ডকেprofiles
টেবিলে (user_id) নামে একটি ফিল্ডে রাখতে হবে।
- ব্যাখ্যা:
-
Users এবং Articles: One-to-Many সম্পর্ক
- ব্যাখ্যা:
users
এবংarticles
টেবিলের মধ্যে একটি One-to-Many রিলেশন সেট করা হয়েছে। কারন, আমার প্রয়োজন হলো One ইউজার, Many আর্টিকেল তৈরি করতে পারবে (One-to-Many) কিন্তু অনেকজন (Many) ইউজার, একটি (One) আর্টিকেল লিখবে এমন আমার প্রয়োজন নাই। তাই এই মুহুর্তে (Many to One) রাখছি না। ফাইনালি এই দুই টেবিলের মধ্যে One-to-Many রিলেশন সেট করে হয়েছে। যদি দ্বিতীয় রিলেশনটি অর্থাৎ Many to One প্রয়োজন হতো তাহলে দুইটির সমন্বয়ে Many to Many রিলেশন সেট করা প্রয়োজন হতো। - তাহলে ডাটাবেজ ডিজাইন করার সময়
users
টেবিলের (id) ফিল্ডকেarticles
টেবিলে (user_id) নামে একটি ফিল্ডে রাখতে হবে।
- ব্যাখ্যা:
-
Articles এবং Tags: Many-to-Many সম্পর্ক তাই
article_tag
নামে একটি Pivot Table প্রয়োজন।- ব্যাখ্যা:
articles
এবংtags
টেবিলের মধ্যে একটি Many-to-Many রিলেশন সেট করা হয়েছে। কারন, আমার প্রয়োজন হলো One আর্টিকেলের, Many ট্যাগ থাকবে (One-to-Many) আবার Many আর্টিকেলের একটি (One) ট্যাগও থাকবে। তাই (Many to One) রাখা হয়েছে। ফাইনালি এই দুই টেবিলের মধ্যে Many-to-Many রিলেশন সেট করা হয়েছে। (One-to-Many + Many to One = Many-to-Many) - এই রিলেশনটি পরিচালনা করার জন্য
article_tag
নামে একটি অতিরিক্ত টেবিল অর্থাৎ Pivot Table প্রয়োজন। - তাহলে ডাটাবেজ ডিজাইন করার সময়
articles
ওtags
টেবিলের (id) ফিল্ডকেarticle_tag
টেবিলে (article_id ও tag_id) নামে দুইটি ফিল্ডে রাখতে হবে।
- ব্যাখ্যা:
-
Articles এবং Categories: Many-to-Many সম্পর্ক তাই
article_category
Pivot Table প্রয়োজন।- ব্যাখ্যা:
articles
এবংcategories
টেবিলের মধ্যে একটি Many-to-Many রিলেশন সেট করা হয়েছে। কারন, আমার প্রয়োজন হলো One আর্টিকেলের, Many ক্যাটাগরি থাকবে (One-to-Many) আবার Many আর্টিকেলের একটি (One) ক্যাটাগরিও থাকবে। তাই (Many to One) রাখা হয়েছে। ফাইনালি এই দুই টেবিলের মধ্যে Many-to-Many রিলেশন সেট করা হয়েছে। (One-to-Many + Many to One = Many-to-Many) - এই রিলেশনটি পরিচালনা করার জন্য
article_category
নামে একটি অতিরিক্ত টেবিল অর্থাৎ Pivot Table প্রয়োজন। - তাহলে ডাটাবেজ ডিজাইন করার সময়
articles
ওcategories
টেবিলের (id) ফিল্ডকেarticle_category
টেবিলে (article_id ও category_id) নামে দুইটি ফিল্ডে রাখতে হবে।
- ব্যাখ্যা:
সাধারণত Pivot Table ইউজ হয় এমন কিছু রিলেশন উপস্থাপন করা হল যেন, বিগিনাররা আরো ভালো করে বুঝতে পারেন।
Students & Courses টেবিলের মধ্যে সম্পর্ক
- টেবিল:
students
,courses
- পিভট টেবিল:
course_student
- ব্যাখ্যা: একজন
student
একাধিকcourse
এ ভর্তি হতে পারে, এবং একটিcourse
এ একাধিকstudent
থাকতে পারে। এই Many-to-Many সম্পর্কটি হ্যান্ডেল করার জন্যcourse_student
পিভট টেবিল ব্যবহার করা হয়।
Posts & Tags টেবিলের মধ্যে সম্পর্ক
- টেবিল:
posts
,tags
- পিভট টেবিল:
post_tag
- ব্যাখ্যা: একটি
post
এ একাধিকtag
থাকতে পারে এবং একটিtag
একাধিকpost
এ ব্যবহার হতে পারে। এই ধরনের Many-to-Many সম্পর্কের জন্য পিভট টেবিলpost_tag
প্রয়োজন হয়, যাpost
ওtag
গুলোর আইডি সংরক্ষণ করে।
Products & Categories টেবিলের মধ্যে সম্পর্ক
- টেবিল:
products
,categories
- পিভট টেবিল:
category_product
- ব্যাখ্যা: একটি
product
একাধিকcategorie
তে থাকতে পারে এবং একটিcategorie
একাধিকproduct
এর জন্য প্রযোজ্য হতে পারে। এই সম্পর্কtag
এবংpost
এর মতোই, যা পিভট টেবিলcategory_product
এই সম্পর্ককে ম্যানেজ করে।
Authors & Books টেবিলের মধ্যে সম্পর্ক
- টেবিল:
authors
,books
- পিভট টেবিল:
author_book
- ব্যাখ্যা: একজন
author
একাধিকbook
লিখতে পারেন, এবং একটিbook
একাধিকauthor
দ্বারা লেখা হতে পারে।author_book
পিভট টেবিল এই সম্পর্ক ধরে রাখে।
Users & Roles টেবিলের মধ্যে সম্পর্ক
- টেবিল:
users
,roles
- পিভট টেবিল:
role_user
- ব্যাখ্যা: একজন
user
এর একাধিকrole
থাকতে পারে এবং একটিrole
একাধিকuser
এর জন্য প্রযোজ্য হতে পারে।role_user
পিভট টেবিলের মাধ্যমে এটি হ্যান্ডেল করা হয়।
Projects & Employees টেবিলের মধ্যে সম্পর্ক
- টেবিল:
projects
,employees
- পিভট টেবিল:
employee_project
- ব্যাখ্যা: একজন
employee
একাধিকproject
কাজ করতে পারে, এবং একটিproject
এ একাধিকemployee
থাকতে পারে।employee_project
পিভট টেবিল এই সম্পর্ক ধরে রাখে।
Events & Attendees টেবিলের মধ্যে সম্পর্ক
- টেবিল:
events
,attendees
- পিভট টেবিল:
event_attendee
- ব্যাখ্যা: একটি
event
এ একাধিকattendee
থাকতে পারে, এবং একজনattendee
একাধিকevent
এ অংশ নিতে পারে।event_attendee
পিভট টেবিল ব্যবহার করে এই সম্পর্ক ম্যানেজ করা হয়।
Doctors & Patients টেবিলের মধ্যে সম্পর্ক
- টেবিল:
doctors
,patients
- পিভট টেবিল:
doctor_patient
- ব্যাখ্যা: একজন
doctor
একাধিকpatient
কে চিকিৎসা দিতে পারেন, এবং একজনpatient
একাধিকdoctor
এর অধীনে চিকিৎসা নিতে পারেন।doctor_patient
পিভট টেবিল এই সম্পর্ক রেকর্ড করে।র
Restaurants & Dishes টেবিলের মধ্যে সম্পর্ক
- টেবিল:
restaurants
,dishes
- পিভট টেবিল:
restaurant_dish
- ব্যাখ্যা: একটি
restaurant
এ একাধিকdishe
থাকতে পারে এবং একটিdishe
একাধিকrestaurant
এ পরিবেশন হতে পারে।restaurant_dish
পিভট টেবিল ব্যবহার করে এই Many-to-Many সম্পর্ক ম্যানেজ করা হয়।
Teachers & Subjects টেবিলের মধ্যে সম্পর্ক
- টেবিল:
teachers
,subjects
- পিভট টেবিল:
teacher_subject
- ব্যাখ্যা: একজন
teacher
একাধিকsubject
পড়াতে পারেন, এবং একটিsubject
একাধিকteacher
দ্বারা পড়ানো হতে পারে।teacher_subject
পিভট টেবিল ব্যবহার করে এই সম্পর্ক ট্র্যাক করা হয়।
Songs & Playlists টেবিলের মধ্যে সম্পর্ক
- টেবিল:
songs
,playlists
- পিভট টেবিল:
playlist_song
- ব্যাখ্যা: একটি
song
একাধিকplaylist
এ থাকতে পারে, এবং একটিplaylist
এ একাধিকsong
থাকতে পারে।playlist_song
পিভট টেবিল এই সম্পর্ক ম্যানেজ করে।
Vehicles & Drivers টেবিলের মধ্যে সম্পর্ক
- টেবিল:
vehicles
,drivers
- পিভট টেবিল:
vehicle_driver
- ব্যাখ্যা: একটি
vehicle
একাধিকdriver
দ্বারা চালানো যেতে পারে, এবং একজনdriver
একাধিকvehicle
চালাতে পারেন।vehicle_driver
পিভট টেবিল ব্যবহার করে এই সম্পর্ক ট্র্যাক করা হয়।
Work Orders & Technicians টেবিলের মধ্যে সম্পর্ক
- টেবিল:
work_orders
,technicians
- পিভট টেবিল:
work_order_technician
- ব্যাখ্যা: একটি
work_order
এ একাধিকtechnician
কাজ করতে পারেন এবং একজনtechnician
একাধিকwork_order
এ কাজ করতে পারেন।work_order_technician
পিভট টেবিল এই সম্পর্ক ম্যানেজ করে।
Books & Libraries টেবিলের মধ্যে সম্পর্ক
- টেবিল:
books
,libraries
- পিভট টেবিল:
library_book
- ব্যাখ্যা: একটি
book
একাধিকlibrarie
তে থাকতে পারে এবং একটিlibrarie
তে একাধিকbook
থাকতে পারে।library_book
পিভট টেবিল এই সম্পর্ক ধরে রাখে।
এভাবেই আপনি বুঝতে পারবেন কখন Many-to-Many সম্পর্কের জন্য পিভট টেবিল প্রয়োজন।
অবশ্যই আপনার মতামত জানাতে ভুলবেন না। সবাইকে ধন্যবাদ জানিয়ে আর্টিকেলটি এখানে শেষ করছি। সবাই ভালো থাকবেন।