आप एक ईएवी डिज़ाइन का उपयोग कर रहे हैं, और विशेषताओं की एक चर संख्या से एक पंक्ति को फिर से बनाने का प्रयास कर रहे हैं। यह ईएवी डिज़ाइन का उपयोग करके आपके सामने आने वाली कई लैंडमाइंस में से एक को इंगित करता है:एक एकल SQL क्वेरी में आप जितने जोड़ सकते हैं, उस पर एक व्यावहारिक सीमा है।
विशेष रूप से MySQL में - जैसा कि आपने पाया है, एक कठिन सीमा है। लेकिन अन्य RDBMS ब्रांडों में भी, एक प्रभावी सीमा होती है क्योंकि तालिकाओं की संख्या के संबंध में जुड़ने की लागत ज्यामितीय होती है।
यदि आप EAV का उपयोग करते हैं, तो SQL में एक पंक्ति को फिर से बनाने का प्रयास न करें जैसे कि आपके पास एक पारंपरिक डेटाबेस डिज़ाइन था। इसके बजाय, निकाय आईडी के आधार पर छांटे गए गुणों को पंक्तियों के रूप में प्राप्त करें। फिर उन्हें अपने आवेदन कोड में पोस्ट-प्रोसेस करें। इसका मतलब यह है कि आप डेटा को एक चरण में डंप नहीं कर सकते -- आपको विशेषता पंक्तियों पर लूप करने के लिए कोड लिखना होगा, और डेटा की प्रत्येक पंक्ति को आउटपुट करने से पहले उसे सुधारना होगा।
EAV एक सुविधाजनक डेटाबेस डिज़ाइन नहीं है। इसका उपयोग करने में कई महंगी कमियां हैं, और आपने उनमें से केवल एक को मारा है।
देखें http://www.simple-talk.com/opinion /राय-टुकड़े/बुरा कर्म/ ईएवी के उपयोग ने एक व्यवसाय को कैसे बर्बाद किया, इस बारे में एक महान कहानी के लिए।
और यह भी देखें http://en.wikipedia.org/wiki/Inner-platform_effect क्योंकि ईएवी इस एंटी-पैटर्न का एक उदाहरण है।
मैं कैटलॉग में प्रति उत्पाद विशेषताओं के एक गतिशील सेट का समर्थन करने की आवश्यकता को समझता हूं। लेकिन ईएवी आपके आवेदन को खत्म कर देगा। यहाँ मैं गतिशील विशेषताओं का समर्थन करने के लिए क्या करता हूँ:
-
प्रत्येक विशेषता के लिए आधार तालिका में एक वास्तविक कॉलम परिभाषित करें जो सभी उत्पाद प्रकारों के लिए सामान्य है। उत्पाद का नाम, मूल्य, स्टॉक में मात्रा, आदि। प्रामाणिक उत्पाद . की कल्पना करने के लिए कड़ी मेहनत करें इकाई ताकि आप इस सेट में अधिक से अधिक विशेषताओं को शामिल कर सकें।
-
TEXT
. प्रकार के एक और कॉलम को परिभाषित करें प्रत्येक दिए गए उत्पाद प्रकार की सभी अतिरिक्त विशेषताओं के लिए। इस कॉलम में सीरियलाइज्ड LOB के रूप में स्टोर करें विशेषताओं में से, जो भी प्रारूप आपको सूट करता है:एक्सएमएल, जेएसओएन, वाईएएमएल, आपका अपना घर का बना डीएसएल, आदि।इसे अपने SQL प्रश्नों में एकल कॉलम के रूप में देखें। इन विशेषताओं के आधार पर आपको कोई भी खोज, छँटाई या प्रदर्शन करने की आवश्यकता है, जिसके लिए आपको संपूर्ण
TEXT
प्राप्त करना होगा अपने एप्लिकेशन में ब्लॉब करें इसे डीसेरियलाइज़ करें, और एप्लिकेशन कोड का उपयोग करके विशेषताओं का विश्लेषण करें।