我有一个程序可以迭代一组消息,将每个消息与一组规则进行比较,如果它通过,执行一个动作,如发送电子邮件,发送短信或将消息写入目录
这个问题是关于设计一个数据库,它将包含所有规则以及将对每个规则采取的操作。
这就是我想要设计数据库的方式:
========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字段将被填写。
我想要完成的设计是否有更好的设计?
答案 0 :(得分:0)
在数据库中存储规则不是一个好习惯。我认为你没有真正的理由重新发明轮子。只需使用一个免费的业务规则引擎。