পাইথনে ডেটার আত্মীয়তার সম্পর্ক

ধরুন আমাদের সামনে বাবা এবং ছেলেদের সংরক্ষণের কাজ রয়েছে। ধরুন প্রতিটি বাবার শুধুমাত্র একটি ছেলে থাকতে পারে, এবং ছেলে আবার এরও একটি ছেলে থাকতে পারে।

আমরা কীভাবে ডেটা সংরক্ষণ করব তা ভাবতে হবে। প্রথম ধারণা যা মাথায় আসতে পারে তা হলো দুটি টেবিল তৈরি করা: parents বাবাদের জন্য এবং sons ছেলেদের জন্য। তারপর এই টেবিলগুলোকে কোনও ফিল্ড দিয়ে সংযুক্ত করা: son_id বা parent_id।

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

আরও ভাল বিকল্প হলো টেবিলটিকে নিজের সাথে সংযুক্ত করা: আসুন একটি users টেবিল তৈরি করি, এতে সমস্ত ব্যবহারকারী সংরক্ষণ করব এবং প্রত্যেকের জন্য একটি son_id ফিল্ড তৈরি করব, যাতে সংরক্ষিত থাকবে এই একই টেবিল থেকে ছেলের id:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

কোয়েরি

এখন আসুন একটি কোয়েরি লিখি যা ব্যবহারকারীকে তার ছেলেসহ বের করবে।

প্রথমে আসুন শুধু ব্যবহারকারীদের বের করি:

sqlSELECT
  *
FROM
  users

এখন ব্যবহারকারীদের সাথে তাদের ছেলেদ JOIN করি। আমরা টেবিলটিকে নিজের সাথে JOIN করব, তাই আমাদের এর নাম পরিবর্তন করতে হবে:

sqlLEFT JOIN users as sons

এখন আমরা মূল টেবিল এবং নাম পরিবর্তন করা টেবিলের মধ্যে সম্পর্ক নির্দিষ্ট করতে পারি:

sqlLEFT JOIN users as sons ON sons.id=users.son_id

এখন ফিল্ডগুলো নির্দিষ্ট করি:

sqlSELECT
  users.name as user_name, sons.name as son_name

এখন সব একত্রিত করি এবং নিম্নলিখিত কোয়েরি পাই:

sqlSELECT
  users.name as user_name, sons.name as son_name
FROM
  users
LEFT JOIN users as sons ON sons.id=users.son_id

ব্যবহারিক সমস্যা

Задание 1

ধরুন আমাদের কাছে বিভাগ রয়েছে। প্রতিটি বিভাগ একটি মূল বিভাগের অন্তর্ভুক্ত হতে পারে, সেটি আবার তার মূল বিভাগের অন্তর্ভুক্ত হতে পারে এবং এভাবে চলতে থাকে। সংরক্ষণের গঠনটি লিখে দিন।

Задание 2

একটি কোয়েরি লিখুন যা বিভাগটিকে এর মূল বিভাগসহ বের করবে।

Задание 3

একটি কোয়েরি লিখুন যা বিভাগটিকে এর মূল এবং মূলের মূল বিভাগসহ বের করবে।

Задание 4

একটি কোয়েরি লিখুন যা বিভাগটিকে এর মূল, মূলের মূল এবং মূলের মূলের মূল বিভাগসহ বের করবে।