我正在尝试使用以下表构建一个约会应用程序:Doctors
、Schedules
。我很难弄清楚设计Schedules
表最方便的方法是什么。每个doctor
都有自己的schedule
,所以我想我为day
、doctor
的工作以及start
和end
的日期创建一个字段,这样我就可以在这个范围内进行数学运算。
如果医生正在度假或参加会议,我不会在申请中考虑。但我确实需要设定一个在这个范围内的午餐时间。
此外,如果他一周只工作三天,我该如何处理他休息的日子?
create_table "schedules", :force => true do |t|
t.string "day"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "doctor_id"
t.time "start_time"
t.time "end_time"
end
我会在两个表中都有每个医生的ID,并有天数的数值。
结构应如下所示;
Doctors Table
---------------------------------------------
Doctor_ID | Doctor_name | Practice | etc
---------------------------------------------
Schedules
-----------------------------------------------------------
Day_ID | Time (hour,minute,second) | Doctor_ID | Istaken
-----------------------------------------------------------
Istake将是一个bool变量,它会告诉你一天中的时间是否被占用。你需要做的是,如果你不想每次都添加新的变量,你需要为每天和每个医生创建24个表格。
或者你能做的是;
将24小时添加为列,如hourone|hour2等,并将其列为0或1。通过这种方式,您将免于每次添加新记录。
如果您以这种方式创建它,系统将更容易搜索表,因为您将在Doctor_ID 上加入整数值
首先,您需要决定时间表中最小的部分。常识是"小时",或者你可以随心所欲地使用"一天"或"半天"。一旦定义,就很难改变。
时间表将包含以下主要元素:
id
#唯一id
start_time
#这一点非常重要。它显示每个工作小时的开始时间,以便从日历中查询。最好使用十六进制数据时间戳。
doctor_id
#占用这一小时的医生。如果未被占用,则为空白。注意,你可能有两个医生占用同一个小时。因此,start_time
或doctor_id
都不是唯一的,但它们结合在一起是唯一的。
patient_id
#订购这一小时的患者。
description
#本说明
现在是用例:
在您的日历中,对于给定的一天,您会显示8个小时的可用时间。查询数据库以查找是否有时间表在每个小时的开始时间,如果存在,则标记此小时并链接到时间表。
请注意,在这种情况下,患者可能会连续几个小时要求医生诊治。例如3小时,在这种情况下,您需要向时间表添加三条记录,只有id
和start_time
有差异。
也可能有两名医生在同一时间安排的情况。它很容易显示为上述方案。
这种安排应该奏效。希望能有所帮助。