AlertRules / AlertAction数据库设计

时间:2011-08-18 05:48:52

标签: database action rules

我有一个程序可以迭代一组消息,将每个消息与一组规则进行比较,如果它通过,执行一个动作,如发送电子邮件,发送短信或将消息写入目录

这个问题是关于设计一个数据库,它将包含所有规则以及将对每个规则采取的操作。

这就是我想要设计数据库的方式:

    ========Rules========
UniqueID        int 
DateStamp       dateTime
RuleStartDate   dateTime
RuleEndDate     dateTime
[condition 1]   varchar
[condition 2]   varchar
...
ActionMethod    int <--Related to the ID of the ActionMethod table
ActionMethodID  int <--what table it relates to depends on the value of ActionMethod

=====ActionMethod=======    
ID              int
ActionMethod    varchar

{this table will have entries like:
10  E-Mail
20  WriteToDir
30  Text}

=======E-mail===========    
ActionMethodID  int
MailTo          varchar
MailFrom        varchar
MailSubject     varchar
MailBody        varchar
IsUrgent        bool

======WriteToDir======= 
ActionMethodID  int
DirToWriteTo    varchar

=======Text============ 
ActionMethodID  int
phoneNumber     varchar

通过这种方式,我应该能够在以后添加更多操作,而无需重构我的规则表。它避免了这样的设计:

    ========Rules========
UniqueID        int 
DateStamp       dateTime
RuleStartDate   dateTime
RuleEndDate     dateTime
[condition 1]   varchar
[condition 2]   varchar
...
ActionMethod    varchar
MailTo          varchar
MailFrom        varchar
MailSubject     varchar
MailBody        varchar
IsUrgent        bool
DirToWriteTo    varchar
phoneNumber     varchar

假设一个人想要一封电子邮件而不是“ActionMethod”等于“email”并填写所有电子邮件字段或者如果一个人想要一条短信,那么“ActionMethod”将等于“text”和phone字段将被填写。

我想要完成的设计是否有更好的设计?

1 个答案:

答案 0 :(得分:0)

在数据库中存储规则不是一个好习惯。我认为你没有真正的理由重新发明轮子。只需使用一个免费的业务规则引擎。