2011-11-15 12 views
7

मेरे सीएमएस को पुनर्जीवित करते समय, मैं साइटमैप/पेज पदानुक्रम के प्रबंधन के लिए पारंपरिक माता-पिता/बाल दृष्टिकोण का विकल्प चाहता था। मुझे थोड़ी देर पहले नेस्टेड सेट मॉडल को याद किया गया था, लेकिन उसे याद नहीं किया जा सका। इसलिए, मैंने एक समान दृष्टिकोण पर ठोकर खाई कि मैं गुणों का मूल्यांकन और तुलना करना चाहता हूं, यह सुनिश्चित कर रहा हूं कि मैं बाद में गूंगा सीमाओं में नहीं चलेगा क्योंकि मैं पहले से ही समय-परीक्षण के साथ नहीं गया था। तो, कृपया सलाह दें कि ए) इसका पहले से ही आविष्कार किया गया है (इसे क्या कहा जाता है ?!), बी) गुणों में मौलिक त्रुटियां हैं, या सी) यह एक अच्छा दृष्टिकोण है (कृपया अच्छा औचित्य दें!)।मनमाने ढंग से गहराई के पदानुक्रमित डेटा सेट के लिए नेस्टेड सेटों के लिए मेरा अलौकिक: अच्छा या बुरा?

इस सूची पर विचार करें:

  • होम
    • हमारे बारे में
    • हमसे संपर्क करें
    • उत्पाद
      • वस्त्र
      • पुस्तकें
      • इलेक्ट्रॉनिक्स
    • ज्ञानकोष
    • अन्य सामान

नेस्टेड सेट मॉडल के तहत, मेरा मानना ​​है कि आप एक गहराई-प्रथम ट्रेवर्सल साथ प्रत्येक नोड के लिए छोड़ दिया/सही वर्णनकर्ता स्टोर:

Home     1-18 
    About Us   2-3 
    Contact Us  4-5 
    Products   6-13 
     Clothing  7-8 
     Books   9-10 
     Electronics 11-12 
    Knowledge Base 14-15 
    Other stuff  16-17 

और यहां मेरा "गलत तरीका" है कि मैं बेहतर पसंद करना शुरू कर रहा हूं:

Home     1-9 
    About Us   2-2 
    Contact Us  3-3 
    Products   4-7 
     Clothing  5-5 
     Books   6-6 
     Electronics 7-7 
    Knowledge Base 8-8 
    Other stuff  9-9 

बल्कि एक छोड़ दिया/सही जोड़ी की तुलना में, मैं आईडी और LAST_CONTAINED_ID भंडारण कर रहा हूँ। मैंने पाया है कि गुण के कई एक ही (या बहुत समान) हैं:

  • रूट नोड आईडी = 1
  • कि "पत्ते," जबकि शाखाओं के साथ, वे
  • नहीं हैं दोनों गुण, बराबर हैं के लिए
  • किसी भी नोड के लिए "subnodes" की कुल संख्या LAST_CONTAINED_ID है - आईडी
  • सभी निहित नोड्स एक आईडी> कंटेनर की आईडी है, लेकिन < = कंटेनर की LAST_CONTAINED_ID
  • पूर्वज नोड्स एक आईडी < बच्चे ID है , लेकिन एक LAST_CONTAINED_ID> = बाल आईडी भी
  • गहराई आईडी एक आदेश विशेष, अद्वितीय पहचानकर्ता में कार्य करता है, पूर्वज के योग नोड

इसके अलावा है (कोई अंतराल के साथ!)। मुझे सादगी के लिए डेपथ और माता-पिता संदर्भों को स्टोर करना भी आसान लगता है, लेकिन यह जो भी मैं समझता हूं उससे घोंसला वाले सेटों के लिए भी काफी कुछ है।

तो, एक नेस्टेड सेट के रूप में इस गणना करता है? और क्या यह पहले से ही एक आम दृष्टिकोण है (लेकिन मैंने इससे पहले क्यों नहीं सुना था ...)? क्या कोई अच्छा कारण है कि मुझे इस पर एक सही नेस्टेड सेट का उपयोग क्यों करना चाहिए?

मैं आपके विचारों का स्वागत करता हूं।

+0

एफवाईआई, नेस्टेड सेट मॉडल एक तरीका है एक आरडीबीएमएस स्टोर में एक ही टेबल रखने के लिए अज्ञात गहराई के पदानुक्रम के लिए आवश्यक सभी जानकारी (यानी रिकर्सन के बिना एक अनंत सूची): http://en.wikipedia.org/wiki/Nested_set_model#Example – landons

उत्तर

4

इसका एकमात्र लाभ 'नो गैप्स' सुविधा है, लेकिन यह प्राप्त करने के लिए कि आपको दाएं मूल्यों पर लागू तर्क को बदलना पड़ा है। मूल मॉडल में, आपको उन सभी मानों को देखकर 'उत्पाद' के बच्चे मिलते हैं 6 < .. < 13, लेकिन आपके मॉडल में, आप उन बच्चों को मूल्य 4 < देखकर प्राप्त करते हैं .. < = 7. सही- बाएं-मूल्यों के लिए अलग-अलग मान इसे थोड़ा कम सुरुचिपूर्ण बनाता है।
एक और मामूली गड़बड़ी यह है कि मूल में, 12 से 14 तक की कूद से पता चलता है कि आपने स्तर बदल दिया है, जबकि आपके मॉडल में आपको ऐसे दृश्य संकेत नहीं मिलते हैं।
तो यदि आप (<, < =) (<, <) के स्थान पर (<) का उपयोग करके खुश हैं तो यह काम करता है। (चूंकि यह समकक्ष प्रतीत होता है, इसलिए मैं 'अच्छा' या 'बुरा' नहीं कह सकता, लेकिन आपने पहले से कम पथ को लागू करने के खतरों को हाइलाइट किया है।)

+2

मुझे लगता है कि आप सही हैं 12-14 से कूद के बारे में। मेरा मानना ​​है कि यह सच है (सामान्य नेस्टेड सेट में), कि किसी भी नोड 'एन 1' के लिए, यदि कोई नोड है, 'n2',' n1.right + 1' ==' n2.left' के साथ तो 'n2' है अगले भाई (और इसी तरह बाएं जाने के लिए), जो इस नए मॉडल में खो गया है। –

+0

यह वही है जो मैं ढूंढ रहा था! (हालांकि, मैं और अधिक प्रतिक्रिया प्राप्त करने की उम्मीद कर रहा था, लेकिन यह सहायक है।) – landons

+1

मुझे कुछ और गुण मिल गए हैं, जैसे किसी विशेष इंडेक्स पर डालने/हटाने पर मूल्यों को समायोजित करना बहुत सरल है। एक शाखा को हटाने से वास्तव में सभी बच्चों को डिफ़ॉल्ट रूप से स्तर पर ले जाया जाएगा (जो एक पारंपरिक माता-पिता-बच्चे विदेशी कुंजी सेटअप के लिए डेलीट को कैस्केड करने का एक अच्छा विकल्प है)। मुझे लगता है कि अगली सिब्लिंग() सादगी के बिना जी सकते हैं। – landons