设计一个数据驱动的逻辑系统

本文关键字:一个 数据驱动 逻辑系统 | 更新日期: 2023-09-27 18:24:22

我正在开发一个税收计算系统,该系统根据一组提供的标准应用各种税收
信息经常更改,所以我试图创建一种方法将所有这些逻辑规则存储在数据库中。

正如你所能想象的,在应用税收时有很多复杂的逻辑
例如,只有当a为真,B小于100,C等于7时,税收才适用

我目前的设计很糟糕
我有一些数据库列用于非常常见的条件筛选,例如位置和纳税年度
对于更复杂的逻辑,我有一个包含JavaScript的列,在代码中,我运行一个解释器来过滤结果。性能和可维护性很差。

我想通过使逻辑完全由数据驱动来改进这种设计,但我很难弄清楚如何在关系数据库中正确地表示这种逻辑。在数据库中对这种逻辑建模的好方法是什么?

设计一个数据驱动的逻辑系统

我已经为一个制造成本生成应用程序处理这个类似的问题一年多了。同样,它考虑了大量的产品设计数据输入和设计基础,以及其他库存考虑因素,如数量、批量采购选项、零件供应商、电气额定值等。结果是直接材料、劳动力和成本的列表。

我从一开始就知道,我需要的是某种查询语言,而不是计算语言,而且它必须是脚本化的,而不是编译的。但我还没有找到一个完美的解决方案:

方法1-SQL我创建了表示我的对象的表和表示属性的列,然后手动键入item_rules表中所需的所有SQL SELECT语句。我所做的是首先将对象保存到数据库中,然后进行

rules = SELECT * FROM item_rules
foreach(rules as _rule)
{
   count = SELECT COUNT(*) FROM (_rule[select_statement]) as T1
   if(count > 1) itemlist.add(_rule[item_that_satisfy_rule])
}

它所做的是获取item_rules表中的每个规则,并针对表中的我的对象运行它。例如,从my_object中选择*A=5且B>10。如果我成功地提取了它,我会得到一个正计数,然后我知道我应该将相应的规则项目包括到我的项目列表中。

方法2-NCALC我没有用SQL格式存储查询,而是找到了NCALC开源表达式解析库。NCALC采用字符串表达式和选项变量并计算结果。字符串表达式可以以纯文本形式存储在文件系统中。

方法3-EXCELEXCEL实际上是一个很好的数据查找软件。您可以在excel中创建公式,然后将应用程序中的数据输入到excel中,然后让excel运行公式以获得结果。优点是很多人知道如何使用excel,所以不同的人可以维护它。

但正如我所说,这些对我来说都不是完美的。我只是在分享,希望我们能得到更好的回报。

如果要采用Jake的方法,也可以使用Dynamic Sql。