我需要设计数据库结构来邮件报告调度。 到目前为止,我提出了如下设计:
**ReportSchedule**
- ScheduleId
- ReportName
- Subject
- To
- UserId
- Body
- Remarks
**ScheduleDaily**
- Id
- ScheduleId
- StartDate
- EndDate
- SendTime
**ScheduleWeekly**
- Id
- ScheduleId
- StartDate
- EndDate
- SendTime
- DayOfWeek
**ScheduleMonthly**
- Id
- ScheduleId
- StartDate
- EndDate
- SendTime
- MonthOfYear
- DayOfWeek
..................
我对这个设计不满意,我需要单表来涵盖所有参数(可能包括reccurence规则)。 请建议!!
答案 0 :(得分:0)
作为第一步,我看到Schedule*
表中的大多数列都很常见。所以你可以在ScheduleCommon
表中移动它们。但是留下id
列,这将是剩余表的PK和同时到ScheduleCommon
表的FK 。这使它成为IS-A relation。
上面的步骤实际上会为您的架构添加一个额外的表,但恕我直言,这是一个必要的规范化步骤。
我在思考,您可以使用EveryHours
字段和LastRun
字段替换表格中的重复规则。这样,您就可以确定LastRun
+ EveryHours
是否已经过去,并且作业需要再次运行(并更新LastRun
字段)。
以上将删除Schedule*
表,因为这些字段很常见,可以移动到ScheduleCommon
表。这让你只有两张桌子。
如果每个报告计划只有一个重复计划,则两个表的关系变为1:1,而另一个表可以吸收另一个表。但我不认为情况就是这样。让我们来看一下您在评论中提供的示例:"每月星期一,星期二,1月1日下午3点发送邮件" 。这不是一个时间表,但实际上两个:
ScheduleId StartDate EndDate EveryHours
ABC 2014-01-06 3:00PM 2014-02-01 3:00PM 192
ABC 2014-01-07 3:00PM 2014-02-01 3:00PM 192
如您所见,您必须为同一任务维护多个计划,这使得关系为1:N。