13

我在用户界面下面得到了这个用于调度功能。

在此处输入图像描述

我需要为每个月的每个星期设置几天的医生可用时间。

我应该如何创建表来处理这个。

table structure我想我可以用以下列创建一个

  1. 医生编号
  2. 日期
  3. AvalableFrom
  4. 可用到

但这里的问题是,如果他在同一天访问两个不同的时间,我将为同一位医生添加 2 行。

我的数据库架构中是否有任何问题或任何更好的表设计将帮助我做到这一点?

使用此表,我应该能够检测到特定日期和时间是否有医生

我怎样才能最好地改进我的餐桌设计?

编辑:我正在工作的屏幕是为了帮助Hospital Staff to know when the visiting doctor is available,所以他们可以为患者预约一段时间或通知其他可用时间

4

2 回答 2

8

编辑:我误解了这个问题。

你的设计很好——在一个表中有多行反映多个偶数并没有错。您可能考虑的唯一改进是将 AvailableFrom 和 AvailableTo 设置为日期时间值,而不是时间,因此您可以删除“日期”列。这可以帮助您处理跨越午夜的可用性。

其余的答案与问题无关——它是基于对问题的误解。

首先,您需要知道医生的工作时间是什么时候;这可能很简单(每天 9-5 点),也可能很复杂(周一 9-5 点,周二不可用,周三 - 周五 9-12:30)。您可能还需要记录每天的休息时间(例如午餐),这样您就不会在午餐后安排约会;我假设不同的医生会在不同的时间休息。

接下来,您可能想要记录每天的“约会”,而不是记录“可用性”。当他们的日程表显示他们正在工作并且没有预约时,他们可以找到医生。

因此,您的架构可能是:

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

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

DoctorAppointment
----------------
DoctorID
Date
AppointmentStartTime
AppointmentEndTime
于 2013-05-21T11:51:38.120 回答
6

我会把一天分成 15 或 30 分钟的时间段,并为每位医生在每个可用时段创建一个记录。它很好地照顾了独特性。

约会可以是单个记录,它所涵盖的时间段可以引用约会记录。

因为它以与预约时间相同的方式记录非预约可用时间,所以针对这种方法的查询通常非常简单——例如,查询给定长度的可用时间段,或者计算医生的时间未用于约会,或约会的平均长度等。

该表将类似于:

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

allocation_id 引用约会或培训时间或其他分配,或者如果插槽空闲,则不引用。

日期数据类型包括 Oracle 上的时间组件。

于 2013-05-21T11:49:51.153 回答