C# SQL Repeative事件列,并在C中使用相同的

C# SQL Repeative事件列,并在C中使用相同的,c#,sql,sql-server,sql-server-2008,database-design,C#,Sql,Sql Server,Sql Server 2008,Database Design,处理预订管理应用程序。它允许用户与医生预约。然而,医生也可以安排他们的活动,如午餐探视时间和假期 医生可以根据表中设置的频率每日/每周/每月阻止活动重复 提及 比如说 2013年8月2日至2013年8月31日,午餐时间为下午2点至3点 2013年8月14日至2013年8月16日假期 2013年8月2日至203年8月31日,探视时间为上午10时至下午2时 他们也可以在下个月重复同样的活动 如何创建表结构以更有效地维护这些数据 这是我的方法 从DateTime到DateTime频率的DoctorId

处理预订管理应用程序。它允许用户与医生预约。然而,医生也可以安排他们的活动,如午餐探视时间和假期

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

提及

比如说

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

2013年8月14日至2013年8月16日假期

2013年8月2日至203年8月31日,探视时间为上午10时至下午2时

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

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

这是我的方法

从DateTime到DateTime频率的DoctorId活动


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

假设您需要一个允许用户预约医生的表结构,而不是帮助医生管理他们的日程,这个问题似乎在不同的时候暗示了这两种情况,我们不想设计一个表来告诉用户医生在做什么。用户应该只关心医生是否有空-为什么他们需要知道医生正在休假?仅仅看一两周没有空缺的医生就足够了。下面显示了该表的简化表结构:医生姓名的参考表,其中DoctorID是显示医生姓名和他/她的可用时间的联接

为了解决用户预约的问题,用户将使用可用的时间去看医生,时间将以日期时间格式安排,以便他们可以在适当的时间与医生预约。如果医生不在,则不会在特定日期为他们显示时间,这意味着用户可以选择他们想要的时间段-如下面的简单示例所示:

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
。另一方面,如果您想为医生构建一个应用程序来设置他们自己的时间表,那么可以采用类似的方式,医生输入他们的可用时间,然后,如上面的简单结构所示,用户只有在选择时间时才能看到这些可用时间,Available列变为0-表示它不会显示在C应用程序中。例如:

UPDATE Appointment
SET Available = 0
WHERE AppointmentHour = @UserSelection --OR: @DoctorVacation/@DoctorLunch/@DoctorOther
将是SQL语句的一个示例,当用户现在选择一个时间,其他用户无法选择它。对于医生来说,可能有一个默认时间,比如上午8点到下午5点,假设医生有空,除非他们决定他们没有空。在这种情况下,这些时间将从预约表中删除,或者也可以设置为0,这样他们就不会出现在应用程序上,用户就无法选择这些时间