数据驱动的业务规则。

时间:2011-07-29 22:56:53

标签: sql-server-2005 database-design business-rules

我正在使用SQL SERVER 2005。

我有一张桌子

table1(ID,col1,col2,col3,col4);

现在我的业务逻辑如下:

If col1 >= 126 and col2 > 1 then col3 = 0
if col1 >=126 and col2 < 1 then col3 = col1+col4

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

我想更改数据驱动,所以当表中的值发生变化时,我们不需要更改代码。

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

1 个答案:

答案 0 :(得分:8)

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

请参阅Inner-Platform Effect反模式。

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

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

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

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