SQL में काम करने के लिए पदानुक्रमित जानकारी को आसान बनाने के लिए कई विकल्प हैं:
-
सामान्य तालिका अभिव्यक्तियां (SQL-2003 मानक के अनुसार) आपके द्वारा उपयोग किए जा रहे डेटा के पैरेंट-आईडी प्रकार के विरुद्ध पुनरावर्ती SQL क्वेरी का समर्थन करता है। अब तक, MySQL इस सुविधा का समर्थन नहीं करता है। PostgreSQL 8.4, Microsoft SQL Server और IBM DB2 RDBMS ब्रांड के उदाहरण हैं जो CTE सिंटैक्स का समर्थन करते हैं। Oracle के पास SQL सिंटैक्स का मालिकाना विस्तार भी है जो पुनरावर्ती प्रश्नों का समर्थन करता है।
-
नेस्टेड सेट (बाएं/दाएं समाधान जिसका @phantombrain उल्लेख करता है) जो सेल्को की पुस्तक "ट्रीज़ एंड हायरार्कीज़ इन एसक्यूएल फॉर स्मार्टीज़" और इंटरनेट पर कई लेखों और ब्लॉग पोस्टिंग में विस्तृत समाधान है।
-
पथ गणना (उर्फ मटेरियलाइज्ड पाथ) उस पंक्ति के पूर्वजों के पथ को नोट करने के लिए पदानुक्रम में प्रत्येक पंक्ति में एक स्ट्रिंग संग्रहीत करता है। इसे
LIKE
. के साथ मिलाएं अपने पूर्वजों के पथों और वंशजों के पथों के पथ स्ट्रिंग की तुलना करने के लिए क्वेरी। -
क्लोजर टेबल (उर्फ ट्रांजिटिव क्लोजर रिलेशन) सभी पूर्वजों-वंशज संबंधों को संग्रहीत करने के लिए दूसरी तालिका का उपयोग करता है, न कि केवल आपके द्वारा उपयोग किए जा रहे डिज़ाइन में तत्काल माता-पिता। एक बार जब आप सभी पथ संगृहीत कर लेते हैं तो कई प्रकार की क्वेरी आसान हो जाती हैं।
-
हाइब्रिड समाधान भी मौजूद हैं। उदाहरण के लिए, तत्काल पैरेंट आईडी को स्टोर करें जैसा आप कर रहे हैं, लेकिन पेड़ की जड़ भी। अब आप अन्य सभी पंक्तियों को समान पदानुक्रम में प्राप्त कर सकते हैं, उन्हें एप्लिकेशन कोड में ला सकते हैं, और पारंपरिक डेटा संरचनाओं के साथ ट्री को सॉर्ट कर सकते हैं।