Sql server 2005 数据驱动的业务规则。
我正在使用SQLServer2005 我有一张桌子Sql server 2005 数据驱动的业务规则。,sql-server-2005,database-design,business-rules,Sql Server 2005,Database Design,Business Rules,我正在使用SQLServer2005 我有一张桌子 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 如果col1>=126且col2>1,则col3=0 如果col1>=126且col2=他们可以将其更改为不在数据库中存储代码。该数据库用于存储数
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
如果col1>=126且col2>1,则col3=0
如果col1>=126且col2<1,则col3=col1+col4
现在我要做的是将所有这些规则存储在数据库中,并使其成为数据驱动的。这样做的原因是给最终用户更多的灵活性。如果明天业务规则发生更改,最终用户可以灵活地通过GUI进行更改。例如,如果明天业务部门希望将比较值从126更改为200,他们应该能够通过接口更改该值。我尽可能地给予灵活性,比如更改列的能力,就像业务部门应该能够更改规则一样,这样他们就可以将新规则更改为col2,而不是col1。如果可能,他们也可以更改运算符,而不是>=他们可以将其更改为不在数据库中存储代码。该数据库用于存储数据。代码就是代码 请参阅反模式 Maaybe您可以将126和200之类的值存储在数据库中,但我会将它们放在配置文件中。但一旦用户需要如此大的灵活性,以至于你不得不为他们设计一个数据驱动的业务规则引擎,你就完全是在重新发明轮子 从以下几个方面来说,这将是你的噩梦:
- 安全风险,因为用户指定的表达式为代码注入攻击创造了机会
- 可测试性,因为如果规则引擎包含构造性语法,则无法预测操作范围李>
- 性能,因为用户将添加大量的任意表达式和排序条件,而这些表达式和条件在服务器上运行之前不会经过性能测试和优化
- 维护,因为用户将习惯于他们可以做任何事情的想法,但他们可以想象报告比您编写业务规则要复杂得多
更新:有一些业务规则平台,如,但它们应该有自己的语言来执行业务规则。SQL不是实现这一点的最佳语言。Bevare内部平台反模式。Drools(规则引擎)本身不是内部平台反模式的一个例子吗。en.wikipedia.org/wiki/internal-platform_effect。请看这个问题:@Jasper,我看不到与口水有关。这是一个关于在Microsoft SQL Server中实现一种规则引擎的问题。@bill karwin你的看法?@Jasper,我不知道昨天是否是你对这个问题投了反对票,但如果是,那不是鼓励我回答你新问题的最佳方式。请记住,StackOverflow上的人们自愿花我们的时间来帮助您。不管怎样,我已经贴出了一个关于你的另一个问题的答案。