2013-08-02 16 views
0

在預訂管理應用程序上工作。它允許用戶與醫生預約預約。但是,醫生也可以安排他們的活動,如LunchVisiting HoursVocationSQL Repeative Event列和在C#中使用相同#

作爲重複基於頻率(每日/每週/每月)在表

簡稱How to design table structure for Google Calendar like Repeat feature?

例如

從2 - 8 - 2013設置爲31-Aug-醫生可以阻斷活性2013年,午餐時間是下午2點到下午3點

從08月14日2013年16 - 8 - 2013職業

從2 - 8 - 2013噸o 31-Aug-203訪問時間爲上午10點至下午2點

此外,他們可以在下個月重複相同的活動。

我如何創建表結構來更有效地維護這些數據。

這裏是我的方法

DoctorIdActivityFromDateTimeToDateTimeFrequency

什麼會存儲在數據庫中的頻率列格式,以偉大的方式,在C#代碼輕鬆地訪問,以產生更多的對同一記錄編號基於每週/每月的不同日期?

回答

0

假設你想要一個允許用戶與醫生預約約會的表格結構(而不​​是幫助醫生管理他們的時間表,因爲這個問題似乎暗示了兩者在不同時間),我們不想設計一個表格告訴用戶醫生正在做什麼。用戶應該只關心醫生是否可用 - 爲什麼他們需要知道醫生正在度假?只要看醫生一兩個星期就沒有空缺就足夠了。下面顯示了一個簡化的表格結構:醫生姓名參考表,其中DoctorID將作爲顯示醫生姓名和他/她可用時間的加入。

爲了解決用戶預約預約的問題,用戶將看到具有可用時間和時間的醫生將被安排在DATETIME格式中,以便他們可以在適當的時間與醫生一起安排時間。如果醫生沒有,一時間將不會出現爲他們在特定日期(即用戶選擇他們想要的時間塊 - 如在下面的簡單示例):

CREATE TABLE Doctor(
    DoctorID INT, 
    DoctorName VARCHAR(250) 
) 

CREATE TABLE Appointment(
    DoctorID INT, 
    AppointmentHour DATETIME, 
    Available BIT DEFAULT 1 
) 

INSERT INTO Doctor 
VALUES (1,'John Doe') 
    , (2,'Jane Doe') 

INSERT INTO Appointment (DoctorID, AppointmentHour) 
VALUES (1,'2013-01-01 10:00:00.000') 
    , (1,'2013-01-01 11:00:00.000') 
    , (1, '2013-01-01 13:00:00.000') 
    , (1, '2013-01-01 14:00:00.000') 
    , (2, '2013-01-01 15:00:00.000') 

SELECT d.DoctorName 
    , a.AppointmentHour 
    , a.Available 
FROM Appointment a 
    INNER JOIN Doctor d ON a.DoctorID = d.DoctorID 

DROP TABLE Doctor 
DROP TABLE Appointment 

SQLFiddle showing this example。另一方面,如果你想爲醫生建立一個自己的日程安排申請表,那麼醫生可以進入他們可以使用的時間的類似方式工作,然後,如上面的簡單結構所示,用戶只會看到這些可用時間(當他們選擇時間時,Available列將變爲0--這意味着它不會在C#應用程序中顯示)。例如:當用戶選擇的時間(現在,其他用戶無法選擇它)

UPDATE Appointment 
SET Available = 0 
WHERE AppointmentHour = @UserSelection --OR: @DoctorVacation/@DoctorLunch/@DoctorOther 

將SQL語句的一個例子。對於醫生來說,可能會有一個默認時間,例如上午8點到下午5點假定醫生可用,除非他們認爲他們不會(在這種情況下,這些時間將從預約表中刪除,或者也可以將它們設置爲0,以使它們不出現在應用程序中,以便用戶不能選擇這些時間)。

相關問題