0

致力于预订管理应用程序。它允许用户与医生预约。但是,医生也可以安排他们的活动Lunch Visiting Hours,例如Vocation

医生可以根据表中设置的频率(每天/每周/每月)阻止重复活动

参考如何为谷歌日历设计表格结构,如重复功能?

例如

2013 年 8 月 2 日至 2013 年 8 月 31 日,午餐时间为下午 2 点至下午 3 点

从 2013 年 8 月 14 日到 2013 年 8 月 16 日

从 2013 年 8 月 2 日到 203 年 8 月 31 日参观时间是上午 10 点到下午 2 点

他们也可以在下个月重复相同的活动。

我如何创建表结构以更有效地维护这些数据。

这是我的方法

DoctorId Activity FromDateTime ToDateTime Frequency

将频率列格式存储在数据库中以便在 C# 代码中轻松访问以基于每周/每月为不同日期生成更多相同记录的好方法是什么?

4

1 回答 1

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 展示了这个例子。另一方面,如果你想为医生建立一个应用程序来设置他们自己的时间表,这可以以类似的方式工作,医生将输入他们将可用的时间,然后,如上面的简单结构所示,用户只会看到那些可用时间(当他们选择时间时,该Available列变为 0 - 意味着它不会显示在 C# 应用程序中)。例如:

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

将是用户选择时间时的 SQL 语句示例(现在,其他用户无法选择它)。对于医生来说,可能有一个默认时间,比如上午 8 点到下午 5 点,假定医生有空,除非他们决定不去(在这种情况下,这些时间将从预约表中删除,或者它们也可以设置为 0,这样它们就不会出现在应用程序上,这样用户就无法选择这些时间)。

于 2013-08-02T21:17:19.077 回答