一尘不染

在数据库中存储和解析布尔表达式

sql

这是我先前的问题的后续问题,哪种设计模式适合此工作流程要求?。我想知道什么是将布尔表达式存储在数据库中然后在运行时对其进行评估而无需付出太多努力的最佳方法。我有一个要求,每个月底需要在屏幕上执行一组作业,是否可以执行作业的决定取决于先前作业的结果。因此我应该能够在数据库中保存一个表达式,例如E=(A或B)和(C或D)(可以是任何复杂的嵌套表达式)。这意味着如果A或B成功并且C或D成功,则E可以运行。这如何在数据库中表示出来并进行解析并在以后评估条件?

如果“职位E =(A和B)或(C和D)” ,则想这样做(尚未测试)。将其作为树结构存储在表中

JobId DependentJobId SuccessJobId FailureJobId
东亚银行              
ECD 0
ED 1 0
EB 1 0

这表示“如果A成功,则检查B否则检查C”,“如果C成功,则检查D”。进程从没有“
DependentJobId”的最高节点开始,并在叶节点处停止。我将虚拟Job ID设置为“ 1”表示成功,将“
0”表示为失败。如果叶节点为零,则允许作业运行。不知道如何才能最好地在T-sql中对此进行评估。我可能必须使用递归函数。

使用的技术:ASP.NET 3.5,C#3.0,SQL Server 2008


阅读 145

收藏
2021-03-17

共1个答案

一尘不染

我使用问题中提到的方法解决了这个问题。尽管将业务规则放在一个表中不是很好,但是我需要一个快速但可维护的解决方案,因此我选择了它。如果将作业依赖关系存储在表中,则可以轻松对其进行更改,而无需更改代码(一旦投入生产,该代码就很有用)。我编写了一个递归函数来遍历作业依赖关系图并确定结果。感谢您的回复。

2021-03-17