数据驱动的业务规则.

nic*_*App 5 database-design sql-server-2005 business-rules

我正在使用SQL SERVER 2005.

我有一张桌子

table1(ID,col1,col2,col3,col4);
Run Code Online (Sandbox Code Playgroud)

现在我的业务逻辑如下:

If col1 >= 126 and col2 > 1 then col3 = 0
if col1 >=126 and col2 < 1 then col3 = col1+col4
Run Code Online (Sandbox Code Playgroud)

现在我要做的是将所有这些规则存储在数据库中并使其成为数据驱动的.这样做的原因是为最终用户提供更大的灵活性.如果明天业务规则发生变化,最终用户可以灵活地通过GUI进行更改.例如.如果明天企业想要将比较值从126改为200,他们应该能够通过界面改变它.我尽可能尝试提供灵活性,如更改列的能力,就像业务应该能够更改规则所以而不是col1他们可以将新规则更改为col2.如果可能的话,他们也可以更改操作符而不是> =他们可以将其更改为<=.

我想更改它更多的数据驱动,所以当值是表中的更改时,我们不需要更改代码.

有可能在数据库中做这件事吗?有人可以建议支持此业务规则的数据模型是数据驱动的吗?

Bil*_*win 8

不要将代码存储在数据库中.该数据库用于数据.代码用于代码.

请参阅内部平台效果反模式.

Maaaybe你可以在数据库中存储像126和200这样的值,但我会把它们放在一个配置文件中.但是,一旦用户需要如此大的灵活性,你必须为他们设计一个数据驱动的业务规则引擎,你就完全重新发明了轮子.

通过以下方式对你来说这将是一场噩梦:

  • 安全风险,因为用户指定的表达式为代码注入攻击创建了一个开放.
  • 可测试性,因为如果规则引擎包含构造性语法,则无法预测操作范围.
  • 性能,因为用户将添加大量任意表达式和排序条件,在服务器上运行之前不会通过性能测试和优化.
  • 维护,因为用户将习惯于他们可以做任何事情的想法,但是他们可以想象报告比编写业务规则要处理的报告复杂得多.

更新:有业务规则平台,如Drools,但这些平台应该有自己的语言来执行业务规则.SQL不是最好的语言.