4

我正在使用 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。如果可能的话,他们也可以更改运算符而不是 >=,他们可以将其更改为 <=。

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

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

4

1 回答 1

8

不要将代码存储在数据库中。数据库是用于数据的。代码是为了代码。

请参阅内部平台效应反模式。

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

在以下方面,这对你来说将是一场噩梦:

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

更新:有诸如Drools之类的业务规则平台,但这些平台应该有自己的语言来执行业务规则。SQL 不是做到这一点的最佳语言。

于 2011-07-29T23:11:27.217 回答