2013-05-21 2 views
5

Я получил это ниже пользовательского интерфейса для функциональности планирования.Дизайн базы данных для планирования докторантуры

enter image description here

Мне нужно настроить врачам доступное время на несколько дней на каждую неделю месяца.

Как создать таблицу для обработки этого.

Я думал, что я могу создать table structure с ниже столбцов

  1. DoctorId
  2. Дата
  3. AvalableFrom
  4. AvalilableTo

Но вот проблема, я буду добавлять 2 ряды для того же самого врача, если он посетит два разных таймингов в тот же день.

Есть ли проблема в моей схеме базы данных или какой-либо лучший дизайн таблицы поможет мне сделать это просто?

С помощью этой таблицы я должен быть в состоянии обнаружить врач доступен или нет на определенный день и время

Как лучше я могу улучшить мой дизайн таблицы?

Edit: экран, который я работаю есть, чтобы помочь Hospital Staff to know when the visiting doctor is available, так что они могут заказать назначение для пациента на время или сообщить другой доступное время

+0

возможно дубликат [Schedule Table Design] (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 минут и создание записи для каждого врача за каждый доступный слот. Он очень хорошо заботится о уникальности.

Назначение может быть одной записью, а временные интервалы, которые она охватывает, могут ссылаться на запись о назначении.

Поскольку он регистрирует время доступности без назначения точно так же, как и время встречи, запросы к этому методу, как правило, очень просты - например, для запроса доступных временных интервалов заданной длины или для расчета того, сколько от времени врача не было использовано для назначения или средней продолжительности назначений и т.д ..

таблица будет что-то вроде:

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

allocation_id ссылается на назначение или учебное время или другое распределение, или ничего, если слот свободен.

Тип данных даты включает компонент времени в Oracle.

+0

Было бы полезно понять, что яснее, если вы добавите здесь дизайн таблицы. – Billa

+0

+1 для того, чтобы назначить встречи и доступность врача таким же образом, значительно упростит дизайн приложения. –

+0

«Я бы разделил день на сегменты продолжительностью 15 или 30 минут и создавал запись для каждого врача для каждого слота, который они доступны». Эти временные интервалы используются только на одну неделю или они отображаются в фактические даты в будущем ? –

4

EDIT: Я неправильно понял вопрос.

Ваш дизайн в порядке - нет ничего плохого в том, что в таблице есть несколько строк, отражающих несколько эвенов. Единственное уточнение, которое вы могли бы подумать, это иметь доступное и доступное для значений даты и времени, а не время, поэтому вы можете удалить столбец «дата». Это поможет вам справиться с наличием в полночь.

Остальная часть ответа НЕ относится к вопросу - оно основано на непонимании проблемы.

Во-первых, вам нужно знать, когда часы работы врача; это может быть простым (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 P.M или на определенную дату. – Billa

+0

Экран, с которым я работаю, помогает «больничному персоналу узнать, когда доступен доктор», поэтому они могут заказать встречу – Billa

+0

А-а, хорошо, я обновил ответ. –

0
  1. врачи: (Эта таблица будет иметь подробную информацию о враче) пациентов: (Эта таблица будет иметь подробную информацию о пациенте)
  2. специализации: (Он определяет специализацию врача, например, стоматолога, дерматолога и т. Д.)
  3. Назначение: расписание: (Доктор создаст график назначения)
  4. booking_status (имеет d Статус ifferent для бронирования назначения)
  5. бронирований (когда пользователь книга назначения для конкретного графика и для определенной даты и времени)
-- 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-Doctors-appointment-management-system-Database-Schema-Structuret5 –