अच्छा ओवरव्यू
सामान्यतया, आप तेजी से पढ़े जाने वाले समय (उदाहरण के लिए, नेस्टेड सेट) या तेजी से लिखने के समय (आसन्न सूची) के बीच निर्णय ले रहे हैं। आमतौर पर, आप नीचे दिए गए विकल्पों के संयोजन के साथ समाप्त होते हैं जो आपकी आवश्यकताओं के लिए सबसे उपयुक्त हैं। निम्नलिखित कुछ गहराई से पढ़ने को प्रदान करता है:
- एक और नेस्टेड अंतराल बनाम एडजेंसी लिस्ट तुलना : एडजस्टेंसी लिस्ट, मटीरियललाइज्ड पाथ, नेस्टेड सेट और नेस्टेड इंटरवल की सबसे अच्छी तुलना मैंने पाया है।
- पदानुक्रमित डेटा के लिए मॉडल : ट्रेडऑफ़ के अच्छे स्पष्टीकरण और उदाहरण के उपयोग के साथ स्लाइड
- MySQL में पदानुक्रम का प्रतिनिधित्व करना : विशेष रूप से नेस्टेड सेट का बहुत अच्छा अवलोकन
- RDBMS में पदानुक्रमित डेटा : मेरे द्वारा देखे गए लिंक के सबसे व्यापक और सुव्यवस्थित सेट, लेकिन स्पष्टीकरण के तरीके में बहुत ज्यादा नहीं
विकल्प
मैं और सामान्य सुविधाओं से अवगत हूँ:
- आसन्न सूची :
- कॉलम: आईडी, पेरेंटआईडी
- लागू करने में आसान।
- सस्ता नोड चाल, आवेषण और हटाता है।
- स्तर, वंश और वंश को खोजने के लिए महंगा
- डेटाबेस में कॉमन टेबल एक्सप्रेशंस के माध्यम से एन + 1 से बचें जो उनका समर्थन करते हैं
- नेस्टेड सेट (उर्फ संशोधित Preorder ट्री ट्रैवर्सल )
- कॉलम: वाम, अधिकार
- सस्ता वंश, वंशज
- बहुत महंगी
O(n/2)
चालें, आवेषण, अस्थिर एन्कोडिंग के कारण हटाते हैं
- ब्रिज टेबल (उर्फ क्लोजर टेबल / डब्ल्यू ट्रिगर )
- पूर्वज, वंशज, गहराई (वैकल्पिक) के साथ अलग ज्वाइन टेबल का उपयोग करता है
- सस्ता वंश और वंश
O(log n)
सम्मिलित करने, अद्यतन करने, हटाने के लिए लागत (सबट्री का आकार) लिखता है- सामान्यीकृत एन्कोडिंग: RDBMS आँकड़ों और क्वेरी प्लानर के लिए अच्छा है
- प्रति नोड कई पंक्तियों की आवश्यकता होती है
- वंश स्तंभ (उर्फ भौतिक पथ , पथ गणना)
- कॉलम: वंश (जैसे / माता-पिता / बच्चे / पोते / आदि ...)
- उपसर्ग क्वेरी के माध्यम से सस्ते वंशज (जैसे
LEFT(lineage, #) = '/enumerated/path'
) O(log n)
सम्मिलित करने, अद्यतन करने, हटाने के लिए लागत (सबट्री का आकार) लिखता है- गैर-संबंधपरक: ऐरे डेटैटाइप या धारावाहिक रूप से स्ट्रिंग प्रारूप पर निर्भर करता है
- नेस्टेड अंतराल
- नेस्टेड सेट की तरह, लेकिन वास्तविक / फ्लोट / दशमलव के साथ ताकि एन्कोडिंग अस्थिर नहीं हो (सस्ती चाल / डालें / हटाएं)
- वास्तविक / फ्लोट / दशमलव प्रतिनिधित्व / सटीक मुद्दे हैं
- मैट्रिक्स एन्कोडिंग संस्करण "फ्री" के लिए पूर्वज एन्कोडिंग (भौतिक पथ) जोड़ता है, लेकिन रैखिक बीजगणित की अतिरिक्त चाल के साथ।
- फ्लैट टेबल
- एक संशोधित आसन्न सूची जो प्रत्येक रिकॉर्ड में एक स्तर और रैंक (जैसे आदेश) कॉलम जोड़ती है।
- इटरेट / पैगिनेट पर सस्ता
- महंगी चाल और हटाना
- अच्छा उपयोग: थ्रेडेड चर्चा - मंचों / ब्लॉग टिप्पणी
- एकाधिक वंश स्तंभ
- कॉलम: प्रत्येक वंश स्तर के लिए एक, सभी माता-पिता को रूट तक संदर्भित करता है, आइटम के स्तर से नीचे स्तर पूर्ण सेट किए जाते हैं
- सस्ते पूर्वज, वंशज, स्तर
- सस्ता डालने, हटाने, पत्तियों की चाल
- आंतरिक नोड्स की महंगी डालने, हटाने, चाल
- पदानुक्रम कितना गहरा हो सकता है, इसकी कठोर सीमा
डेटाबेस विशिष्ट नोट्स
माई एसक्यूएल
आकाशवाणी
- आसन्न सूचियों को पार करने के लिए कनेक्ट बाय का उपयोग करें
PostgreSQL
- सामग्री पथ के लिए ltree डेटाटाइप
एस क्यू एल सर्वर
- सामान्य सारांश
- 2008 ऑफर करता है कि HierarchyId डेटा टाइप वंशावली दृष्टिकोण के साथ मदद करता है और उस गहराई का विस्तार करता है जिसका प्रतिनिधित्व किया जा सकता है।
Closure Tables
से बेहतर हैंAdjacency List
,Path Enumeration
औरNested Sets
उपयोग में आसानी के मामले में (और मैं अच्छी तरह से प्रदर्शन अनुमान लगा रहा हूँ)।