पृष्ठभूमि
मैं प्रथम वर्ष का सीएस छात्र हूं और मैं अपने पिताजी के छोटे व्यवसाय के लिए अंशकालिक काम करता हूं। मुझे वास्तविक विश्व अनुप्रयोग विकास का कोई अनुभव नहीं है। मैंने पायथन में स्क्रिप्ट्स लिखी हैं, सी में कुछ कोर्सवर्क, लेकिन ऐसा कुछ नहीं है।
मेरे पिताजी का एक छोटा सा प्रशिक्षण व्यवसाय है और वर्तमान में सभी वर्ग अनुसूचित हैं, रिकॉर्ड किए गए हैं और बाहरी वेब एप्लिकेशन के माध्यम से उनका पालन किया जाता है। एक निर्यात / "रिपोर्ट" सुविधा है, लेकिन यह बहुत सामान्य है और हमें विशिष्ट रिपोर्टों की आवश्यकता है। प्रश्नों को चलाने के लिए हमारे पास वास्तविक डेटाबेस तक पहुँच नहीं है। मुझे एक कस्टम रिपोर्टिंग सिस्टम स्थापित करने के लिए कहा गया है।
मेरा विचार जेनेरिक सीएसवी निर्यात और आयात (संभवत: पायथन के साथ) उन्हें हर रात कार्यालय में होस्ट किए गए एक MySQL डेटाबेस में बनाने का है, जहां से मुझे उन विशिष्ट प्रश्नों को चलाया जा सकता है जिनकी जरूरत है। मुझे डेटाबेस में अनुभव नहीं है, लेकिन बहुत मूल बातें समझ में आती हैं। मैंने डेटाबेस निर्माण और सामान्य रूपों के बारे में थोड़ा पढ़ा है।
हमारे पास जल्द ही अंतरराष्ट्रीय ग्राहक होने शुरू हो सकते हैं, इसलिए मैं चाहता हूं कि डेटाबेस में विस्फोट न हो। वर्तमान में हमारे पास अलग-अलग डिवीजनों (जैसे ACME पैरेंट कंपनी, ACME हेल्थकेयर डिवीजन, ACME बॉडीकेयर डिवीजन) के साथ ग्राहकों के रूप में कुछ बड़े निगम हैं
मैं जिस स्कीमा के साथ आया हूं वह निम्नलिखित है:
- ग्राहक के नजरिए से:
- ग्राहक मुख्य तालिका है
- ग्राहक जिस विभाग के लिए काम करते हैं उससे जुड़े होते हैं
- एक देश के चारों ओर विभाग बिखरे हो सकते हैं: लंदन में एचआर, स्वानसी में विपणन, आदि।
- विभागों को एक कंपनी के विभाजन से जोड़ा जाता है
- डिवीजनों को मूल कंपनी से जोड़ा जाता है
- कक्षाओं के दृष्टिकोण से:
- सत्र मुख्य तालिका है
- एक शिक्षक प्रत्येक सत्र से जुड़ा होता है
- प्रत्येक सत्र के लिए एक स्टेटस दिया जाता है। उदा ० - पूर्ण, १ - रद्द
- सत्रों को एक मनमाने आकार के "पैक" में वर्गीकृत किया जाता है
- प्रत्येक पैक एक ग्राहक को सौंपा गया है
- सत्र मुख्य तालिका है
मैंने "डिजाइन किया" (अधिक परिमार्जन की तरह) स्कीमा को कागज के एक टुकड़े पर रखा, इसे 3 डी रूप में सामान्य रखने की कोशिश की। फिर मैंने इसे MySQL कार्यक्षेत्र में प्लग किया और इसने मेरे लिए यह सब बहुत सुंदर बना दिया:
( पूर्ण आकार के ग्राफिक के लिए यहां क्लिक करें )
(स्रोत: maian.org )
उदाहरण के प्रश्न मैं चल रहा हूँ
- क्रेडिट वाले ग्राहक अभी भी निष्क्रिय हैं (भविष्य में अनुसूचित वर्ग के बिना)
- प्रति ग्राहक / विभाग / प्रभाग में उपस्थिति दर क्या है (प्रत्येक सत्र में स्थिति आईडी द्वारा मापा जाता है)
- एक महीने में एक शिक्षक के पास कितनी कक्षाएं होती हैं
- फ्लैग क्लाइंट्स जिनकी उपस्थिति दर कम है
- अपने विभागों के लोगों की उपस्थिति दर के साथ मानव संसाधन विभागों के लिए कस्टम रिपोर्ट
प्रशन)
- क्या यह अतिरंजित है या क्या मैं सही तरीके से नेतृत्व कर रहा हूं?
- क्या अधिकांश क्वेरी के लिए कई तालिकाओं में शामिल होने की आवश्यकता एक बड़े प्रदर्शन हिट होगी?
- मैंने ग्राहकों के लिए एक 'अंतिम' कॉलम जोड़ा है, क्योंकि यह शायद एक सामान्य प्रश्न है। क्या यह एक अच्छा विचार है या मुझे डेटाबेस को सख्ती से सामान्य रखना चाहिए?
आपके समय के लिए धन्यवाद
divisions
में नाम का कॉलम है divisionid
। क्या आपको वह बेमानी नहीं लगती? बस नाम बताइए id
। आपकी तालिका के नाम भी शामिल हैं _has_
: मैं इसे हटा दूंगा और उदाहरण के लिए इसे नाम दूंगा cities_departments
। जब तक वे उपयोगकर्ता-इनपुट मान नहीं रखते, तब तक आपके DATETIME
कॉलम प्रकार के होने चाहिए TIMESTAMP
। मुझे लगता है कि यह एक अच्छा विचार है cities
और countries
टेबल है। आप किसी एकल में तालिकाओं को सीमित करने में परेशानी में पड़ सकते हैं status
। एक प्रयोग करने पर विचार INT
और इसलिए आप कर सकते हैं और अधिक वहाँ अर्थ है- पर बिटवाइज़ तुलना प्रदर्शन