5

मैं सिर्फ नेस्टेड सेट मॉडल को कार्यान्वित करने के बारे में सीख रहा हूं लेकिन इसमें अभी भी एक विशेष पहलू के साथ भ्रम है जो कई श्रेणियों का हिस्सा हो सकता है। यह देखते हुए कि नीचे दिए गए उदाहरण HERE से खींच लिया और कई अन्य उदाहरण मैं भर में आ गए हैं दर्पण था ...पदानुक्रमित डेटा - नेस्टेड सेट मॉडल: MySQL

Hierarchical Data: Numbered Tree

Table

आप कैसे जब आप सेब जोड़ने के बाद से वे कर रहे हैं DB में दोहराव से बचने के है बहु रंग (यानी लाल, पीला, हरा)?

उत्तर

5

आप डुप्लीकेट से बचें नहीं हैं और सेब (या सेब का संदर्भ) आपके पेड़ में दो बार रखा जाएगा अन्यथा यह एक पेड़ नहीं बल्कि एक ग्राफ होगा। आपका प्रश्न समान रूप से लागू होता है यदि आप कोई निर्माण करते हैं ... स्विंग जेटी या एचटीएमएल पेड़;)।

नेस्टेड सेट मॉडल एक रिलेशनल डीबी में पेड़ संरचना को धक्का और पार करने का एक प्रभावी तरीका है। यह डेटा संरचना ही नहीं है। यह MySQL उपयोगकर्ताओं के बीच अधिक लोकप्रिय है क्योंकि MySQL पेड़ संरचनाओं को प्रसंस्करण के लिए कार्यक्षमता की कमी है (उदाहरण के लिए ओरेकल प्रदान करता है)।

चीयर्स!

+0

हाँ, मैं एक उत्तर खोज रहा हूं लेकिन इस विषय पर कुछ भी निश्चित नहीं पाया जा सकता है। मैं इस बिंदु पर MySQL का उपयोग कर रहा हूं, तो क्या मैं ऐप्पल के दोहराव के साथ भविष्य में गैर-मुक्त डीबी में परिवर्तित होने वाली समस्याओं में भाग लेगा? या क्या मुझे इस बिंदु पर एकाधिक माता-पिता की अनुमति न देकर इस समस्या को हल करने और हल करना चाहिए और बस नेस्टेड सेट दृष्टिकोण का उपयोग करना चाहिए? या MySQL का उपयोग करने वाले इस मुद्दे से निपटने का कोई और तरीका है? – swisscheese

+0

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

+0

इस समस्या के साथ आपकी मदद के लिए धन्यवाद। यदि आपके पास मौका है और आप इच्छुक हैं तो कृपया http://stackoverflow.com/questions/5395463/data-modeling-modeling-categories-subcategories-in-mysql – swisscheese

3

नेस्टेड सेट मॉडल 1: एन (एक से कई) संबंधों के लिए एक संरचना है, आप एम: एन (कई से कई) संबंधों का उपयोग करना चाहते हैं (कई वस्तुओं में सेब के माता-पिता के रूप में हो सकता है, लेकिन इससे अधिक हो सकता है एक माता - पिता)।

See this article

Wikipedia

लेकिन आप पता होना चाहिए, पदानुक्रमित एम कि: लागू रिश्तों वास्तव में तेजी से काफी जटिल प्राप्त कर सकते हैं!

+0

हां मैं इस अवधारणा को समझता हूं लेकिन इसे नेस्टेड सेट मॉडल पर लागू नहीं करता हूं। तो यह मेरा सवाल है, क्या नेस्टेड सेट मॉडल इसे संभाल सकता है और यदि ऐसा है तो कैसे? – swisscheese

+0

@swisscheese यह किसी भी वास्तव में सरल तरीके से नहीं हो सकता है। शायद आप पेड़ में केवल संदर्भों को सहेजने का प्रयास कर सकते हैं (डेटा को रखने वाली वस्तुओं की एक अलग तालिका को इंगित करने वाली वस्तुओं की आईडी)। लेकिन मुझे नहीं लगता कि नेस्टेड सेट मॉडल वास्तव में इसके लिए उपयुक्त है। –

3

यहां जोर से सोचकर, लेकिन शायद कुछ श्रेणियों (जैसे लाल, पीला और हरा) को 'श्रेणियों' के बजाय 'टैग' के रूप में देखना और उन्हें अलग तर्क के साथ संभालना उपयोगी होगा। इससे आपको नेस्टेड सेट मॉडल रखने और अनावश्यक डुप्लिकेशन से बचने दिया जाएगा। इसके अलावा, यह आपको अपनी श्रेणियों को सरल रखने की अनुमति देगा।

यह जानकारी है कि आप जानकारी के बारे में कैसा सोचते हैं। श्रेणियां गुणों का प्रतिनिधित्व करने का एक और तरीका हैं। मैं समझता हूं कि आपका उदाहरण केवल चित्रकारी उद्देश्यों के लिए था, लेकिन यदि आप रंग से फल को वर्गीकृत करने जा रहे हैं, तो आप मांस को उसी तरह वर्गीकृत क्यों नहीं करेंगे, यानी सफेद मांस और लाल मांस? सबसे अधिक संभावना है कि आप नहीं करेंगे। तो मेरा मुद्दा यह है कि रंग से फल को वर्गीकृत करना शायद आवश्यक नहीं है।

इसके बजाय, कुछ विशेषताओं को अन्य तरीकों से बेहतर ढंग से दर्शाया जाता है। वास्तव में, अपने सबसे सरल रूप में, इसे 'रंग' लेबल वाले 'भोजन' तालिका में एक कॉलम के रूप में रिकॉर्ड किया जा सकता है। या, यदि यह एक बहुत ही आम विशेषता है और आप खुद को मूल्य को महत्वपूर्ण रूप से डुप्लिकेट करते हैं, तो इसे 'रंग' नामक एक अलग तालिका में विभाजित किया जा सकता है और प्रत्येक खाद्य वस्तु को किसी तीसरे तालिका से मैप किया जा सकता है। बेशक, अधिक सार दृष्टिकोण तालिका को 'टैग' के रूप में सामान्यीकृत करना होगा और प्रत्येक रंग को एक व्यक्तिगत टैग के रूप में शामिल करना होगा जिसे तब किसी भी खाद्य पदार्थ में मैप किया जा सकता है। फिर आप किसी भी प्रकार की खाद्य वस्तुओं (रंगों) को किसी भी प्रकार की खाद्य वस्तुओं में मैप कर सकते हैं, जिससे आपको कई सारे रिश्ते मिलते हैं और आपके श्रेणी के पदनामों को और अधिक सामान्यीकृत करने के लिए मुक्त कर सकते हैं।

मुझे पता है कि टैग श्रेणियां या श्रेणियां टैग हैं, आदि के बारे में चल रही बहस चल रही है, लेकिन यह एक उदाहरण है जिसमें वे मानार्थ हो सकते हैं और एक अधिक सार और मजबूत प्रणाली बना सकते हैं जो प्रबंधित करना आसान हो।

+0

पर मेरे प्रश्न पर मेरा अनुसरण करें। सोचा, यकीन नहीं है कि अगर मैंने कुछ संभावित परिणामों को याद किया है लेकिन टैग के रूप में रंगों के बारे में सोचने के लिए थोड़े समझ में आता है। – johnsnails

0

पुराना धागा, लेकिन मुझे इस समस्या का बेहतर उत्तर मिला।

चूंकि सेब के पास अलग-अलग रंग हो सकते हैं, इसलिए आपकी संरचना एक ग्राफ है, न कि पेड़। नेस्टेड सेट मॉडल उस के लिए सही संरचना नहीं है।

चूंकि आप एक टिप्पणी में उल्लेख करते हैं कि आप माइस्क्ल का उपयोग कर रहे हैं, तो एक बेहतर समाधान ओपन क्वेरी ग्राफ इंजन (http://openquery.com/graph/doc) का उपयोग करना है जो एक MySQL प्लगइन है जो आपको एक विशेष तालिका बनाने देता है जहां आप संबंध डालते हैं, मूल रूप से अभिभावक आईडी और बच्चे आईडी। जादू यह है कि आप क्वेरी में पारित मूल्य के आधार पर एक विशेष कॉलम लच के साथ इस तालिका को क्वेरी करते हैं, ओक्यूजीआरजी इंजन को बताएगा जो निष्पादित करने के लिए आदेश देता है। विवरण के लिए दस्तावेज़ देखें।

संबंधित मुद्दे