पायथन में डेटा के पारिवारिक संबंध
मान लीजिए कि हमारे सामने पिता और बेटों को संग्रहीत करने का कार्य है। मान लीजिए कि प्रत्येक पिता के पास केवल एक बेटा हो सकता है, और बेटा बदले में एक बेटा भी रख सकता है।
हमें यह सोचने की जरूरत है कि हम डेटा कैसे संग्रहीत करेंगे।
पहला विचार, जो दिमाग में आ सकता है - दो तालिकाएँ बनाना: parents
पिताओं के लिए और sons बेटों के लिए। फिर
इन तालिकाओं को किसी फ़ील्ड से जोड़ें:
son_id या parent_id।
हालाँकि, यह विचार बहुत अच्छा नहीं है - क्योंकि एक ही व्यक्ति एक साथ पिता और बेटा दोनों हो सकता है - और उसे दोनों तालिकाओं में संग्रहीत करना होगा, और यह असुविधाजनक है, अधिक जगह लेता है और आसानी से त्रुटियों की ओर ले जाता है।
एक बेहतर विकल्प - तालिका को स्वयं से जोड़ना है:
हम एक users तालिका बनाएंगे,
इसमें सभी उपयोगकर्ताओं को संग्रहीत करेंगे और प्रत्येक
के लिए एक son_id फ़ील्ड बनाएंगे, जिसमें
इसी तालिका से बेटे का id संग्रहीत रहेगा:
| id | name | son_id |
|---|---|---|
| 1 | user1 | 2 |
| 2 | user2 | 3 |
| 3 | user3 | null |
क्वेरीज़
आइए अब एक क्वेरी लिखें, जो उपयोगकर्ता को उसके बेटे के साथ प्राप्त करेगी।
शुरुआत के लिए आइए बस उपयोगकर्ताओं को प्राप्त करें:
SELECT
*
FROM
users
अब उपयोगकर्ताओं में उनके बेटों को जोड़ते हैं। हम तालिका को स्वयं से जोड़ेंगे, इसलिए हमें इसका पुनः नामकरण करने की आवश्यकता है:
LEFT JOIN users as sons
अब हम मुख्य तालिका और पुनः नामित तालिका के बीच संबंध निर्दिष्ट कर सकते हैं:
LEFT JOIN users as sons ON sons.id=users.son_id
अब फ़ील्ड्स निर्दिष्ट करते हैं:
SELECT
users.name as user_name, sons.name as son_name
अब सब कुछ एक साथ रखते हैं और निम्नलिखित क्वेरी प्राप्त करते हैं:
SELECT
users.name as user_name, sons.name as son_name
FROM
users
LEFT JOIN users as sons ON sons.id=users.son_id
व्यावहारिक कार्य
मान लीजिए कि हमारे पास श्रेणियाँ हैं। प्रत्येक श्रेणी एक मूल श्रेणी से संबंधित हो सकती है, और वह बदले में अपनी मूल श्रेणी से संबंधित हो सकती है और इसी तरह आगे भी। भंडारण संरचना का विवरण लिखें।
एक क्वेरी लिखें, जो श्रेणी को उसकी मूल श्रेणी के साथ प्राप्त करेगी।
एक क्वेरी लिखें, जो श्रेणी को उसके मूल और दादा-दादी के साथ प्राप्त करेगी।
एक क्वेरी लिखें, जो श्रेणी को उसके मूल, दादा-दादी और परदादा-परदादी के साथ प्राप्त करेगी।