SQL重复事件列,并在C#中使用该列

本文关键字:事件 SQL 并在 | 更新日期: 2023-09-27 18:25:54

正在处理预订管理应用程序。它允许用户预约医生。然而,医生也可以像LunchVisiting HoursVocation一样安排他们的活动。

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

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

例如

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

从2013年8月14日至2013年8月经

2013年8月2日至2003年8月31日访问时间为上午10时至下午2时

他们还可以在下个月重复同样的活动。

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

这是我的方法

DoctorId Activity FromDateTime ToDateTime Frequency

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

SQL重复事件列,并在C#中使用该列

假设您想要一个允许用户与医生预约的表结构(而不是帮助医生管理他们的时间表,因为这个问题似乎意味着在不同的时间两者都有),我们不想设计一个告诉用户医生在做什么的表。用户应该只关心医生是否有空——为什么他们需要知道医生在度假?仅仅看医生一两周内没有空位就足够了。下面显示了一个简化的表格结构:医生姓名的参考表格,其中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,这样他们就不会出现在应用程序上,这样用户就无法选择这些时间)。