如何在数据库中存储每周可用时间
本文关键字:每周 时间 存储 数据库 | 更新日期: 2023-09-27 17:59:54
我正在为医生办公室编程一个预约系统。我需要存储每周可用的医生。类似这样的东西:-
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排吗。有人能给我指一些简单的模式吗?或者有更好的方法吗。
我过去使用的一个模型是这样的:
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 |