sql - 存储计划信息

标签 sql sql-server database database-design sql-server-2014

我需要创建一个表来保存 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/

相关文章:

mysql - 我们如何控制表中字段的动态排序?

mysql - 任何人都可以帮助我提高查询效率吗?

SQL 查找具有下一个最佳时间戳匹配的行对

sql - EF Core 检查约束

sql - T-SQL - 将日期时间转换为未分隔的 ISO 值

sql - 批量插入时 SCOPE_IDENTITY 的值

c# - 将查询包含到 C# 代码中的最佳方法

java - 出现错误 "Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements"

c# - 通过连接字符串连接到远程数据库

ios - 对每种类型的提取使用单独的 NSFetchedResultsController