ডেটাবেস টেবিল সম্পর্ক (Database Relationship Tutorial) পার্ট – ০৪

রিলেশনাল ডেটাবেস তৈরীর সময় টেবিলগুলির মধ্যে সম্পর্ক জুড়ে দেয়া যায়।এভাবে একটা টেবিলের সাথে আরেকটা টেবিলের সম্পর্ক করে দিলে কি লাভ হয় তা প্রথম টিউটোরিয়ালে আলোচনা হয়েছে।যাই হোক রিলেশন (Relation) চার ধরনের আছে

১.এক – এক বা ওয়ান টু ওয়ান (One to One Relation)
২. এক – একাধিক বা ওয়ান টু ম্যানি (One to Many Relation)
৩. একাধিক – এক বা ম্যানি টু ওয়ান (Many to One)
৪. একাধিক – একাধিক বা ম্যানি টু ম্যানি (Many to Many)

one-to-one Relation (এভাবেও প্রকাশ করা হয় 1:1): ধরুন আপনি একটি এপ্লিকেশন তৈরী করছেন যেখানে ইউজার থাকবে।”users” নামে একটা টেবিল বানিয়ে কিছু ফিল্ড রাখলেন এরপর এপ্লিকেশন দিন দিন বড় করতে থাকলেন।একসময় “users” টেবিলে এত ফিল্ড হয়ে যাবে যে পরে ম্যানেজ করা কঠিন হয়ে পড়বে।সহজ সমাধান হল “profiles” নামে একটা টেবিল বানিয়ে এখানে বাড়তি যেকোন ফিল্ড যোগ করে নিতে পারেন,শুধু “users” টেবিলে সাথে One to one সম্পর্ক জুড়ে দিলেই হয়ে গেল।এখানে লজিকটা হচ্ছে প্রতিটি ইউজারের একটার বেশি প্রোফাইল থাকা সম্ভব নয়।তাই “users” টেবিলের একটা সারির (row) জন্য “profiles” টেবিলে ঐ সারি সংশ্লিষ্ট একটা সারিই থাকা সম্ভব।

একটা টেবিলে (users টেবিলে) ধরুন ১০০ টি সারি (row) আছে তাহলে এই টেবিলের সাথে যে টেবিলটির (profiles টেবিল) one-to-one রিলেশন (রিলেশন টি হবে প্রাইমারি এবং ফরেন কি দিয়ে) আছে সেখানেও ১০০ টি সারি থাকবে, প্রতিটির জন্য একটা।

“users” টেবিল

* এখানে id  হচ্ছে এই টেবিলের প্রাইমারি কি।

“profiles” টেবিল


* এখানে user_id হচ্ছে এই টেবিলের ফরেন কি।এই key দিয়ে রিলেশন “users” টেবিলের সাথে রিলেশন করা হয়েছে।আরও সহজভাবে বলি, এই টেবিলের 1 নম্বর সারিটি “users” টেবিলের ১ নম্বর সারির অবশিষ্টাংশ বলতে পারেন।

one-to-many : একটা টেবিলের (প্যারেন্ট টেবিল) একটা সারির বিপরীতে যদি আরেকটি টেবিলের একাধিক সারি থাকে তাহলে দুটি টেবিলের এরুপ সম্পর্ককে one-to-many রিলেশনশিপ বলে।ধরুন “articles” নামে একটা টেবিল আছে।একজন ইউজার একাধিক আর্টিকেল লিখতেই পারে বা থাকতেই পারে।তাই “users” এবং “articles” টেবিলের মধ্যে one-to-many রিলেশন করে দেয়া যাবে।

“articles” টেবিল

এখানে “author” কলাম দিয়ে “users” টেবিলের সম্পর্ক করা হয়েছে।দেখুন এই টেবিলে ১ নম্বর ইউজারের জন্য (users টেবিলের ১ নম্বর সারির জন্য) ২টি সারি আছে বা এরচেয়েও বেশি থাকতে পারে।এরুপ  “users” টেবিলের ২ নম্বর ইউজারের জন্য একাধিক সারি এখানে (articles টেবিলে) থাকতে পারে।

এই পরিস্তিতি টাই বিপরীত দিকে থেকে কল্পনা করলে many-to-one রিলেশনশিপ হয়ে গেল অর্থ্যাৎ একটা টেবিলের একাধিক সারির জন্য আরেকটা টেবিলে একটা সারি থাকবে।

many-to-many রিলেশনশিপ:

এই রিলেশনশিপে একটা টেবিলের একটা সারির সাথে অপর টেবিলটির একাধিক সারির সাথে সংযুক্ত থাকবে, ঠিক একইভাবে অপর টেবিলেটিরও একটা সারির সাথে প্রথম টেবিলটির একাধিক সারির সাথে যুক্ত থাকবে।যেমন একটা আর্টিকেল অনেকগুলি ক্যাটাগরিতে থাকতে পারে আবার একটা ক্যাটাগরিতে অনেকগুলি আর্টিকেলে থাকতে পারে।

উদাহরনস্বরুপ আপনি একটা টুইটার বুটস্ট্রাপের আর্টিকেল লিখলেন (twitter bootsrap একটা সিএসএস ফ্রেমওয়ার্ক এটা দিয়ে responsive ডিজাইন করা যায় ফলে মোবাইল থেকে শুরু করে কম্পিউটার পর্যন্ত সব ডিভাইসে সাইট কম্পিটাবল দেখায়)।ধরুন এই আর্টিকেলটি রাখলেন “CSS”, “Web Design” ইত্যাদি ক্যাটাগরিতে। আবার “Web Design”  ক্যাটাগরিতে বুটস্ট্রাপ এর আর্টিকেল তো আছেই, এইচটিএমএল এরও একটা আর্টিকেল থাকতে পারে।

এই রিলেশনশিপ এর জন্য ৩টি টেবিল বানানো হয়, তৃতীয় টেবিলটিতে মাত্র দুটি কলাম থাকে এবং এদের মধ্যে one-to-one রিলেশনশিপ থাকে।আর কলামদুটি মিলে প্রাইমারি কি বানিয়ে দেয়া হয়।

** ৩য় টেবিলটিকে ক্রস রেফারেন্স টেবিল বা লিংকিং টেবিলও বলা হয়।

** আগে যে “articles” টেবিল দিয়ে কিছু কাজ করে দেখালাম সেটার সাথে নিচের টেবিলেটিরও নাম এক হওয়াতে বিভ্রান্ত হবেননা। দুটো আলাদা টেবিল।

“articles” টেবিল


“categories” টেবিল


“article_category” টেবিল (linking টেবিল)


“article_id” আর “category_id” মিলে লিংকিং টেবিলে তারা প্রাইমারি কি, যেহেতু প্রাইমারি কি হওয়ার একটা শর্ত হচ্ছে তারা ইউনিক হবে তাই উপরে দেখুন প্রথম যে কমবিনেশন (১, ২) এটা পরের কোন সারিতে আর মিলেনি। কোন সারিই এই টেবিলে অন্য কোন সারির সাথে মিলবেনা।এই প্রাইমারি কি composite প্রাইমারি কি নামেও পরিচিত।

এই ক্রস রেফারেন্স টেবিলেটি দ্বারাই many-to-many রিলেশনশিপ বোঝা যাচ্ছে। ১ নম্বর আর্টিকেলটি (“articles” টেবিলের HTML tutorials ) ২ এবং ৩ নম্বর ক্যাটাগরিতে (“categories” টেবিলের ২ এবং ২ নম্বর ক্যাটাগুরি হচ্ছে HTML এবং Web Design) আছে। আবার ৩ নম্বর ক্যাটাগরিতে ১ এবং ২ নম্বর দুটো আর্টিকেলই আছে।

** অ্যারো চিহ্ন দিয়ে টেবিলগুলির সারিতে সম্পর্ক দেখিয়ে ছবি দেয়া হয়নি, ফটোশপে এগুলি করতে হবে অনেক ঝামেলা তাই ছবির বদলে বিস্তারিত লিখে দিলাম, তবু যদি ছবিই দেখতে চান তাহলে কিওয়ার্ডগুলি লিখে গুগলে একটা টিপ দিয়েন।

Leave a Reply