2013-02-19 150 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

相關問題