Bil*_*lla 8 database sql-server oracle database-design
我在下面的用户界面中有调度功能.

我需要为每个月的每个星期安排医生可用时间.
我该如何创建表来处理这个问题.
我以为我可以table structure使用以下列创建一个
但问题是,如果他在同一天访问两个不同的时间,我将为同一位医生增加2行.
在我的数据库架构中是否有任何问题或任何更好的表设计将帮助我这么简单?
使用此表,我应该能够检测到特定日期和时间的医生是否可用
如何才能最好地改进我的桌面设计?
编辑:我正在工作的屏幕是帮助Hospital Staff to know when the visiting doctor is available,所以他们可以为患者预约一段时间或通知其他可用时间
我会将一天分成 15 或 30 分钟的部分,并为每个医生的每个可用时段创建一个记录。它很好地照顾了独特性。
约会可以是单个记录,它涵盖的时间段可以引用约会记录。
由于它以与预约时间相同的方式记录非预约可用时间,因此针对此方法的查询通常非常简单——例如,查询给定长度的可用时间段,或计算医生的时间未用于约会,或约会的平均长度等。
该表将是这样的:
create table staff_time(
staff_id integer,
time_slot date,
allocation_id)
Run Code Online (Sandbox Code Playgroud)
allocation_id 引用约会或培训时间或其他分配,如果空档空闲则不引用。
日期数据类型包括 Oracle 上的时间组件。
编辑:我误解了这个问题。
您的设计很好-表格中有多行反映了多个偶数没有错。您可能会考虑的唯一改进是将AvailableFrom和AvailableTo设为日期时间值,而不是时间,因此您可以删除“日期”列。这可以帮助您处理整个午夜的可用性。
答案的其余部分与问题无关-它是基于对该问题的误解。
首先,您需要知道医生的工作时间是什么时候;这可能很简单(每天9-5),也可能很复杂(星期一9-5,星期二不可用,星期三-星期五9-12:30)。您可能还需要记录休息时间,例如每天的午餐,因此您不必安排午餐时间。我假设不同的医生会在不同的时间休息。
接下来,您可能不想记录“可用性”,而是要记录每天的“约会”。当他们的日程安排表明他们正在工作时,以及没有预定的约会时,就会有医生在场。
因此,您的架构可能是:
Doctors
--------
DoctorID
....
DoctorSchedule
------------
DoctorID
DayOfWeek
StartTime
BreakStartTime
BreakEndTime
EndTime
DoctorAppointment
----------------
DoctorID
Date
AppointmentStartTime
AppointmentEndTime
Run Code Online (Sandbox Code Playgroud)