नेस्टेड सेट डिज़ाइन निश्चित रूप से कठिन होता है जब आपको पेड़ को लगातार अपडेट करने की आवश्यकता होती है। अंत में आपको पेड़ के बड़े हिस्से का नंबर बदलना पड़ता है।
इसे कम करने के लिए एक सुझाव पूर्णांकों के बजाय फ्लोटिंग-पॉइंट नंबरों का उपयोग करना है। यदि आप ट्री में एक नया नोड सम्मिलित करते हैं, तो नए नोड के पैरेंट के नेस्टेड सेट नंबरों के बीच कुछ FLOAT संख्याओं को खोजना अपेक्षाकृत आसान है। आप अंततः फ़्लोटिंग-पॉइंट संख्या की सटीकता की सीमा तक पहुँच सकते हैं, लेकिन चूंकि आपका पेड़ बहुत गहरा नहीं है, इसलिए ऐसा लंबे समय तक नहीं होगा।
एक और तकनीक जिसके बारे में मैंने लिखा है, मैं उसे क्लोजर टेबल . कहता हूं . पदानुक्रमों को संग्रहीत करने की यह विधि आपके बहुत से पेड़ को अद्यतन करने की आवश्यकता के बिना बड़े पेड़ में नोड्स डालने/अपडेट/हटाने में बहुत आसान बनाती है। और आप अभी भी एक गैर-पुनरावर्ती SQL क्वेरी में पूरे पेड़ या किसी भी उपट्री को क्वेरी कर सकते हैं।
क्लोजर टेबल के बारे में अधिक पढ़ने के लिए, देखें:
- एक फ्लैट टेबल को ट्री में पार्स करने का सबसे कुशल/सुरुचिपूर्ण तरीका क्या है?
- एसक्यूएल और पीएचपी के साथ पदानुक्रमित डेटा के लिए मॉडल
- सबट्री को क्लोजर टेबल पदानुक्रम में ले जानाए>
- SQL Antipatterns:डेटाबेस प्रोग्रामिंग के नुकसान से बचना
अपनी टिप्पणी दें:
आसन्नता सूची सरल है, इसमें न्यूनतम अतिरेक है, और यह एफके संबंधों का समर्थन करता है, जो नेस्टेड सेट नहीं करता है। यदि आप पुनरावर्ती क्वेरी का उपयोग करते हैं, तो Adjacency List मनमानी गहराई के पूरे पेड़ को क्वेरी करने का समर्थन करती है . लेकिन MySQL पुनरावर्ती प्रश्नों का समर्थन नहीं करता है।
यदि आपको केवल तत्काल माता-पिता-बाल संबंधों (यानी गहराई का एक स्तर) से पूछताछ करने की आवश्यकता है, या अन्यथा केवल निश्चित गहराई के पेड़ पूछें, तो आसन्न सूची ठीक है।