假設你想要一個允許用戶與醫生預約約會的表格結構(而不是幫助醫生管理他們的時間表,因爲這個問題似乎暗示了兩者在不同時間),我們不想設計一個表格告訴用戶醫生正在做什麼。用戶應該只關心醫生是否可用 - 爲什麼他們需要知道醫生正在度假?只要看醫生一兩個星期就沒有空缺就足夠了。下面顯示了一個簡化的表格結構:醫生姓名參考表,其中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,以使它們不出現在應用程序中,以便用戶不能選擇這些時間)。