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

एक मैराथन प्रशिक्षण ऐप डेटा मॉडल

क्या आप मैराथन दौड़ने का सपना देखते हैं? आइए एक ऐसे ऐप के लिए डेटा मॉडल देखें जो आपको आलसी काउच पोटैटो से लेकर मैराथनर तक ले जा सकता है।

मैराथन दौड़ने के लिए आपको क्या चाहिए? आपको उत्साह और दृढ़ संकल्प की आवश्यकता होगी। चलने वाले जूते की एक अच्छी जोड़ी। और बहुत सारे शारीरिक प्रशिक्षण! मान लें कि आपके पास एक ऐप है जो आपको नौसिखिए धावक से मैराथन फिनिशर तक जाने में मदद करता है। डेटा मॉडल कैसा दिखेगा?

इस लेख में, हम मैराथन प्रशिक्षण ऐप के पीछे के डेटा मॉडल की जांच करेंगे।

मैराथन ट्रेनिंग ऐप को क्या करना चाहिए?

कोई भी प्रशिक्षण ऐप आमतौर पर कुछ विकल्पों के साथ आता है। इस मामले में, हम उम्मीद करते हैं कि ऐप विभिन्न प्रकार के रनों (एक पूर्ण मैराथन, एक हाफ मैराथन, एक 5k) और विभिन्न प्रशिक्षण शेड्यूल (आठ से 24 सप्ताह तक कहीं भी) के लिए प्रशिक्षण का समर्थन करेगा। ऐप उम्र, लिंग और वर्तमान चालू स्थिति सहित आपके मूल विवरण को कैप्चर करेगा। यह आपको एक लक्ष्य और एक आरंभ तिथि निर्धारित करने की अनुमति भी देनी चाहिए। ऐप इस जानकारी का उपयोग आपके आगामी चल रहे कार्यक्रम के लिए एक प्रशिक्षण योजना बनाने के लिए करेगा। जितना अधिक आप अपनी योजना के साथ आगे बढ़ेंगे, आप अपने लक्ष्य के उतने ही करीब होंगे।

आइए इस ऐप की प्रमुख आवश्यकताओं पर चलते हैं। यह चाहिए:

  • पंजीकरण प्रक्रिया के दौरान उपयोगकर्ता का नाम, आयु, लिंग इत्यादि कैप्चर करें।
  • एक संबद्ध लक्ष्य दूरी के साथ लक्ष्यों (जैसे चलना, दौड़ना, साइकिल चलाना, आदि) की सूची प्रदर्शित करना।
  • उपयोगकर्ताओं को लक्ष्य, लक्ष्य दूरी और प्रारंभ तिथि निर्धारित करने दें।
  • व्यक्तिगत उपयोगकर्ताओं के लिए एक विस्तृत व्यक्तिगत प्रशिक्षण योजना बनाएं जो उनकी उम्र, लिंग और वर्तमान फिटनेस स्तर पर विचार करे। इस प्रशिक्षण योजना में शामिल हैं:
    • गतिविधियां, जैसे दौड़ना।
    • गतिविधियों के प्रारंभ और पूर्ण होने की तिथियां।
    • दूरी (जैसे 5 किलोमीटर दौड़ना)
    • सुझाई गई गति (उदा. 5 किमी/घंटा) और अनुमानित समापन समय (1 घंटा)।
    • आराम के दिन। इन्हें शारीरिक फिटनेस योजना में बनाना महत्वपूर्ण है।
    • लक्ष्य की समाप्ति तिथि, उदा. जब उपयोगकर्ता अपने चुने हुए कार्यक्रम को चलाने के लिए तैयार होगा।
  • प्रशिक्षण योजना गतिविधियों की प्रगति को कैप्चर करें, जिसमें प्रत्येक गतिविधि कब (या यदि) शुरू की गई थी, उपयोगकर्ता इसे पूरा करने के कितने करीब है, और कब समाप्त हुआ।
  • आवश्यकतानुसार प्रशिक्षण योजनाओं को समायोजित करें। उदाहरण के लिए, एक धावक बीमार या घायल हो सकता है और अपने मूल कार्यक्रम का पालन नहीं कर सकता है; उस स्थिति में, मूल योजना को विस्तारित या संशोधित करने की आवश्यकता होगी।
  • उपयोगकर्ता द्वारा अर्जित शीर्षकों को कैप्चर करें। रनिंग में, ये सफलतापूर्वक पूर्ण की गई घटनाओं पर आधारित होते हैं, उदा। 5K धावक, 10K धावक, हाफ मैराथन धावक, या पूर्ण मैराथन धावक। ये खिताब धावकों के प्रशिक्षण के साथ प्रगति के रूप में अर्जित किए जाते हैं।

डेटा मॉडल

ऐसे ऐप का समर्थन करने वाले डेटा मॉडल में तीन विषय क्षेत्र होते हैं:

  1. उपयोगकर्ता और शीर्षक
  2. लक्ष्य और गतिविधियां
  3. उपयोगकर्ता लक्ष्य और संक्रमण

हम प्रत्येक विषय क्षेत्र पर उसके सूचीबद्ध क्रम में चर्चा करेंगे।

विषय क्षेत्र 1:उपयोगकर्ता और शीर्षक

इस ऐप का उपयोग न केवल नौसिखिए धावकों द्वारा किया जाएगा। चल रहे कार्यक्रम बहुत मांग और ज़ोरदार हैं; यहां तक ​​​​कि अनुभवी मैराथनर्स को भी आगामी मैराथन के लिए प्रशिक्षित करने की आवश्यकता है। कोई भी रात भर या एकल प्रशिक्षण पाठ्यक्रम के बाद पूर्ण मैराथन नहीं दौड़ता है। यह एक क्रमिक प्रक्रिया है।

जैसा कि हमने पहले उल्लेख किया है, धावक विभिन्न लंबाई की घटनाओं के आधार पर विभिन्न खिताब अर्जित करते हैं। जैसे-जैसे एक धावक अपने प्रशिक्षण में आगे बढ़ता है, वे लंबी स्पर्धाओं को चलाने और अधिक खिताब अर्जित करने में सक्षम होंगे। इस विषय क्षेत्र में तालिकाओं को इसे ध्यान में रखकर परिभाषित किया गया है।

registered_user “तालिका में उपयोगकर्ताओं के बारे में बुनियादी विवरण हैं। ये विवरण पंजीकरण प्रक्रिया के दौरान कैप्चर किए जाते हैं। इसमें दो प्रमुख कारक शामिल हैं जो प्रशिक्षण योजना डिजाइन को प्रभावित करते हैं:आयु (date_of_birth . से प्राप्त) ) और लिंग। ये महत्वपूर्ण हैं क्योंकि अलग-अलग लिंग और आयु समूह अलग-अलग प्रशिक्षण लेते हैं, भले ही वे एक ही घटना में प्रतिस्पर्धा कर रहे हों। एक 19 वर्षीय लड़के को 45 वर्षीय महिला की तुलना में एक अलग प्रशिक्षण योजना की आवश्यकता होगी।

running_event "तालिका सभी आधिकारिक चल रही घटनाओं की एक सूची संग्रहीत करती है। इसमें अंतरराष्ट्रीय कार्यक्रम शामिल हो सकते हैं। सभी क्षेत्र स्व-व्याख्यात्मक हैं।

title "तालिका मुख्य रूप से धावकों के" क्रेडेंशियल्स "को संग्रहीत करती है:वह दूरी जो वे कवर करते हैं और एक आधिकारिक कार्यक्रम के दौरान लगने वाला समय। शीर्षक और उनके वितरण के बारे में मुख्य बिंदु हैं:

  • प्रत्येक मैराथन इवेंट की शीर्षकों की अपनी सूची होती है।
  • आमतौर पर ये खिताब धावकों को एक मील के पत्थर के अंत में (एक ट्रैक पर) या जब वे समाप्त कर लेते हैं (जैसे मैराथन की फिनिश लाइन को पार करते हैं) दिए जाते हैं।
  • एक ही शीर्षक कई धावकों को दिया जा सकता है, बशर्ते वे सभी इसकी शर्तों को पूरा करते हों। इनमें शामिल हैं (1) न्यूनतम तय की जाने वाली दूरी, और (2) इस दूरी को तय करने के लिए अधिकतम समय।
  • यदि शीर्षकों को ट्रैक पर मध्यवर्ती मील के पत्थर पर परिभाषित किया जाता है, तो धावक केवल अपने द्वारा अर्जित उच्चतम शीर्षक रखता है।

शीर्षकों की इस समझ के साथ, "शीर्षक" तालिका के कॉलम स्व-व्याख्यात्मक होने चाहिए।

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

विषय क्षेत्र 2:लक्ष्य और गतिविधियां

यदि आप नहीं चाहते हैं तो कोई भी आपको मैराथन दौड़ने के लिए प्रेरित नहीं कर सकता है। आपको अपने जोश से काम लेना होगा। प्रेरित रहने का एक तरीका लक्ष्य निर्धारित करना और उन तक पहुंचना है। अगले दो विषय क्षेत्र लक्ष्य निर्धारित करने और उन्हें पूरा करने से संबंधित हैं।

सबसे पहले, हम Goals and Activities को देखेंगे विषय क्षेत्र। इसमें तीन टेबल हैं:

  1. goal " ऐप में परिभाषित लक्ष्यों के बारे में विवरण रखता है।
  2. activity विभिन्न प्रकार की प्रशिक्षण गतिविधियों के बारे में जानकारी संग्रहीत करता है, जैसे चलना, गति से चलना, दौड़ना, तैरना, साइकिल चलाना, आदि।
  3. goal_activity ” लक्ष्य को प्राप्त करने के लिए आवश्यक गतिविधियों के बारे में विवरण संग्रहीत करता है।

यह समझना महत्वपूर्ण है कि एक ही लक्ष्य अलग-अलग उपयोगकर्ताओं द्वारा अलग-अलग तरीके से प्राप्त किया जाता है। फिर से, एक 15 वर्षीय लड़की के पास एक प्रशिक्षण योजना और गतिविधियों का एक सेट होगा जो 40 वर्षीय व्यक्ति से अलग होगा। इन तथ्यों को ध्यान में रखते हुए, हमने निम्नलिखित कॉलम को “goal "तालिका:

  • distance_to_run - इस लक्ष्य के अंत में एक धावक जितनी दूरी तक दौड़ने में सक्षम होना चाहिए।
  • target_time_in_min - इस दूरी को तय करने में लगने वाला अधिकतम समय।
  • gender - यह लक्ष्य किस लिंग के लिए है।

15-20 या 35-40 आयु वर्ग के लिए एक लक्ष्य बनाया जा सकता है। जैसे-जैसे हम बड़े होते जाते हैं, वैसे-वैसे हम प्रशिक्षण में थोड़ा बदलाव करते हैं, इसलिए हमने “goal ":

  • starting_age – इस लक्ष्य के लिए न्यूनतम आयु।
  • closing_age - इस लक्ष्य के लिए अधिकतम आयु।

लोग बड़े सपने देख सकते हैं, लेकिन वास्तव में चीजों को पूरा करने का एकमात्र तरीका धीरे-धीरे प्रगति करना है। यह ऐप प्रतिबंधित करता है कि उपयोगकर्ता कैसे लक्ष्य बनाते हैं; उन्हें बड़े लक्ष्यों के लिए प्रयास करने से पहले छोटे, प्राप्त करने योग्य लक्ष्यों को पूरा करना होगा। एक काउच पोटैटो पूरे 26.2 मील \ 42.2 किमी मैराथन दौड़ने का सपना देख सकता है, लेकिन उन्हें पहले 5 के रन की दिशा में काम करना शुरू करना चाहिए।

goal “तालिका निम्न स्तंभों के माध्यम से प्रतिबंधों को संभालती है:

  • current_run_distance_per_week - उपयोगकर्ता द्वारा एक निश्चित लक्ष्य निर्धारित करने से पहले हासिल की गई न्यूनतम दौड़ दूरी; और
  • current_min_title_id - इस लक्ष्य को निर्धारित करने के लिए उपयोगकर्ताओं को न्यूनतम शीर्षक धारण करना चाहिए।

यदि इन पूर्वापेक्षाओं को पूरा नहीं किया जाता है, तो वह लक्ष्य उपयोगकर्ता के लिए उपलब्ध नहीं होगा। हालाँकि, ये दोनों कॉलम अशक्त हैं; कुछ ऐसे लक्ष्य होंगे जिनकी फिटनेस की कोई पूर्व शर्त नहीं है।

आइए "goal_activity " टेबल। इनमें से अधिकांश कॉलम एक स्पष्ट उद्देश्य की पूर्ति करते हैं। मैं केवल दो पर टिप्पणी करूंगा, seq_of_day . से शुरू होकर कॉलम। यह एक संख्या स्तंभ है जिसमें वे मान होते हैं जो उस दिन को दर्शाते हैं जब कोई गतिविधि की जानी है। जाहिर है यह क्रम किसी भी लक्ष्य के लिए 1 से शुरू होता है। यह कभी भी जीरो या न्यूल नहीं हो सकता। लक्ष्य के लिए संख्याएँ क्रमागत नहीं हो सकती हैं; इसका मतलब यह होगा कि आराम के दिन निर्धारित कर दिए गए हैं। वे दिन जिनके लिए इस तालिका में कोई रिकॉर्ड नहीं है, वास्तव में विश्राम के दिन हैं।

इसके बाद, हमारे पास distance_to_cover . है कॉलम। यह अशक्त है, क्योंकि ऐसी गतिविधियाँ (जैसे योग, स्ट्रेचिंग और भारोत्तोलन) हैं जिनमें दूरी मायने नहीं रखती है। यह कहने के बाद, ध्यान दें कि min_pace और max_paceactivity ” तालिका भी अशक्त है।

विषय क्षेत्र #3:उपयोगकर्ता लक्ष्य और संक्रमण

यह विषय क्षेत्र उपयोगकर्ता द्वारा बनाए गए लक्ष्यों और ऐप-निर्मित गतिविधि योजनाओं के बारे में है। वास्तविक तिथियां यहां महत्वपूर्ण हैं, और seq_of_daygoal_activity ” तालिका योजना तिथियों को प्रस्तुत करने में एक प्रमुख भूमिका निभाती है, जैसा कि start_date करता है उपयोगकर्ताओं द्वारा उनके लक्ष्यों के लिए चुना गया।

user_goal ” और “transition_plan "टेबल दोनों ज्यादातर आत्म-व्याख्यात्मक हैं। बस कुछ ही कॉलम हैं जिन पर हमें प्रकाश डालना चाहिए।

user_goal "तालिका:

  • is_active - दिखाता है कि क्या उपयोगकर्ता अभी भी इस लक्ष्य पर आगे बढ़ रहा है। इस कॉलम में सभी प्रगति वाले लक्ष्यों में एक 'Y' होगा। यह कॉलम ऐप को उपयोगकर्ताओं को एक समय में एक लक्ष्य निर्धारित करने के लिए प्रतिबंधित करने में सक्षम बनाता है।
  • create_date - वह तारीख जब कोई लक्ष्य बनाया गया था।
  • start_date - वह तिथि जब वास्तव में एक लक्ष्य शुरू किया गया था। यह create_date के समान नहीं हो सकता है।
  • expected_end_date - एक समाप्ति तिथि, जिसकी गणना ऐप द्वारा उपयोगकर्ता के लिए ट्रांज़िशन योजना बनाने के बाद की जाती है।
  • actual_end_date - जब लक्ष्य वास्तव में पूरा हो गया था। प्रशिक्षण योजना से विचलन हो सकता है, इसलिए वास्तविक समाप्ति तिथि को पकड़ने के लिए हमें इस कॉलम की आवश्यकता है। ऐप एक दिन छोड़ने या प्रशिक्षण कार्यक्रम को एक-एक दिन आगे बढ़ाने का विकल्प दे सकता है। ऐसे मामलों में, actual_end_date निश्चित रूप से expected_end_date . से भिन्न होगा ।

transition_plan "तालिका:

  • is_complete - इंगित करता है कि क्या कोई गतिविधि छोड़ी गई थी, अभी तक शुरू नहीं हुई है या समाप्त हो गई है। इसमें 'Y', 'N', या एक रिक्त स्थान होगा।
  • start_timestamp - टाइमस्टैम्प जब कोई गतिविधि शुरू की गई थी।
  • end_timestamp - गतिविधि पूर्ण होने पर टाइमस्टैम्प।

चूंकि हम समझते हैं कि प्रशिक्षण में अंतराल हो सकता है (बीमारी, चोट या प्रेरणा की कमी के कारण), इस तालिका में तीन अलग-अलग तिथियां हैं:

  • original_calendar_date - एक कैलेंडर तिथि जो दर्शाती है कि कब किसी गतिविधि को करने की आवश्यकता है। यह मान तब भरा जाता है जब ऐप एक प्रशिक्षण योजना तैयार करता है।
  • planned_calendar_date - शुरुआत में यह कॉलम खाली रहता है। जब भी प्रशिक्षण योजना में कोई परिवर्तन किया जाता है, एक तिथि भर दी जाती है।
  • actual_calendar_date - जैसे ही उपयोगकर्ता किसी गतिविधि को पूर्ण के रूप में चिह्नित करता है, यह कॉलम पॉप्युलेट हो जाता है। यह वह तारीख है जब गतिविधि वास्तव में समाप्त हो जाती है।

planned_calendar_date और actual_calendar_date कॉलम अशक्त हैं; वे प्रारंभिक योजना निर्माण के दौरान आबाद नहीं हैं।

इस तालिका में अन्य तीन कॉलम अशक्त हैं ताकि यह डेटा मॉडल प्रगति पर किसी गतिविधि के लिए सभी संभावित परिदृश्यों को संभाल सके। यहां कुछ उदाहरण दिए गए हैं:

  • एक गतिविधि जो अभी तक शुरू नहीं हुई है -
    • is_complete - नल
    • start_timestamp - नल
    • end_timestamp - नल
  • एक गतिविधि जो शुरू हुई लेकिन पूरी नहीं हुई -
    • is_complete - NULL
    • start_timestamp – VALUE
    • end_timestamp - NULL
  • एक गतिविधि जिसे छोड़ दिया गया था -
    • is_complete - 'एन'
    • start_timestamp - NULL
    • end_timestamp - NULL
  • एक गतिविधि जो पूरी हुई -
    • is_complete - 'Y'
    • start_timestamp –VALUE
    • end_timestamp - VALUE

आप इस डेटा मॉडल के बारे में क्या बदलेंगे?

मैराथन के लिए प्रशिक्षण केवल व्यायाम से कहीं अधिक है। मैराथन करने वालों को अपनी जीवन शैली के हर पहलू को बदलना पड़ता है, जिसमें उनके दैनिक भोजन का सेवन, उनकी मानसिक शक्ति और यहां तक ​​कि उन्हें मिलने वाली नींद भी शामिल है।

एक प्रभावी ऐप प्रशिक्षण के सभी पहलुओं को व्यवस्थित, योजना और ट्रैक करने में सक्षम होना चाहिए। क्या हमारा डेटा मॉडल इन सभी पहलुओं को पूरा करता है? इसे एक पूर्ण प्रशिक्षण ऐप बनाने के लिए किन परिवर्तनों की आवश्यकता है?

कृपया अपने विचार और सुझाव कमेंट सेक्शन में साझा करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटा मास्किंग के माध्यम से डेटा जोखिम शमन

  2. सामान्य त्रुटि:OS संस्करण बेमेल

  3. SQL बाधाएँ क्या हैं और इसके विभिन्न प्रकार क्या हैं?

  4. ORA-12547 त्रुटि के साथ स्टार्टअप RAC डेटाबेस विफल हो जाता है

  5. प्राथमिक कुंजी पर अनुक्रमणिका के लिए एक साधारण उपयोग केस