Django कैलेंडर मॉडल

Oct 26 2020

मैं Django और Django रेस्ट फ्रेमवर्क के साथ एक डॉक्टर नियुक्ति ऐप बना रहा हूं। डॉक्टर के कैलेंडर में नियुक्तियों को जोड़ने के लिए ऐप में सचिवों के लिए कार्यक्षमता होगी, और प्रत्येक डॉक्टर के पास एक से अधिक क्लिनिक (और कई सचिव) हो सकते हैं।

मैंने इस Calendarमॉडल को डॉक्टर की उपलब्धता की जानकारी संग्रहीत करने के लिए बनाया था , जिसे मूल रूप से सूचित करने की आवश्यकता है:

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

क्या यह करने का सबसे इष्टतम तरीका है?

class Calendar(models.Model):
    doctor = models.ForeignKey(Doctor, on_delete=models.CASCADE, related_name="appointments")
    clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE, related_name="appointments")
    monday_start =  models.TimeField()
    monday_end =  models.TimeField()
    monday_break_start =  models.TimeField()
    monday_break_end =  models.TimeField()
    # continues for every single day of the week

जवाब

3 Najiva Oct 29 2020 at 01:41

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

क्या होगा यदि उदाहरण के लिए एक डॉक्टर सप्ताह में केवल एक दिन काम करता है। अधिकांश स्तंभ तब खाली हो जाते थे। या अगर कोई डॉक्टर केवल सुबह काम कर सकता है? फिर किसी भी कैलेंडर फ़ील्ड में कोई ब्रेक_स्टार्ट या अंत नहीं होगा। क्या होगा, उदाहरण के लिए, डॉक्टर हर दूसरे सप्ताह काम करता है? तब आपके पास इस जानकारी को संग्रहीत करने का एक आसान तरीका नहीं होगा। इसके अलावा बेमानी जानकारी भी होगी। यदि आपके पास प्रत्येक डॉक्टर सुबह 8:00 बजे से शाम 4:00 बजे तक काम करेगा, तो आपके पास यह डेटा अनावश्यक रूप से संग्रहीत होगा। बहुत कम जगह की आवश्यकता होती है, यदि आप इस तरह की जानकारी को किसी प्रकार के अवधि रिकॉर्ड के संबंध में संग्रहीत कर सकते हैं।

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

मसौदा कुछ इस तरह दिख सकता है:

class Calendar(models.Model):
    doctor = models.ForeignKey(Doctor, on_delete=models.CASCADE)
    clinic = models.ForeignKey(Clinic, on_delete=models.CASCADE)

class CalendarDay(models.Model):
    date = model.DateField()
    calendar = models.ForeignKey(Calendar, on_delete=models.CASCADE)

class TimeInterval(models.Model):
    activity = models.Integer(choices = [(1, 'Working'), (2,'Lunch Break'), (3, 'Afternoon Break') ...])
    start = models.TimeField()
    end = models.TimeField()
    calendar_day = models.ForeignKey(CalendarDay, on_delete=models.CASCADE)

डेटा अखंडता सुनिश्चित करने के लिए , तो आप CalendarDay तालिका में दिनांक और कैलेंडर स्तंभों के संयोजन पर एक अद्वितीय बाधा जोड़ सकते हैं। इस तरह से प्रत्येक कैलेंडर में कैलेंडरडे तालिका में विशेष तिथि के लिए केवल एक रिकॉर्ड हो सकता है।