用于邮件调度的设计DB结构

时间:2013-11-07 09:31:43

标签: database db-structure

我需要设计数据库结构来邮件报告调度。 到目前为止,我提出了如下设计:

    **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规则)。 请建议!!

1 个答案:

答案 0 :(得分:0)

1。正火

作为第一步,我看到Schedule*表中的大多数列都很常见。所以你可以在ScheduleCommon表中移动它们。但是留下id列,这将是剩余表的PK和同时到ScheduleCommon表的FK 。这使它成为IS-A relation

上面的步骤实际上会为您的架构添加一个额外的表,但恕我直言,这是一个必要的规范化步骤。

2。全球化经常性规则

我在思考,您可以使用EveryHours字段和LastRun字段替换表格中的重复规则。这样,您就可以确定LastRun + EveryHours是否已经过去,并且作业需要再次运行(并更新LastRun字段)。

以上将删除Schedule*表,因为这些字段很常见,可以移动到ScheduleCommon表。这让你只有两张桌子。

3。使其成为1:1

如果每个报告计划只有一个重复计划,则两个表的关系变为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。