2013-05-21 14 views
5

मुझे कार्यक्षमता शेड्यूलिंग के लिए यह नीचे यूजर इंटरफेस मिला है।डॉक्टर शेड्यूलिंग डेटाबेस डिज़ाइन

enter image description here

मैं सेटअप करने के लिए डॉक्टरों माह के प्रत्येक सप्ताह के लिए कुछ दिनों के लिए उपलब्ध समय की जरूरत है।

मुझे इसे संभालने के लिए टेबल कैसे बनाना चाहिए।

मैंने सोचा था कि मैं नीचे कॉलम

  1. DoctorId
  2. दिनांक
  3. AvalableFrom
  4. AvalilableTo

लेकिन यहाँ समस्या मैं 2 जोड़ेंगे है के साथ एक table structure बना सकते हैं उसी डॉक्टर के लिए पंक्तियां यदि वह उसी दिन दो अलग-अलग समयों पर जाती है।

क्या मेरे डेटाबेस स्कीमा में कोई समस्या है या कोई बेहतर टेबल डिज़ाइन मुझे यह आसान करने में मदद करेगा?

इस तालिका के साथ मैं पता लगाने के लिए एक डॉक्टर को विशेष दिन और समय

कैसे सबसे अच्छा मैं अपने टेबल डिजाइन में सुधार कर सकते के लिए उपलब्ध है या नहीं दे पाएगा?

संपादित करें: स्क्रीन जो मैं काम कर रहा हूँ, मदद करने के लिए Hospital Staff to know when the visiting doctor is available, तो वे एक समय के लिए रोगी के लिए नियुक्ति बुक या अन्य उपलब्ध समय सूचित कर सकते हैं

+0

[अनुसूची तालिका डिजाइन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/16497386/schedule-table-design) – Pondlife

+1

संदर्भ के लिए: http://www.vertabelo.com/blog/technical-articles/a-database-model-to-manage-appointments-and-organize -schedules –

उत्तर

4

मैं में दिन विभाजित के साथ जाना होगा 15 या 30 मिनट के खंड, और प्रत्येक स्लॉट के लिए प्रत्येक डॉक्टर के लिए रिकॉर्ड बनाते हैं जो वे उपलब्ध हैं। यह विशिष्टता का ख्याल रखता है।

एक नियुक्ति एक रिकॉर्ड हो सकती है और इसमें शामिल समय स्लॉट नियुक्ति रिकॉर्ड का संदर्भ दे सकते हैं।

क्योंकि यह नियुक्ति समय के समान ही अपॉइंटमेंट उपलब्धता समय रिकॉर्ड करता है, इस विधि के खिलाफ प्रश्न आमतौर पर बहुत ही सरल होते हैं - उदाहरण के लिए, किसी दिए गए लंबाई के उपलब्ध समय स्लॉट के लिए पूछताछ करने के लिए, या गणना करने के लिए allocation_id एक नियुक्ति या प्रशिक्षण के समय या अन्य आवंटन का संदर्भ

create table staff_time(
    staff_id integer, 
    time_slot date, 
    allocation_id) 

, या: के एक डॉक्टर के समय नियुक्तियों या अपॉइंटमेंट की औसत लंबाई, आदि के लिए इस्तेमाल नहीं किया गया था ..

तालिका कुछ जैसा होगा स्लॉट मुक्त होने पर कुछ नहीं।

दिनांक डेटा प्रकार में ओरेकल पर एक समय घटक शामिल है।

+0

यदि आप यहां एक टेबल डिज़ाइन प्रदान करते हैं, तो यह अधिक स्पष्ट समझने में मेरे लिए उपयोगी होगा। नियुक्तियों और डॉक्टर की उपलब्धता के लिए – Billa

+0

+1 उसी तरह प्रदर्शित होता है - एप्लिकेशन डिज़ाइन को अपेक्षाकृत आसान बना देगा। –

+0

"मैं दिन को 15 या 30 मिनट के खंडों में विभाजित करने के साथ जाऊंगा, और प्रत्येक स्लॉट के लिए प्रत्येक डॉक्टर के लिए रिकॉर्ड बनाउंगा जो वे उपलब्ध हैं" क्या ये समय केवल एक सप्ताह के लिए हैं, या वे भविष्य में वास्तविक तिथियों में मैप किए गए हैं ? –

4

संपादित करें: मैंने प्रश्न को गलत समझा।

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

बाकी का उत्तर प्रश्न से संबंधित नहीं है - यह इस मुद्दे की गलतफहमी पर आधारित है।

सबसे पहले, आपको पता होना चाहिए कि डॉक्टर के कामकाजी घंटे कब होते हैं; यह सरल हो सकता है (9 - 5 हर दिन), या जटिल (9-5 सोमवार, उपलब्ध मंगलवार, 9-12: 30 बुधवार - शुक्रवार)। आपको ब्रेक टाइम्स रिकॉर्ड करने की आवश्यकता हो सकती है - उदाहरण के लिए, दोपहर का भोजन - प्रत्येक दिन, इसलिए आप दोपहर के भोजन पर नियुक्ति निर्धारित नहीं करते हैं; मुझे लगता है कि विभिन्न डॉक्टर अलग-अलग समय पर अपने ब्रेक ले लेंगे।

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

तो, अपने स्कीमा हो सकता है:

Doctors 
-------- 
DoctorID 
.... 

DoctorSchedule 
------------ 
DoctorID 
DayOfWeek 
StartTime 
BreakStartTime 
BreakEndTime 
EndTime 

DoctorAppointment 
---------------- 
DoctorID 
Date 
AppointmentStartTime 
AppointmentEndTime 
+0

महत्वपूर्ण बात यह है कि कई डॉक्टरों का दौरा किया जा रहा है। वे दिन में केवल कुछ घंटों का दौरा करते हैं। जो हर हफ्ते/महीने के लिए बदला जा सकता है। मेरा मतलब है कि कभी-कभी वे एक सप्ताह में '3 दिन' और '10 एएम से '12 एएम' तक जाते हैं। उस स्थिति में मुझे पता होना चाहिए कि डॉक्टर 3 पीएम या किसी निश्चित तारीख पर उपलब्ध नहीं है। – Billa

+0

जिस स्क्रीन पर मैं काम कर रहा हूं वह है 'अस्पताल के कर्मचारियों को यह जानने के लिए कि जब विज़िटिंग डॉक्टर उपलब्ध है', ताकि वे नियुक्ति बुक कर सकें – Billa

+0

आह - ठीक है, मैंने जवाब अपडेट किया है। –

0
  1. डॉक्टरों: (इस तालिका में डॉक्टर के बारे में विवरण होगा) रोगियों:
  2. विशेषज्ञता (इस तालिका में रोगी के बारे में विवरण होगा): (यह डॉक्टर के विशेषज्ञ को परिभाषित करता है जैसे दंत चिकित्सक, त्वचा विशेषज्ञ आदि)
  3. नियुक्ति_श्रेणी: (डॉक्टर नियुक्ति अनुसूची तैयार करेगा)
  4. booking_स्टैटस (क्या डी है एक नियुक्ति)
  5. बुकिंग (बुकिंग के लिए ifferent स्थिति जब कोई उपयोगकर्ता किताबें एक विशेष अनुसूची के लिए और एक विशेष तिथि और समय) के लिए एक नियुक्ति
-- Table structure for table 'appointment_schedule' 
CREATE TABLE IF NOT EXISTS 'appointment_schedule' (
    'id' int(11) NOT NULL AUTO_INCREMENT, 
    'doctors_id' int(11) NOT NULL, 
    'working_days' varchar(50) NOT NULL, 
    'morning_time_start' time DEFAULT NULL, 
    'morning_time_end' time DEFAULT NULL, 
    'morning_tokens' int(11) NOT NULL, 
    'afternoon_time_start' time DEFAULT NULL, 
    'afternoon_time_end' time DEFAULT NULL, 
    'afternoon_tokens' int(11) NOT NULL, 
    'evening_time_start' time DEFAULT NULL, 
    'evening_time_end' time DEFAULT NULL, 
    'evening_tokens' int(11) NOT NULL, 
    PRIMARY KEY ('id') 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 
-- -------------------------------------------------------- 
-- Table structure for table 'bookings' 
CREATE TABLE IF NOT EXISTS 'bookings' (
    'id' int(11) NOT NULL AUTO_INCREMENT, 
    'doctors_id' int(11) NOT NULL, 
    'appointment_schedule_id' int(11) NOT NULL, 
    'patients_id' int(11) NOT NULL, 
    'diseases_description' text NOT NULL, 
    'datetime_start' datetime NOT NULL, 
    'datetime_end' datetime NOT NULL, 
    'status_id' int(11) NOT NULL DEFAULT '1', 
    PRIMARY KEY ('id') 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 
-- -------------------------------------------------------- 
-- Table structure for table 'booking_status' 
CREATE TABLE IF NOT EXISTS 'booking_status' (
    'id' int(11) NOT NULL AUTO_INCREMENT, 
    'name' varchar(25) NOT NULL, 
    PRIMARY KEY ('id') 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

-- Dumping data for table 'booking_status'  
INSERT INTO 'booking_status' ('id', 'name') VALUES 
(1, 'Pending for Approval'), 
(2, 'Approved & Booked'), 
(3, 'Cancelled by User'), 
(4, 'Visited'), 
(5, 'User failed to Visit'); 
-- -------------------------------------------------------- 
-- Table structure for table 'doctors' 
CREATE TABLE IF NOT EXISTS 'doctors' (
    'id' int(11) NOT NULL AUTO_INCREMENT, 
    'name' varchar(50) NOT NULL, 
    'specialization_id' int(11) NOT NULL, 
    'clinic_name' varchar(50) NOT NULL, 
    'address' varchar(1000) NOT NULL, 
    'qualification' varchar(50) NOT NULL, 
    'rating' int(11) NOT NULL, 
    PRIMARY KEY ('id') 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 
-- -------------------------------------------------------- 
-- Table structure for table 'patients' 
CREATE TABLE IF NOT EXISTS 'patients' (
    'id' int(11) NOT NULL AUTO_INCREMENT, 
    'first_name' varchar(50) NOT NULL, 
    'last_name' varchar(50) NOT NULL, 
    'address' varchar(500) NOT NULL, 
    'contact' varchar(100) NOT NULL, 
    PRIMARY KEY ('id') 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

-- -------------------------------------------------------- 
-- Table structure for table 'specialization' 
CREATE TABLE IF NOT EXISTS 'specialization' (
    'id' int(11) NOT NULL AUTO_INCREMENT, 
    'name' varchar(100) NOT NULL, 
    PRIMARY KEY ('id') 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 
+1

क्रेडिट के बिना यहां से लिया गया उत्तर: http://forums.mcapoint.com/Thread-MySQL- डॉक्टर- नियुक्ति- प्रबंधन- सिस्टम- डाटाबेस- स्केमा- संरचना 5 –

संबंधित मुद्दे