Active Record Associations Rails অ্যাপ্লিকেশনের মধ্যে ডেটাবেস টেবিলগুলির মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। এটি ডেটাবেসের টেবিলগুলোর মধ্যে বিভিন্ন ধরনের সম্পর্ক তৈরি করে, যেমন One-to-One, One-to-Many, এবং Many-to-Many। এই অ্যাসোসিয়েশনগুলির মাধ্যমে, আপনি সহজেই ডেটাবেস টেবিলগুলির মধ্যে সম্পর্কযুক্ত রেকর্ডগুলি সহজে পরিচালনা করতে পারেন।
One-to-One Association (একটি মডেল থেকে একাধিক রেকর্ড)
One-to-One Association যখন দুটি মডেল একে অপরের সাথে একটি একক সম্পর্ক গঠন করে, তখন এটি has_one এবং belongs_to অ্যাসোসিয়েশন দ্বারা প্রতিনিধিত্ব করা হয়। উদাহরণস্বরূপ, যদি একটি User একটি Profile এর সাথে সম্পর্কিত থাকে, তবে এই সম্পর্কটি One-to-One হবে।
উদাহরণ:
ধরা যাক, আমাদের একটি User মডেল এবং একটি Profile মডেল রয়েছে। একজন ব্যবহারকারীর একটি প্রোফাইল থাকবে:
class User < ApplicationRecord
has_one :profile
end
class Profile < ApplicationRecord
belongs_to :user
end
এখানে, has_one :profile নির্দেশ করছে যে, একটি User এর সাথে একটিমাত্র Profile থাকবে এবং belongs_to :user নির্দেশ করছে যে, Profile একটি User এর সাথে সম্পর্কিত।
One-to-Many Association (একটি মডেল থেকে একাধিক রেকর্ড)
One-to-Many Association তে একটি মডেল একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে। উদাহরণস্বরূপ, একটি Author একাধিক Book এর সাথে সম্পর্কিত থাকতে পারে। এই অ্যাসোসিয়েশনটি has_many এবং belongs_to দ্বারা প্রতিনিধিত্ব করা হয়।
উদাহরণ:
ধরা যাক, আমাদের একটি Author মডেল এবং একটি Book মডেল রয়েছে। এক একজন Author একাধিক Book এর লেখক হতে পারে:
class Author < ApplicationRecord
has_many :books
end
class Book < ApplicationRecord
belongs_to :author
end
এখানে, has_many :books নির্দেশ করছে যে, একটি Author এর সাথে একাধিক Book থাকবে এবং belongs_to :author নির্দেশ করছে যে, প্রতিটি Book একটি Author এর সাথে সম্পর্কিত।
Many-to-Many Association (একাধিক মডেল থেকে একাধিক রেকর্ড)
Many-to-Many Association তে দুটি মডেল একে অপরের সাথে একাধিক রেকর্ডের মাধ্যমে সম্পর্কিত থাকে। উদাহরণস্বরূপ, একটি Student একাধিক Course নিয়ে পড়াশোনা করতে পারে, এবং একটি Course-এ একাধিক Student থাকতে পারে। এই অ্যাসোসিয়েশনটি has_and_belongs_to_many অথবা has_many :through দ্বারা প্রতিনিধিত্ব করা হয়।
উদাহরণ ১: has_and_belongs_to_many
এই অ্যাসোসিয়েশনটি সরাসরি দুটি টেবিলের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়, যেখানে একটি মধ্যবর্তী টেবিলের প্রয়োজন হয় না।
class Student < ApplicationRecord
has_and_belongs_to_many :courses
end
class Course < ApplicationRecord
has_and_belongs_to_many :students
end
এখানে, has_and_belongs_to_many সম্পর্কটি students_courses নামে একটি মধ্যবর্তী টেবিলের মাধ্যমে Student এবং Course টেবিলগুলির মধ্যে Many-to-Many সম্পর্ক তৈরি করে।
উদাহরণ ২: has_many :through
এই অ্যাসোসিয়েশনটি একটি মধ্যবর্তী মডেল তৈরি করে, যেটি সম্পর্কের মধ্যে আরও কিছু অতিরিক্ত বৈশিষ্ট্য রাখতে পারে।
class Student < ApplicationRecord
has_many :enrollments
has_many :courses, through: :enrollments
end
class Course < ApplicationRecord
has_many :enrollments
has_many :students, through: :enrollments
end
class Enrollment < ApplicationRecord
belongs_to :student
belongs_to :course
end
এখানে, Enrollment মডেলটি একটি মধ্যবর্তী মডেল হিসেবে কাজ করছে, যা Student এবং Course এর মধ্যে Many-to-Many সম্পর্ক স্থাপন করছে। Student মডেলটি has_many :courses, through: :enrollments ব্যবহার করে Course মডেলের সাথে সম্পর্কিত হচ্ছে।
Active Record Associations এর সুবিধা
- সহজ ডেটাবেস সম্পর্ক: Active Record অ্যাসোসিয়েশন সম্পর্ক স্থাপন এবং ব্যবহারের প্রক্রিয়াকে সহজ এবং কার্যকরী করে তোলে।
- অটোমেটিক কুয়েরি জেনারেশন: Rails স্বয়ংক্রিয়ভাবে অ্যাসোসিয়েশন সম্পর্কিত কুয়েরি তৈরি করে, যেমন
user.profileবাauthor.books। - পারফরম্যান্স উন্নতি:
includesবাeager_loadএর মতো ফিচার ব্যবহার করে সম্পর্কিত ডেটা একসাথে লোড করা যায়, যা পারফরম্যান্সে সহায়ক। - কাস্টমাইজেশন: আপনি প্রয়োজনে অ্যাসোসিয়েশনগুলির মধ্যে অতিরিক্ত বৈশিষ্ট্য যেমন ফিল্টার, স্কোপ এবং অন্যান্য কাস্টম লজিক যোগ করতে পারেন।
সারমর্ম
Active Record Associations Rails অ্যাপ্লিকেশনের ডেটাবেস টেবিলগুলির মধ্যে সম্পর্ক তৈরি এবং পরিচালনা করার জন্য ব্যবহৃত হয়। এটি One-to-One, One-to-Many, এবং Many-to-Many সম্পর্কের জন্য সহায়ক মেথড প্রদান করে, যেমন has_one, has_many, belongs_to, has_and_belongs_to_many, এবং has_many :through। এই অ্যাসোসিয়েশনগুলো ডেটাবেস টেবিলগুলির মধ্যে সম্পর্ক স্থাপন করে, ডেটা এক্সেস এবং পরিচালনাকে আরও সহজ এবং কার্যকরী করে তোলে।
Read more