আমি এই প্রশ্নের উত্তরটি স্ব-রেফারেন্সিং অ্যাসোসিয়েশন দৃষ্টিকোণ থেকে দিতে চাই, কেবলমাত্র হ্যাস_মানি নয়: দৃষ্টিকোণের মাধ্যমে।
ধরা যাক আমাদের পরিচিতিগুলির সাথে একটি সিআরএম রয়েছে। পরিচিতিগুলির অন্য পরিচিতির সাথে সম্পর্ক থাকবে তবে দুটি ভিন্ন মডেলের মধ্যে সম্পর্ক তৈরি করার পরিবর্তে আমরা একই মডেলের দুটি উদাহরণের মধ্যে একটি সম্পর্ক তৈরি করব। একটি পরিচিতিতে অনেক বন্ধু থাকতে পারে এবং অন্য অনেক পরিচিতির সাথে বন্ধুত্ব হতে পারে যাতে আমাদের অনেক বেশি সংখ্যক সম্পর্ক তৈরি করতে হয়।
আমরা যদি কোনও আরডিবিএমএস এবং অ্যাক্টিভেকর্ড ব্যবহার করি তবে আমরা has_many: মাধ্যমে ব্যবহার করব। এভাবে আমাদের বন্ধুত্বের মতো একটি জয়েন মডেল তৈরি করা দরকার। এই মডেলটির দুটি ক্ষেত্র থাকবে, একটি পরিচিতি_আইড যা বর্তমান পরিচিতিকে প্রতিনিধিত্ব করে যিনি বন্ধু যুক্ত করছেন এবং বন্ধু_আইড যা ব্যবহারকারীর সাথে বন্ধুত্বের প্রতিনিধিত্ব করছে represents
তবে আমরা মঙ্গোডিবি এবং মঙ্গয়েড ব্যবহার করছি। উপরে উল্লিখিত হিসাবে, মঙ্গয়েডের হাতে_মানি নেই: মাধ্যমে বা সমতুল্য বৈশিষ্ট্য। এটি মঙ্গোডিবি-তে এতটা কার্যকর হবে না কারণ এটি যোগদানের প্রশ্নগুলিকে সমর্থন করে না। অতএব, মোংগোডিবি-এর মতো অ আরডিবিএমএস ডাটাবেসে অনেকগুলি সম্পর্ককে মডেল করতে আপনি উভয় পক্ষের 'বিদেশী' কীগুলির একটি অ্যারে যুক্ত ক্ষেত্র ব্যবহার করেন।
class Contact
include Mongoid::Document
has_and_belongs_to_many :practices
end
class Practice
include Mongoid::Document
has_and_belongs_to_many :contacts
end
নথি হিসাবে বলা হয়েছে:
অনেকগুলি সম্পর্কের ক্ষেত্রে যেখানে বেস ডকুমেন্ট থেকে বিপরীতমুখী দলিলগুলি পৃথক সংগ্রহে সংরক্ষণ করা হয় মঙ্গয়েডের has_and_belongs_to_many ম্যাক্রো ব্যবহার করে সংজ্ঞায়িত করা হয়। এটি অ্যাক্টিভ রেকর্ডের সাথে একই রকম আচরণ প্রদর্শন করে এই ব্যতিক্রমটি সহ যে কোনও যোগদানের সংগ্রহের প্রয়োজন নেই, বিদেশী কী আইডিগুলি সম্পর্কের উভয় দিকে অ্যারে হিসাবে সংরক্ষণ করা হয়।
এই প্রকৃতির কোনও সম্পর্ককে সংজ্ঞায়িত করার সময়, প্রতিটি নথি তার নিজ নিজ সংগ্রহে সংরক্ষণ করা হয় এবং প্রতিটি নথিতে অ্যারের আকারে অন্যটির সাথে একটি "বিদেশী কী" উল্লেখ রয়েছে।
# the contact document
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
"practice_ids" : [ ObjectId("4d3ed089fb60ab534684b7f2") ]
}
# the practice document
{
"_id" : ObjectId("4d3ed089fb60ab534684b7e9"),
"contact_ids" : [ ObjectId("4d3ed089fb60ab534684b7f2") ]
}
মঙ্গোডিবিতে এখন একটি স্ব-রেফারেন্সিং অ্যাসোসিয়েশনের জন্য আপনার কাছে কয়েকটি বিকল্প রয়েছে।
has_many :related_contacts, :class_name => 'Contact', :inverse_of => :parent_contact
belongs_to :parent_contact, :class_name => 'Contact', :inverse_of => :related_contacts
সম্পর্কিত পরিচিতি এবং পরিচিতিগুলির অনেকের মধ্যে থাকা এবং অনেকগুলি অনুশীলনের সাথে সম্পর্কিত এর মধ্যে পার্থক্য কী? বিশাল পার্থক্য! একটি দুটি সত্তার মধ্যে একটি সম্পর্ক। অন্যটি একটি স্ব-রেফারেন্স।