2013-02-19 148 views
0

我正在为医生办公室编程预约系统。我需要存储每周可用的医生。事情是这样的: -如何在数据库中存储每周时间可用性?

 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 | 
     ------------------------------------------------------------------ 

我存储的时隙作为numeric1 implies **avaialble**0 implies **will not be in office**,如果有则预订的预约时隙将AppointmentID被替换。

可用性每天都会有所不同。我的问题是如何为每天的可用性存储?我应该每周有5行吗?有人能指点我一些简单的模式,还是有更好的方法来做到这一点。我已经在过去使用

+0

您必须正常化您的数据库。 – 2013-02-19 00:18:30

+0

假设您只想跟踪每小时和每小时的可用性是否安全?你将永远不会有这样的情况,从3点30分到4点15分有空吗? – 2013-02-19 00:23:53

+0

@AbeMiessler:是的,它将永远是一小时 – DarknessBeginsHere 2013-02-19 00:27:08

回答

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 | 
+0

+1,这看起来好像比你想的要好得多。它也将允许您安排不完全在一小时内的约会。 – 2013-02-19 00:31:50

+0

不可否认,由于开始/结束时间的全部含义取决于'IsRecurring'标志,因此这个标准略有不规范。我想,替代方法是为循环和单个出现块创建一个单独的表。 – 2013-02-19 00:36:03

+0

但我不在寻找如何存储预约...我需要存储医生的每周可用性..对于MON,TUE,WED .... – DarknessBeginsHere 2013-02-19 00:37:38

相关问题