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

लुकअप टेबल कितने महत्वपूर्ण हैं?

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

SQL अनुपालन में, ओपन आर्किटेक्चर डेटाबेस, जहां एक डेटाबेस का उपयोग करने वाले कई ऐप्स हैं, और डेटा, मानकों, सामान्यीकरण, और ओपन आर्किटेक्चर आवश्यकताओं तक पहुंचने के लिए विभिन्न रिपोर्ट टूल (केवल ऐप्स नहीं) का उपयोग करने वाले कई उपयोगकर्ता महत्वपूर्ण हैं।

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

  • अगर आपके पास डेटा मान है जैसे {Open; Closed; etc } डेटा तालिकाओं में दोहराया गया, यानी डेटा दोहराव , एक साधारण सामान्यीकरण त्रुटि:यदि आप वे मान बदलते हैं, तो आपको लाखों पंक्तियों को अपडेट करना पड़ सकता है, जो कि बहुत सीमित डिज़ाइन है।

    • ऐसे मानों को एक संक्षिप्त CHAR(2) . के साथ एक संदर्भ या लुकअप तालिका में सामान्यीकृत किया जाना चाहिए पीके:

      O  Open
      C  Closed
      U  [NotKnown]
      
    • डेटा मान {Open;Closed;etc } अब लाखों पंक्तियों में डुप्लीकेट नहीं हैं। यह जगह भी बचाता है।

    • दूसरा बिंदु परिवर्तन में आसानी है, यदि Closed Expired . में बदल दिया गया , फिर से, एक पंक्ति को बदलने की आवश्यकता है, और यह पूरे डेटाबेस में परिलक्षित होता है; जबकि गैर-सामान्यीकृत फ़ाइलों में, लाखों पंक्तियों को बदलने की आवश्यकता होती है।

    • नए डेटा मान जोड़ना , उदा. (H,HalfOpen ) तो बस एक पंक्ति डालने की बात है।

  • में ओपन आर्किटेक्चर शब्द, लुकअप तालिका एक साधारण तालिका है। यह [एसक्यूएल अनुपालन] कैटलॉग में मौजूद है; जब तक FOREIGN KEY संबंध को परिभाषित किया गया है, रिपोर्ट टूल उसे भी ढूंढ सकता है।

  • ENUM एक गैर-एसक्यूएल है, इसका इस्तेमाल न करें। SQL में "enum" एक लुकअप टेबल है।

  • अगला बिंदु कुंजी की सार्थकता से संबंधित है।

    • यदि उपयोगकर्ता के लिए कुंजी अर्थहीन है, तो ठीक है, {INT;BIGINT;GUID;etc का उपयोग करें } या जो भी उपयुक्त हो; उन्हें क्रमिक रूप से संख्या न दें; "अंतराल" की अनुमति दें।
    • लेकिन यदि उपयोगकर्ता के लिए कुंजी सार्थक है, तो अर्थहीन संख्या का उपयोग न करें, सार्थक संबंधपरक कुंजी का उपयोग करें।
  • अब कुछ लोग पीके के स्थायित्व के संबंध में स्पर्शरेखा में आ जाएंगे। वह एक अलग बिंदु है। हां, बिल्कुल, पीके के लिए हमेशा स्थिर मान का उपयोग करें ("अपरिवर्तनीय" नहीं, क्योंकि ऐसी कोई चीज़ मौजूद नहीं है, और सिस्टम द्वारा उत्पन्न कुंजी पंक्ति विशिष्टता प्रदान नहीं करती है)।

    • {M,F } बदलने की संभावना नहीं है

    • अगर आपने {0,1,2,4,6 . का इस्तेमाल किया है }, इसे न बदलें, आप क्यों चाहेंगे। उन मूल्यों को अर्थहीन माना जाता था, याद रखें, केवल एक सार्थक कुंजी को बदलने की जरूरत है।

    • यदि आप सार्थक कुंजियों का उपयोग करते हैं, तो छोटे अक्षर कोड का उपयोग करें, जिसे डेवलपर्स आसानी से समझ सकें (और इससे लंबे विवरण का अनुमान लगा सकें)। आप इसकी सराहना तभी करेंगे जब आप SELECT . को कोड करेंगे और महसूस करें कि आपको JOIN करने की आवश्यकता नहीं है हर लुकअप टेबल। पावर उपयोगकर्ता भी, इसकी सराहना करें।

  • चूंकि पीके स्थिर हैं, खासकर लुकअप टेबल में, आप सुरक्षित रूप से कोड कर सकते हैं:

    WHERE status_code = 'O' -- Open

    आपको यह नहीं करना है JOIN लुकअप तालिका और प्राप्त करें डेटा मान Open , डेवलपर के रूप में, आपको लुकअप पीके का मतलब पता होना चाहिए।

अंत में, यदि डेटाबेस बड़ा था, और OLTP के अतिरिक्त BI या DSS या OLAP फ़ंक्शन समर्थित थे (ठीक से सामान्यीकृत डेटाबेस कर सकते हैं), तो लुकअप तालिका वास्तव में आयाम-तथ्य में एक आयाम या वेक्टर है। विश्लेषण करता है यदि यह वहां नहीं था, तो इस तरह के विश्लेषणों को माउंट करने से पहले, उस सॉफ़्टवेयर की आवश्यकताओं को पूरा करने के लिए इसे जोड़ना होगा।

  • यदि आप शुरू से ही अपने डेटाबेस में ऐसा करते हैं, तो आपको बाद में इसे (और कोड) अपग्रेड नहीं करना पड़ेगा।

आपका उदाहरण

SQL एक निम्न-स्तरीय भाषा है, इस प्रकार यह बोझिल है, खासकर जब JOINs की बात आती है . हमारे पास यही है, इसलिए हमें केवल भार को स्वीकार करने और उससे निपटने की जरूरत है। आपका उदाहरण कोड ठीक है। लेकिन सरल रूप वही काम कर सकते हैं।

एक रिपोर्ट टूल जेनरेट करेगा:

SELECT p.*,
       s.name
    FROM posts  p, 
         status s
    WHERE p.status_id = s.status_id 
    AND   p.status_id = 'O'

एक और उदाहरण

बैंकिंग सिस्टम के लिए, जहां हम छोटे कोड का उपयोग करते हैं जो अर्थपूर्ण होते हैं (चूंकि वे सार्थक होते हैं, हम उन्हें मौसम के साथ नहीं बदलते हैं, हम केवल उन्हें जोड़ते हैं), एक लुकअप तालिका दी जाती है जैसे (ध्यान से चुना गया, आईएसओ देश कोड के समान) :

Eq   Equity
EqCS Equity/Common Share
OTC  OverTheCounter
OF   OTC/Future

इस तरह का कोड आम है:

WHERE InstrumentTypeCode LIKE "Eq%"

और GUI के उपयोगकर्ता
{Equity/Common Share;Over The Counter प्रदर्शित करने वाले ड्रॉप-डाउन से मान चुनेंगे },
नहीं {Eq;OTC;OF }, नहीं {M;F;U }.
बिना लुकअप टेबल के, आप ऐप में या रिपोर्ट टूल में ऐसा नहीं कर सकते।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दो क्षेत्रों पर समूह का उपयोग करना और SQL में गिनना

  2. केकेपीएचपी - अंतिम क्वेरी चलाएं

  3. क्या mysql अद्यतन प्रश्नों को किसी अनुक्रमणिका से लाभ होता है?

  4. क्या MySQL के DESCRIBE [टेबल] के बराबर कोई SQLite है?

  5. MySQL:उन पंक्तियों का चयन करना जहाँ एक कॉलम रिक्त है