पायथन में डेटा के पारिवारिक संबंध

मान लीजिए कि हमारे सामने पिता और बेटों को संग्रहीत करने का कार्य है। मान लीजिए कि प्रत्येक पिता के पास केवल एक बेटा हो सकता है, और बेटा बदले में एक बेटा भी रख सकता है।

हमें यह सोचने की जरूरत है कि हम डेटा कैसे संग्रहीत करेंगे। पहला विचार, जो दिमाग में आ सकता है - दो तालिकाएँ बनाना: 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

अब उपयोगकर्ताओं में उनके बेटों को जोड़ते हैं। हम तालिका को स्वयं से जोड़ेंगे, इसलिए हमें इसका पुनः नामकरण करने की आवश्यकता है:

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

एक क्वेरी लिखें, जो श्रेणी को उसके मूल, दादा-दादी और परदादा-परदादी के साथ प्राप्त करेगी।