是的,我已经通过以下方式与我的同事解决了这个问题:
CREATE TABLE [dbo].[Schedule](
[ID] [int] IDENTITY(1,1) NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NULL
)
CREATE TABLE [dbo].[ScheduleInterval](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ScheduleID] [int] NOT NULL,
[ScheduleIntervalUnitID] [int] NOT NULL,
[Interval] [smallint] NOT NULL
)
CREATE TABLE [dbo].[ScheduleIntervalUnit](
[ID] [int] NOT NULL,
[Name] [varchar](50) NULL
)
INSERT INTO ScheduleIntervalUnit (ID, Name)
SELECT '1' AS [ID], 'Day' AS [Name] UNION ALL
SELECT '2' AS [ID], 'Week' AS [Name] UNION ALL
SELECT '3' AS [ID], 'Month' AS [Name]
时间表跨越一段时间,并且在该时间长度内发生间隔。调度间隔单位确定间隔的长度(天,如“每隔”(2)或“每隔三分之一”(3)等),周(一周中的某一天,如星期一、星期二等),以及月(日历年)。使用它,您可以对数据库进行查询和逻辑以检索时间表。
如果您的日程安排需要更好的解决方案 - 低至几小时、几分钟、几秒 - 请查看cron
. 我最初是沿着这条路线开始的,但发现上面的方法更加简单和可维护。
单个日期/时间跨度 - 例如从 9 月 9 日开始到 11 月 4 日结束的定义的学期 - 可以包含多个时间表(因此艺术课每周一,物理课“每隔一天” - 但你需要做考虑假期和周末的更多工作!)。