我正在为医生办公室编制预约系统。我需要每周存储医生。这样的事情: -
DoctorID | 10AM | 11AM | 12AM | 1PM | 2PM | 3PM | 4PM |
------------------------------------------------------------------
[MON] 5477J | 1 | 0 | AppointID | 1 | 1 | AppointID | 0 |
------------------------------------------------------------------
[TUE] 5477J | 0 | 1 | AppointID | 1 | 1 | AppointID | 0 |
------------------------------------------------------------------
我将时区存储为numeric
1 implies **avaialble**
0 implies **will not be in office**
,如果预约了预约,则时间段将被AppointmentID
替换。
每天的可用性会有所不同。我的问题是如何存储每天的可用性?我应该每周安排5行。有人能指出一些简单的架构,或者有更好的方法来做到这一点。
答案 0 :(得分:3)
我过去使用的一个模型是这样的:
TABLE [AppointmentBlock]
- [DoctorID] INT
- [StartTime] DATETIME
- [EndTime] DATETIME
- [IsAvailable] BIT
- [IsRecurring] BIT
- [AppointmentID] INT
如果[IsRecurring] = 1
,这将表示每周在同一时间重复出现的块,您应该假设开始/结束时间是从一周开始计算的偏移量。
如果[IsRecurring] = 0
,这只是一次性发生,开始/结束时间是绝对的。
因此,医生日程表中的每个区块都会被计算在内,即使它不是每小时都没有。需要在此基础上分层一些严格的业务逻辑,以确保不会创建重叠(除非出于某种原因,您希望允许这样做)。
为了使您的示例适合此模型,您将拥有以下内容:
DoctorID | Start | End | IsAvailable | IsRecurring | AppointmentId |
----------------------------------------------------------------------------
5477J | 10AM Mon | 11AM Mon | 1 | 1 | NULL |
5477J | 11AM Mon | 12PM Mon | 0 | 1 | NULL |
5477J | 12PM Mon | 1PM Mon | 0 | 1 | AppointID |
5477J | 1PM Mon | 3PM Mon | 1 | 1 | NULL |
5477J | 3PM Mon | 4PM Mon | 0 | 1 | AppointID |
5477J | 4PM Mon | 5PM Mon | 0 | 1 | NULL |
5477J | 10AM Tue | 11AM Tue | 0 | 1 | NULL |
5477J | 11AM Tue | 12PM Tue | 1 | 1 | NULL |
5477J | 12PM Tue | 1PM Tue | 0 | 1 | AppointID |
5477J | 1PM Tue | 3PM Tue | 1 | 1 | NULL |
5477J | 3PM Tue | 4PM Tue | 0 | 1 | AppointID |
5477J | 4PM Tue | 5PM Tue | 0 | 1 | NULL |