Pivot Table কি? ডাটাবেজ ডিজাইন করার সময় কিভাবে বুঝবেন কোন ক্ষেত্রে কোন রিলেশন প্রয়োজন। কখন Pivot Table ইউজ করতে হয়।

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 বলা হয়।

  • রিলেশন: ডাটাবেজ সম্পর্ক বা রিলেশন এর মধ্য থেকে বহুল ব্যবহৃত ৩ প্রকার উপস্থাপন করা হলো:

    1. One-to-One
    • একটি টেবিলের একটি রেকর্ড অন্য টেবিলের কেবলমাত্র একটি রেকর্ডের সাথে সম্পর্কিত থাকে।
    1. One-to-Many
    • একটি টেবিলের একটি রেকর্ড অন্য টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।
    1. Many-to-Many (অনেক:অনেক সম্পর্ক)
    • একটি টেবিলের একাধিক রেকর্ড অন্য টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।

ডাটাবেজ ডিজাইন করার সময় কিভাবে বুঝবেন কোন ক্ষেত্রে কোন রিলেশন প্রয়োজন। কখন Pivot Table ইউজ করতে হয়।

চিত্র অনুযায়ী ডাটাবেজ রিলেশনগুলো এমনভাবে বর্ণনা করার চেষ্টা করছি যেন, আপনাদের জন্য ডাটাবেজ ডিজাইন করতে সহজ হয়।

চিত্রে article_category এবং article_tag টেবিল দুটি Pivot Table। এবার পর্যায়ক্রমে এই ডাটাবেজ ডিজাইনে প্রতিটি ডাটাবেজ রিলেশন ব্যাখ্যা করার চেষ্টা করবো।

  1. 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) নামে একটি ফিল্ডে রাখতে হবে।
  2. 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) নামে একটি ফিল্ডে রাখতে হবে।
  3. 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 প্রয়োজন।
    • তাহলে ডাটাবেজ ডিজাইন করার সময় articlestags টেবিলের (id) ফিল্ডকে article_tag টেবিলে (article_id ও tag_id) নামে দুইটি ফিল্ডে রাখতে হবে।
  4. 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 প্রয়োজন।
    • তাহলে ডাটাবেজ ডিজাইন করার সময় articlescategories টেবিলের (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 প্রয়োজন হয়, যা posttag গুলোর আইডি সংরক্ষণ করে।

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 সম্পর্কের জন্য পিভট টেবিল প্রয়োজন।

অবশ্যই আপনার মতামত জানাতে ভুলবেন না। সবাইকে ধন্যবাদ জানিয়ে আর্টিকেলটি এখানে শেষ করছি। সবাই ভালো থাকবেন।

10 Likes

ভাই সুন্দর ভাবে বুঝিয়েছেন :smiling_face_with_three_hearts:

3 Likes

মাশাআল্লাহ নাইম ভাই। দারুণ লিখেছেন। দুই সপ্তাহ আগে ডাটাবেজের এই বিষয়গুলো বুঝে আসছে। কখন পিভোট টেবিলের দরকার হয়, কেন দরকার হয় বিষয়গুলো বুঝতে সময় লাগছে ভালোই। ডাটাবেজের এন্টিটি, এট্রিবিউট, বাইনারি, ইউনারি, কার্ডিনালিটি রিলেশন, ইআর ডায়াগ্রাম বিষয়গুলো বুঝে তার উপর নির্ভর করে ডাটাবেজ ডিজাইন, সেটাকে লারাভেলের এলোকুয়েন্টের সাথে এলাইন করা সবমিলিয়ে ভালোই লার্নিং কার্ভ চলছে। সবকিছু পুরোপুরি আয়ত্ত হয় নাই এখনো। কনসেপ্ট বোঝা আর সেটাকে প্রয়োগ করার মধ্যে অনিশ্চয়তা আছে এখনো। এমন কন্টেন্ট আরো কদিন আগে পেলে কিছু কষ্ট কম হতো। যে ভিডিওটি আমার জন্য এক্ষেত্রে হেল্পফুল ছিল। এখনো রেফারেন্স হিসেবে দেখি। টাইমলাইন করে দেয়া আছে ভিডিওতে। শেষের তিনটা টাইমলাইনে পুরো কনসেপ্টটা উইথ এক্সাম্পল শেয়ার করেছে। বিগিনারদের জন্য হেল্পফুল হতে পারে

1 Like

ভাই, লিখতে ইচ্ছে করে কিন্তু সময় বের করা কঠিন হয়ে যায়। আগামীতে আরো ভালো করে লেখার চেষ্টা করবো। ভালো থাকবেন ভাই♥️

পিভট টেবিল, রিলেশনশিপ এবং কার্ডিনালিটির মতো কনসেপ্টগুলো বোঝা একটু সময়সাপেক্ষ। কারণ কনসেপ্ট বোঝা এবং সেটা প্রয়োগ করার মধ্যে পার্থক্যটা বুঝতে গেলে একটু সময় নিতে হয়। তবে একবার সেগুলো পুরোপুরি বুঝতে পারলে কাজগুলো অনেক সহজ হয়ে যায়।

ভালো কিছু নিয়ে সময় দিচ্ছেন। এগিয়ে যান…

1 Like

খুবই গুরুত্বপূর্ণ টপিক। এটা সামলাতে পারিনা এখন আরও সুবিধা হলো বুঝতে।

2 Likes

আমিও খুব ভালো পারিনা। বার বার ইউজ করতে করতে কয়েকটি রিলেশন ফ্লেক্সিবল হয়েছে।

আপনিও পোস্ট কইরেন সময় পেলে। আমরা আপনার পোস্টের অপেক্ষায় থাকবো।

1 Like