मुझे क्या उपयोग करना चाहिए? एक स्ट्रिंग या 15 पूर्णांक फ़ील्ड?


9

मैं एक छात्र ट्रैकिंग कार्यक्रम विकसित कर रहा हूं जहां मुझे 15 परीक्षा अंक संग्रहीत करने की आवश्यकता है।

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

कौनसा अच्छा है? एक एकल स्ट्रिंग फ़ील्ड, या 15 व्यक्तिगत int फ़ील्ड?


"15 परीक्षा के अंक" - तो एक ही परीक्षा के कई विकल्प या 15 परीक्षणों के स्कोर की तरह?
rfusca

15 परीक्षणों के स्कोर
माइक

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

जवाबों:


27

यदि आप पहले से ही विभाजन और कंप्यूटिंग के बारे में बात कर रहे हैं, तो इसे एक सरणी के रूप में संग्रहीत करें।

संबंधपरक सिद्धांत और पारंपरिक सामान्यीकरण नियमों और हठधर्मिता के बावजूद, यह केवल एक डिज़ाइन है जो आपको न्यूनतम लचीलापन देता है।

प्रत्येक परीक्षा परिणाम को एक पंक्ति बनाएं।

मैं सब कुछ का अनुमान लगाने की कोशिश नहीं कर रहा हूं, लेकिन बहुत बड़ी संख्या में चीजें हैं जो इस अधिक दानेदार (और, हां, सामान्यीकृत) और केवल कभी-कभी थोड़ा अधिक स्थान महंगा डिजाइन की सुविधा देता है जिसकी आपको आवश्यकता हो सकती है या हो सकती है या हो सकती है भविष्य में आवश्यकता नहीं हो सकती है:

  • उच्चतम और निम्नतम परिणाम को फेंकना? आपको अपने एरे को स्लाइस करके सॉर्ट करना होगा।

  • औसत? आपको इसे पूरा करना होगा और इसे कुल करना होगा

  • छात्रों में परीक्षा द्वारा परीक्षा परिणाम का विश्लेषण? आपको स्लाइस और पिवट करना होगा

  • गिनती के लिए छंटनी (या उदाहरण के लिए ब्रिटिश जीसीएसई, जहां यह 7 अस और 2 बी हो सकता है)? आपको स्लाइस और सॉर्ट करना होगा

ध्यान दें कि यह सब टुकड़ा करना और छांटना एक अनुक्रमित, सामान्यीकृत डिजाइन में बहुत सस्ते में आता है।


4
बस मैं क्या कहने जा रहा था लेकिन आपने इसे बेहतर बताया! एक स्ट्रिंग में संग्रहित मूली मान किसी भी डेटाबेस के लिए सबसे खराब संभव डिजाइन विकल्पों में से एक है।
HLGEM

+1 खदान से आगे की व्याख्या। मैं बहुत संक्षिप्त हो जाते हैं ।
rfusca

12

अंकों के लिए, प्रदर्शन-वार, स्पष्ट विजेता इसे संख्यात्मक रूप से कुछ इस तरह संग्रहीत कर रहा है;

create table test_scores
(
  student_id int,
  test_id int,
  score int
);

इसकी क्वेरी करना आसान है, अपडेट करना और जोड़ना आसान है, और एग्रीगेट प्रदर्शन करने के लिए सुपर आसान और तेज़ है। "इस जानकारी को एक स्ट्रिंग के रूप में संग्रहीत करें जिसे मुझे विभाजित करना है" या "किसी कॉलम में संग्रहीत करें" की पसंद को देखते हुए ... विजेता हमेशा RDBMS में अधिकांश उपयोग के मामलों के लिए "कॉलम में स्टोर" करने वाला होता है।


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

इसके अतिरिक्त, 1 छात्र की प्रत्येक 15 परीक्षाओं के लिए आपका अब एक छात्र आईडी और टेस्ट आईडी अतिरिक्त 15 गुना है।
एडवर्ड डॉर्टलैंड

1
यहाँ fiddle - sqlfiddle.com/#
f7343

6
@EdwardDortland यह हमेशा 15 होगा जब तक यह नहीं है।
therefromhere

1
@EdwardDortland: गणना ठीक हैं। अब, क्या आप उन्हें उन सूचकांकों के लिए कर सकते हैं जिनकी आपको आवश्यकता हो सकती है?
ypercube y

1

जब तक आप चार (15) या 15 टिंटिंट का उपयोग करते हुए छोटे इंट (0 से 255) का उपयोग करते हैं, तब तक यह आकार (आकार के अनुसार) होता है। तो फिर एक प्रदर्शन के नजरिए से, 15 छोटे निशानों के लिए जाएं क्योंकि आप निष्कर्षण और स्ट्रिंग हैंडलिंग पर बचत करते हैं।

अपडेट करें

यदि निशान दोहरे अंक के हैं, तो आपको CHAR (30) की आवश्यकता होगी और यह 15 बार एक छोटे से आकार का दोगुना है।


9
इस अत्यंत सरल डिज़ाइन को देखते हुए, अगर इस ग्रह पर कोई संस्था है, जिसके पास आधुनिक आरडीबीएमएस में प्रदर्शन की समस्या पैदा करने के लिए 15 परीक्षाओं (अंकों के साथ) में पर्याप्त छात्र बैठे हैं, तो मैं आज रात खुद को रोने दूंगा।
फिलु

1
यदि अंक दोहरे अंक हैं? लेकिन छोटे इंट ने 0 से 255, या -127 से लेकर 127 तक के स्कोर को कवर किया कि आप कैसे गिनना पसंद करते हैं। इसलिए चूंकि स्कोर शायद ही कभी नकारात्मक होता है, जिससे एक परीक्षा के लिए 250+ अंक मिलते हैं, और अधिकांश परीक्षा 0-100% के पैमाने पर होती हैं। मुझे लगता है कि टिनींट यहां बिल्कुल उपयोगी है।
jcolebrand

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

-1 क्योंकि यह उत्तर प्रति पंक्ति डिज़ाइन के क्षेत्रों की अनुशंसा करता है जो कि प्रत्येक परीक्षा के परिणाम के अनुसार अन्य पदों द्वारा प्रस्तावित के अनुसार अभी तक हीन है
चमत्कार 173
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.