9

मैं डेटाबेस डिज़ाइन में नया हूं। सीएमएस के लिए उत्पाद विशेषता डेटाबेस डिज़ाइन के लिए बेहतर विकल्प क्या है? (कृपया अन्य विकल्प भी सुझाएं)।(डेटाबेस डिज़ाइन - उत्पाद विशेषताएँ): उत्पाद विशेषता डेटाबेस डिज़ाइन के लिए बेहतर विकल्प क्या है?

विकल्प 1: 1 टेबल

products{ 
id 
product_name 
color 
price 
attribute_name1 
attribute_value1 
attribute_name2 
attribute_value2 
attribute_name3 
attribute_value3 
} 

विकल्प 2: 3 टेबल

products{ 
id 
product_name 
color 
price 
} 

attribute{ 
id 
name 
value 
} 

products_attribute{ 
products_id 
attribute_id 
} 

धन्यवाद, योसेफ

+0

गुणों को कितनी बार बदलता है? क्या आप अक्सर नए जोड़ते/हटाते हैं? यदि नहीं, तो विशेषता नाम होने वाले कॉलम के नामों के साथ विकल्प 1 का उपयोग करें। यदि आपके गुण गतिशील हैं तो विकल्प 2 का उपयोग करें। निश्चित रूप से विकल्प 2 के लिए आप प्रदर्शन हिट करेंगे। –

+0

बिल के मुताबिक बिल आपके पिछले उत्तरों को देखता है और एक अच्छा नागरिक बनता है और आपके लिए काम करने वाले लोगों को स्वीकार करता है। (बस माउस का एक क्लिक) –

+0

मैं वोटिंग जोड़ता हूं, मुझे बताने के लिए धन्यवाद। हमारा वेब एप्लिकेशन डायनेमिक है - इसका मतलब यह है कि प्रत्येक उपयोगकर्ता अपने गुणों को परिभाषित करता है। विकल्प 2 के साथ समस्या यह बहुत धीमी होगी और विकल्प 1 के साथ हम कर सकते हैं उत्पाद के लिए अधिकतम 10 गुण दें जो हम नाम और उसके मूल्य को उपयोगकर्ता को परिभाषित नहीं करते हैं। – Yosef

उत्तर

22

आप डेटाबेस डिज़ाइन की एक सामान्य गलती कर रहे हैं, एक कॉलम में नाम संग्रहीत कर रहे हैं और किसी अन्य कॉलम में मान डाल रहे हैं। यह एक संबंधपरक डेटाबेस डिजाइन नहीं है।

प्रत्येक विशेषता को कॉलम नाम से नामित किया जाना चाहिए। रंग, पेज, शर्ट आकार, प्रकाशित दिनांक, कॉलम नाम होना चाहिए।

यदि प्रत्येक उत्पाद प्रकार में विशेषताओं का एक अलग सेट होता है, तो अन्य समाधान भी होते हैं। मेरे जवाब देखें:

इसके अलावा कृपया इस कहानी पढ़ें: Bad CaRMa: Introducing Vision इससे पहले कि आप एक डाटाबेस के रूप में आप कर रहे हैं नाम-मान युग्म के आसपास डिज़ाइन किया गया लागू।

+0

धन्यवाद बिल, मैं अपने वोट अन्य प्रश्नों के लिए भी देता हूं, मुझे बताने के लिए धन्यवाद। – Yosef

+0

हाय बिल, मैंने आपको धन्यवाद लिंक धन्यवाद, मेरे पास प्रश्न है: आप ** कक्षा तालिका विरासत ** और ** एकल तालिका विरासत ** का उपयोग क्यों करना पसंद करते हैं? कृपया समझाएं, धन्यवाद, योसेफ – Yosef

+0

@Yosef: कक्षा तालिका विरासत के साथ यह स्पष्ट है कि स्तंभों के समूह एक साथ जाते हैं। इसके अलावा आप किसी भी समय टाइप-विशिष्ट कॉलम के अपने सेट के साथ एक नई उप प्रकार तालिका जोड़ सकते हैं, जिसमें सभी उपप्रकारों के लिए सामान्य कॉलम वाले पैरेंट टेबल को बदलने की आवश्यकता नहीं है। उदाहरण के लिए यह MySQL के लिए महत्वपूर्ण है, जहां 'वैकल्पिक तालिका' एक महंगी ऑपरेशन है। –

1

यही कारण है कि आप से चाहते हैं पर निर्भर करता है आपका डेटाबेस यदि आपके सभी उत्पाद एक ही प्रकार के हैं और आपके पास समान विशेषताएं हैं तो आपको बस ऐसा कुछ करने की आवश्यकता है:

उत्पाद {आईडी: पूर्णांक, उत्पाद_नाम: स्ट्रिंग, रंग: स्ट्रिंग, विशेषता_नाम 1: स्ट्रिंग, विशेषता_नाम 2: स्ट्रिंग। ..}। Attribute_name {} को एक सार्थक शब्द होना चाहिए, जैसे "रंग" (जो एक विशेषता भी है)।

+0

नहीं, वे समान नहीं हैं क्योंकि मैं 2 फ़ील्ड जोड़ता हूं: 1. नाम 2. मूल्य – Yosef

3

मुझे लगता है कि उत्पाद के लिए सबसे अच्छा कार्यान्वयन विशेषता है कि आप प्राप्त कर सकते हैं

Product_Tbl [ 
    ID 
    Name 
    more columns 
] 

Attribute_Tbl [ 
    ID 
    Att_Name 
] 

Product_Attribute_Tbl [ 
    Product_ID 
    Attribute_ID 
    Value 
] 

आप इस संरचना

0

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

क्या आपने कभी तालिका में एक अलग आइटम के रूप में प्रत्येक विशेषता को संग्रहीत करने पर विचार किया है ...कहते हैं की सुविधा देता है तालिका "2", जहां उत्पाद की कुंजी वापस एक आईडी होगा:

Product (table 1) 
{ 
    Product ID 
    Product Name 
} 

    Tags (table 2) 
{ 
    Tag ID 
    Higher Level tag ID 
    Description 
    Value 
    Product ID 
} 

और यह टेबल भी एक क्षेत्र "उच्च स्तर" कहा जाता है, ताकि आप इस तालिका में अद्वितीय ID मिल सकता है कि इस विशिष्ट उत्पाद के लिए किस विशेषता का उच्च स्तर के रूप में बनाया गया था। इस तरह आपके पास "omnilevel टैगिंग" नामक कुछ है।

आशा है कि यह