我需要创建一个表来保存 session 日程。 session 可以安排为:
每日 “曾经 X 天”。其中 X 可以介于 1 和 6 之间。 X session 后结束。其中“ session ”基本上是重复次数。
每周 它可能在一周中的哪几天发生。周一、周二等。每周可以选择多于一天。 结束日期。
每月 使用可以选择它可能发生的月份的日期(第 1 天、第 2 天等) 或者,他们可以从“第 1、2、3、4 或最后”和日期“星期一、星期二”的查找中进行选择,例如说该月的“第二个星期五”。
如何将所有这些场景存储在一个表中?
我在想:
CREATE TABLE schedule
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
StartDate DATETIME NOT NULL,
EndTime TIME NULL,
RepeatTypeID INT NOT NULL, // Daily, Weekly, Monthly, None
// For Daily
EveryDayCount INT NULL, // to handle 'every 3 days',
RepeatCount INT NULL, // How many occurances. Can be shared with different RepeatTypes
// weekly
IsMonday BIT,
IsTuesday BIT,
etc // A field per day selection. Is there a better way?
// Monthly
MonthlyDayNumber INT NULL,
MonthlyRepeatIntervalID INT, // Lookup table with '1st, 2nd, 3rd, 4th, Last'
MonthlyDayRepeatSelection INT // Lookup on Monday, Tuesday etc
)
但这似乎效率低下。是否有更好的设计模式来满足这些需求?
最佳答案
即使您有每日、每周、每月等......仍然意味着 session 将在某个特定的日子举行......对吗?
因此
CREATE TABLE schedule
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
StartDate DATETIME NOT NULL,
EndDate DATETIME NOT NULL,
RepeatTypeID INT NOT NULL, // Daily, Weekly, Monthly, None
RepeatCount INT NOT NULL,
DayOn INT NOT NULL, // can be a calculated field based on start date using DAY function
)
我相信这可以捕获您所有的日程安排选项。
关于sql - 存储计划信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36707131/