Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कुछ मानदंडों से मेल खाने वाली सामान्यीकृत MySQL 5.7 संरचना से मान कैसे प्राप्त करें

आपने अपनी विशेषताओं को रिकॉर्ड करने के लिए एक इकाई-विशेषता-मान तालिका का उपयोग किया है।

यह विपरीत . है सामान्यीकरण का।

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

अपने वर्तमान ईएवी डिज़ाइन के साथ अपनी क्वेरी को पूरा करने के लिए, आपको परिणाम को पिवट करने की आवश्यकता है ताकि आपको कुछ ऐसा मिले जैसे कि आपकी मूल तालिका हो।

SELECT * FROM (
    SELECT 
         a.article_id,
         a.title, 
         MAX(CASE attr_group WHEN 'ref_id' THEN attribute END) AS ref_id,
         MAX(CASE attr_group WHEN 'dial_c_id' THEN attribute END) AS dial_c_id
         -- ...others...
    FROM test.articles_test a
    INNER JOIN attributes attr ON a.article_id = attr.article_id
    GROUP BY a.article_id, a.title) AS pivot
WHERE pivot.ref_id = '127712' 
  AND pivot.dial_c_id = 51 

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

आप अपनी मूल तालिका में प्रत्येक विशेषता के अपने कॉलम में वास्तव में बेहतर हैं।

मैं समझता हूं कि आप भविष्य में कई विशेषताओं के लिए अनुमति देने का प्रयास कर रहे हैं। यह एक आम समस्या है।

मेरा जवाब देखेंकई प्रकार के उत्पाद के लिए उत्पाद तालिका कैसे डिज़ाइन करें जहां प्रत्येक उत्पाद के कई पैरामीटर हों

लेकिन आपको इसे "सामान्यीकृत" नहीं कहना चाहिए, क्योंकि ऐसा नहीं है। यह असामान्यीकृत भी नहीं है . यह अप्रासंगिक है ।

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

आपने टिप्पणी की कि आप अपने डेटाबेस को "स्केलेबल" बनाने का प्रयास कर रहे हैं। आप यह भी गलत समझते हैं कि "स्केलेबल" शब्द का क्या अर्थ है। ईएवी का उपयोग करके, आप एक संरचना बना रहे हैं जहां आवश्यक प्रश्नों को लिखना मुश्किल है और निष्पादित करने में अक्षम है, और डेटा 10x स्थान लेता है। यह स्केलेबल के विपरीत है।

आपका मतलब यह है कि आप एक ऐसा सिस्टम बनाने की कोशिश कर रहे हैं जो एक्सटेंसिबल . है . यह एसक्यूएल में लागू करने के लिए जटिल है, लेकिन मैं अन्य स्टैक ओवरफ़्लो उत्तर में कई समाधानों का वर्णन करता हूं जिनसे मैंने लिंक किया था। आपको मेरी प्रस्तुति MySQL के साथ एक्स्टेंसिबल डेटा मॉडलिंग भी पसंद आ सकती है। ।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. गतिशील वेबसाइट सुरक्षा प्रश्न (PHP+MySQL)

  2. उपयोगकर्ता ''@'लोकलहोस्ट'' के लिए प्रवेश निषेध (पासवर्ड का प्रयोग:नहीं)

  3. sql_mode के खाली होने के बावजूद संग्रहीत कार्यविधि sql_mode=only_full_group_by के साथ असंगत है

  4. CASE का उपयोग करके SQL अनुरोध कैसे करें

  5. अल्पविराम से अलग कॉलम में घटनाओं की गणना कैसे करें?