1

我正在为医生办公室编写预约系统。我需要存储每周可用的医生。像这样的东西: -

        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 行吗?有人可以指点我一些简单的模式还是有更好的方法来做到这一点。

4

1 回答 1

4

我过去使用的一个模型是这样的:

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 |
于 2013-02-19T00:23:26.880 回答