如何在数据库中存储每周可用时间

本文关键字:每周 时间 存储 数据库 | 更新日期: 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 |