एसक्यूएल का उपयोग करके एक रिलेशनल डेटाबेस में ट्री-जैसे डेटा ट्रावर्स करना


16

क्या एसक्यूएल में पेड़ डेटा को पार करने का एक तरीका है? मुझे connect byओरेकल के बारे में पता है , लेकिन क्या अन्य एसक्यूएल कार्यान्वयन में ऐसा करने का एक और तरीका है? मैं पूछ रहा हूं क्योंकि connect byप्रत्येक परिणाम के लिए क्वेरी को चलाने के लिए लूप या पुनरावर्ती फ़ंक्शन लिखने की तुलना में उपयोग करना आसान है।

चूंकि कुछ लोग "ट्री डेटा" वाक्यांश से भ्रमित होने लगते हैं, मैं आगे बताऊंगा: मेरा मतलब है कि उन तालिकाओं के संबंध में जिनके पास एक parent_idसमान क्षेत्र है या जिसमें एक ही पंक्ति में एक अन्य पंक्ति से प्राथमिक कुंजी है।

सवाल एक अनुभव से आता है जहां मैं ओरेकल डेटाबेस में इस तरह संग्रहीत डेटा के साथ काम कर रहा था और जानता था कि connect byअन्य DBMS में लागू नहीं किया गया है। यदि कोई मानक एसक्यूएल का उपयोग करता है, तो प्रत्येक को अपने माता-पिता के लिए एक नया टेबल उपनाम तैयार करना होगा। यह आसानी से हाथ से निकल सकता था।


आपके पास जो सेल्को के समाधान हैं। कुछ नमूने: एसक्यूएल में पेड़ , पेड़ों और Oracle में पदानुक्रम , नेस्टेड सेट मॉडल । सिंटेक्स शुगर होना जरूरी नहीं; ;-)
22

जवाबों:


14

सेल्को की पुस्तक एक अच्छा संसाधन है - यदि समय पर थोड़ा "अकादमिक"।

मैंने वास्तव में इस विधि को भी पाया है , जिसे काफी अच्छी तरह से काम करने के लिए 'क्लोजर टेबल' के रूप में जाना जाता है।

यदि आप एक ऐसे डेटाबेस का उपयोग कर रहे हैं जो पुनरावर्ती CTE (जैसे PostgreSQL 8.4 या नया या SQL Server 2005 या नया ) की अनुमति देता है, तो वे वास्तव में जाने का सबसे अच्छा तरीका है। यदि आप ओरेकल पर हैं, तो हमेशा "कनेक्ट द्वारा" आदरणीय है ।

यह मेरा अनुभव है कि "भोले पेड़" स्कीमा में तालिकाओं का एक सेट सौंपना कहीं अधिक सामान्य है, और यह पता लगाना है कि उस भंडारण से सही पेड़ को कैसे निकालना है, क्योंकि इसमें क्लीनर बनाने का अवसर है "क्लोजर टेबल" संरचना।


9

एक पुनरावर्ती CTE आपका सबसे आसान समाधान होने जा रहा है। SQL Server 2005 और PostgreSQL के वर्तमान संस्करण CTE का समर्थन करते हैं। यदि आप SQL Server 2008 या नए का उपयोग कर रहे हैं, तो आप HIERARCHYIDडेटा प्रकार का उपयोग कर सकते हैं । आप इसका एक अच्छा उदाहरण HierarchyID पर पा सकते हैं : SQL Server 2008 के साथ अपने डेटा पदानुक्रम को मॉडल करें

अतिरिक्त संसाधन:


5

SQL सर्वर (2005 और बाद के संस्करणों) में आप पदानुक्रम पढ़ने के लिए सामान्य तालिका अभिव्यक्तियों का उपयोग कर सकते हैं, Microsoft SQL Server 2005 - CTE उदाहरणों के एक जोड़े के लिए एक साधारण पदानुक्रम का उदाहरण देखें।

मुझे इस विषय पर एक किताब की सिफारिश की गई है जो आमतौर पर "सेलेरीज़ के लिए पेड़ और पदानुक्रम में एसक्यूएल फॉर स्मार्टीज़" है - जो सेल्को द्वारा - हालांकि मैंने वास्तव में अभी तक पुस्तक को खुद नहीं देखा है।


1

मानक SQL विधि एक "पुनरावर्ती क्वेरी" है जो पुनरावर्ती CTE द्वारा प्रदान की जाती है और WITH [ RECURSIVE ]क्वेरी में निर्दिष्ट होती है । कार्यान्वयन कल्पना में निर्दिष्ट नहीं है, केवल उन विधियों को उपलब्ध कराया गया है जो पुनरावर्ती हैं। डेटा संरचना के सबसे सरल मामले के कार्यान्वयन में केवल एक पंक्ति पर एक आईडी और पैरेंट आईडी की आवश्यकता होती है।

कई आरडीबीएमएस-विशिष्ट समाधान भी हैं: उदाहरण के लिए, PostgreSQL रिकर्सिव सीटीई का समर्थन करता है, लेकिन यह भी प्रदान करता है ltreeजो कार्यान्वयन में फायदे और नुकसान का एक अलग सेट प्रदान करता है।

आप इस साइट पर अधिक जानकारी टैग के माध्यम से खोज सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.