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

कारपूलिंग के लिए डेटा मॉडल बनाना

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

कारपूलिंग में भी बहुत काम लगता है - संगठनात्मक कार्य जो एक अच्छी तरह से डिज़ाइन किए गए डेटाबेस द्वारा आसानी से किया जा सकता है। यह लेख एक विस्तृत डेटा मॉडल की व्याख्या करता है जिसका उपयोग एक कारपूलिंग वेबसाइट कर सकती है।

डेटा डिज़ाइन, मिलिए कारपूलिंग

इसलिए, हमें राइड-शेयर (उर्फ कारपूलिंग) वेबसाइट के लिए एक डेटा मॉडल तैयार करने की आवश्यकता है।

कारपूलिंग कार रेंटल से थोड़ा अलग है। कारपूलिंग में, कार का स्वामित्व एक व्यक्ति के पास होता है, और वे दूसरों को सवारी प्रदान करते हैं। कोई भी सह-यात्री ईंधन, सड़क टोल आदि सहित सवारी लागत का भुगतान करता है।

परियोजना आवश्यकताएँ:

  • वेबसाइट को उपयोगकर्ताओं . को अनुमति देनी चाहिए (उर्फ राइड-शेयर सदस्य) अपना नाम, फोन नंबर, ईमेल पता, ड्राइवर का लाइसेंस नंबर, आदि का उपयोग करके खुद को पंजीकृत करने के लिए।
  • सदस्यों को अपनी प्राथमिकताएं set सेट करने की अनुमति दी जानी चाहिए सवारी और सह-यात्रियों के संबंध में।
  • सवारी मालिक कहे जाने वाले सदस्य सवारी . बना सकते हैं उनके यात्रा विवरण (यानी, प्रारंभ और गंतव्य बिंदु, प्रारंभ समय, प्रति-सवार लागत, आदि) दर्ज करके
  • अन्य सदस्य शहर के गंतव्य के लिए उपलब्ध सवारी की खोज कर सकते हैं ।
  • सदस्य जो सवारी की तलाश में हैं, वे सवारी के मालिक से संपर्क कर सकते हैं और आरक्षण कर सकते हैं उनकी सीटों के लिए।
  • सवारी के मालिक को आरक्षण अनुरोधों को स्वीकार या अस्वीकार करने में सक्षम होना चाहिए।
  • आरक्षण अनुरोध पर सवारी मालिक द्वारा की गई कार्रवाई के आधार पर, उपलब्ध सीटों की संख्या को अपडेट किया जाना चाहिए।
  • सवारी मालिक रास्ते में आने वाले शहरों को भी चिह्नित कर सकता है, जो अपने शुरुआती बिंदु से अपने गंतव्य तक जाने वाले शहर हैं। अगर वे चाहें, तो सवारी के मालिक भी रास्ते में आने वाले शहरों के लिए लोगों को समायोजित करने में सक्षम हों।

इन मापदंडों को ध्यान में रखते हुए, आइए हमारे कारपूलिंग डेटा मॉडल के लिए मुख्य संस्थाओं और संबंधों की पहचान करें।

संस्थाओं और संबंधों की पहचान करना

जब मैं समग्र रूप से आवश्यकताओं को देखता हूं, तो मैं आसानी से मुख्य संस्थाओं का पता लगा सकता हूं। वे हैं:

  • सदस्य (सवार मालिकों सहित और सह-यात्री )
  • कार
  • प्राथमिकताएं
  • सवारी
  • शहर
  • सवारी अनुरोध

सदस्य - इस वेबसाइट पर आने वाले सभी लोगों को इसका इस्तेमाल करने से पहले रजिस्ट्रेशन करना होगा। इस प्रक्रिया में, उन्हें first_name . जैसे विवरण देने होंगे , last_name , gender , email , और contact number . सह-यात्रियों के लिए, ये आइटम पर्याप्त हैं। सवारी के मालिक, जो संभवतः गाड़ी चला रहे होंगे, उन्हें कुछ अतिरिक्त विवरण भरने होंगे जैसे driving_license_number और driving_license_valid_from भी शामिल किया जाना चाहिए। लाइसेंस की जानकारी सह-यात्रियों को सवारी के मालिक के ड्राइविंग अनुभव के बारे में कुछ बताती है। इससे सह-यात्रियों को उपलब्ध सर्वोत्तम सवारी का चयन करने में मदद मिलेगी। मैं member सभी आवश्यक कॉलम के साथ।

कार - सवारी करने वाले को सवारी बनाने से पहले कम से कम एक कार के लिए विवरण जोड़ना होगा। तो चलिए एक और टेबल बनाते हैं, जिसका नाम है car , इस जानकारी को स्टोर करने के लिए। एक सदस्य के पास एक से अधिक कार हो सकती है। एक सवारी सदस्य-कार जोड़ी पर निर्भर हो सकती है, इसलिए हमें इस संबंध को स्थापित करने के लिए एक और टेबल की आवश्यकता है। हम इस तालिका को member_car . मैं इस तालिका की प्राथमिक कुंजी को अपने ride तालिका जहां मैं सवारी विवरण संग्रहीत करूंगा। मैं एक कॉलम भी जोड़ूंगा, जिसका नाम है comfort_level , जो कार के आराम स्तर को 0 से 5 के पैमाने पर संग्रहीत करता है। इस स्तर की गणना सिस्टम द्वारा स्वचालित रूप से की जाती है, जो कार के बारे में अन्य सदस्य द्वारा प्रदान किए गए विवरण के आधार पर होती है।

प्राथमिकताएं - प्राथमिकताएं सभी के लिए मायने रखती हैं। वेबसाइट सदस्यों को कार और उनके सह-यात्रियों के बारे में अपनी प्राथमिकताएं भरने की अनुमति देती है। पंजीकरण के समय ये विवरण वैकल्पिक रहते हैं, लेकिन सवारी बनाने से पहले इन्हें भरा जाना चाहिए . सवारी मालिक संभवतः समान पसंद वाले लोगों की तलाश करेगा ताकि हर कोई आराम से यात्रा कर सके। सवारी की तलाश करने वाले लोग ऐसा ही करते हैं।

कार यात्रा के लिए कुछ बुनियादी प्राथमिकताएं हैं:

  • क्या कार के अंदर धूम्रपान की अनुमति है?
  • क्या पालतू जानवरों को साथ ले जाने की अनुमति है?
  • सवारी का मालिक कितना बातूनी है? सवारी के दौरान किस स्तर की बकवास स्वीकार्य है? (यहां संभावित प्रतिक्रियाओं में कोई नहीं, लाइट चिटचैट, गैबफेस्ट शामिल हैं।)
  • सवारी के मालिक को किस तरह का संगीत पसंद है?
  • सवारी मालिक किस संगीत की अनुमति देता है?

चूंकि ये विवरण पंजीकरण के दौरान वैकल्पिक हैं, इसलिए मैं member_preference इन विवरणों को संग्रहीत करने के लिए। दो अतिरिक्त टेबल संगीत के संभावित विकल्पों को संग्रहित करते हैं (music_preference ) और कार में बातचीत (chitchat_preference )

आइए member और member_preference टेबल, क्योंकि सदस्य साइन अप करते समय सिस्टम में अपनी प्राथमिकताएं सेट कर सकते हैं या नहीं कर सकते हैं, और प्रति सदस्य वरीयताओं के लिए केवल एक रिकॉर्ड है।

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

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

सवारी अनुरोध - सदस्य एक शहर से दूसरे शहर में उपलब्ध सवारी की सूची देख सकते हैं या किसी विशिष्ट यात्रा के लिए अनुरोध कर सकते हैं। ऐसे अनुरोधों के बारे में विवरण संग्रहीत करने के लिए हमें निश्चित रूप से एक तालिका की आवश्यकता है। request उद्देश्य के अनुरूप है। अनुरोध शुरू में 'सबमिट' अनुरोध के रूप में दर्ज किया गया है, और सवारी मालिक ही एकमात्र व्यक्ति है जिसे इसे स्वीकृत या अस्वीकार करने की अनुमति है। सवारी तालिका में उपलब्ध सीटों की संख्या प्रत्येक अनुमोदन और/या अस्वीकृति के लिए समायोजित की जाएगी।

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

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

order_from_source enroute_city तालिका उस पाठ्यक्रम को दर्शाती है जिसका सवारी मालिक यात्रा के लिए अनुसरण करने जा रहा है।

वेबसाइट पर रिपोर्ट:

इस वेबसाइट पर विभिन्न रिपोर्ट (डेटा अर्क) दिखाई जा सकती हैं। मैं उनमें से कुछ के बारे में बताता हूँ:

  1. एक विशिष्ट शहर से दूसरे शहर के लिए राइड उपलब्ध हैं - यह उन रिपोर्टों में से एक है जिसे काफी बार निकाला जाएगा, क्योंकि यह इस वेबसाइट के सार को दर्शाती है। यात्रा के विकल्प या सवारी शेयरों की तलाश के लिए अधिकांश सदस्य इस वेबसाइट का उपयोग करेंगे। इस रिपोर्ट को निकालते समय, सदस्यों को अपने आरंभिक और गंतव्य शहर के नाम दर्ज करने होंगे। SQL इस प्रकार है:

    Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, seats_offered 
    from ride r, member_car mc, car c, member m, member_preference mp
    where r.member_car_id = mc.id and mc.member_id = u.id 
    and mc.car_id = c.id and m.id = mp.member_id
    and source_city_id = (select city_id from city where city_name = ‘CHICAGO’)
    and destination_city_id = (select city_id from city where city_name = ‘MIAMI’)
    and seats_offered > (select count(id) from request req, request_status reqs where req.request_status_id = reqs.id and upper(reqs.description) = ‘APPROVE’ and req.ride_id = r.id);
    

  2. सवारी के लिए सबमिट किए गए/स्वीकृत अनुरोधों की सूची - यह रिपोर्ट सवारी के मालिक को प्रदर्शित की जाएगी। यह दिखाएगा कि राइड अनुरोध किसने सबमिट किया है, और स्वामी केवल इस रिपोर्ट के अनुरोधों पर कार्रवाई कर सकता है। इसके लिए SQL इस प्रकार है:

    select first_name || ‘ ‘ || last_name as “Submitter”,  req.created_on as “Submitted on”, rs.description as “Request Status” 
    from member m, request req, request_status rs
    where m.id = req.requester_id and rs.id = req.request_status_id
    and req.ride_id = ;
    

  3. पिछली और वर्तमान सवारी की पेशकश की - ये रिपोर्ट राइड मालिकों को उनके डैशबोर्ड पर प्रदर्शित की जाएंगी। निम्नलिखित SQL का उपयोग सवारी के मालिक द्वारा वर्तमान में प्रदान की जाने वाली सवारी की सूची बनाने के लिए किया जा सकता है:

    Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, decode(seats_offered,0,’FULL’, seats_offered || ‘ seats available‘) from ride r, member_car mc, car c, member m, member_preference mp
    where r.member_car_id = mc.id and mc.member_id = m.id 
    and mc.car_id = c.id and u.id = mp.member_id
    and r.travel_start_time >= sysdate
    and m.id = ;
    

    और इस SQL ​​​​का उपयोग पहले की पेशकश की गई सवारी की सूची निकालने के लिए किया जा सकता है:

    Select m.first_name || ‘ ‘ || m.last_name as “Ride Owner”, c.name as “Car”, c.comfort_level as “Comfort Level”, mp.is_smoking_allowed, mp.is_pet_allowed, r.travel_start_time, r.contribution_per_head, decode(seats_offered,0,’FULL’, seats_offered || ‘ seats available‘) from ride r, member_car mc, car c, member m, member_preference mp
    where r.member_car_id = mc.id and mc.member_id = m.id 
    and mc.car_id = c.id and u.id = mp.member_id
    and r.travel_start_time < sysdate
    and m.id = ;
    

  4. सवारी के सह-यात्रियों की सूची - यह रिपोर्ट सवारी मालिक सहित सभी सह-यात्रियों के लिए उपलब्ध होगी। वे सभी अपनी पिछली या भविष्य की किसी भी सवारी के लिए सभी सह-यात्रियों की सूची तैयार कर सकते हैं।

    select first_name || ‘ ‘ || last_name 
    from member m, request req, request_status rs
    where m.id = req.requester_id and rs.id = req.request_status_id
    and rs.description = ‘APPROVED’
    and req.ride_id = 
    UNION
    select first_name || ‘ ‘ || last_name 
    from member m, member_car mc, ride r
    where m.id = mc.member_id and mc.id = r.member_car_id 
    and r.id = ;
    

अंतिम डेटा मॉडल




सुधार के बारे में क्या?

क्या हम इस मॉडल में और सुधार कर सकते हैं? हाँ हम कर सकते हैं! अभी भी कुछ क्षेत्र ऐसे हैं जिन पर ध्यान देने की आवश्यकता है।

क्या होगा यदि कोई आवर्ती सवारी अनुरोध बनाना चाहता है? मान लीजिए कि एक ड्राइवर हर सप्ताहांत में एक शहर से दूसरे शहर की यात्रा करता है, और वे इस सवारी को साझा करने के लिए हमेशा तैयार रहते हैं। पुनरावर्ती अनुरोध अधिक सुविधाजनक होगा।

कोई व्यक्ति किसी अज्ञात व्यक्ति पर कैसे भरोसा कर सकता है जो सवारी की पेशकश कर रहा है? सवारी का अनुरोध करने से पहले लोगों को दूसरों का मूल्यांकन करने में मदद करने का कोई तरीका होना चाहिए। एक व्यवहार्य तंत्र सवारी मालिकों और सह-यात्रियों के बारे में प्रतिक्रिया प्रकाशित और साझा करना है। ये विवरण निश्चित रूप से दूसरों को अजनबियों के साथ अधिक आत्मविश्वास से सवारी बुक करने में मदद करेंगे। ऐसा होने के लिए, हमारे डेटा मॉडल में कौन से परिवर्तन आवश्यक हैं?

इस मॉडल पर अपने इनपुट बेझिझक साझा करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या RID लुकअप की लुकअप की तुलना में तेज़ है?

  2. वर्गीकरण का उपयोग करते हुए फील्ड नियम लागू करना

  3. एंटिटी फ्रेमवर्क कोर में इनहेरिटेंस के साथ कैसे काम करें

  4. VMware पर CPU प्रदर्शन का समस्या निवारण

  5. कॉलम-साइड इंप्लिक्ट रूपांतरण कितने महंगे हैं?