2011-07-29 38 views
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。如果可能的話,他們也可以改變操作員而不是> =他們可以將其更改爲< =。

我想改變它更多的數據驅動,所以當表中的值發生變化時,我們不需要更改代碼。

是否有可能在數據庫中做這件事?有人可以建議支持這個業務規則的數據模型是數據驅動嗎?

+2

Bevare的內平臺反模式。 http://en.wikipedia.org/wiki/Inner-platform_effect – Guffa

回答

8

不要在數據庫中存儲代碼。數據庫用於數據。代碼是用於代碼的。

請參閱Inner-Platform Effect反模式。

Maaaybe您可以在數據庫中存儲像126和200這樣的值,但我會將它們放在配置文件中。但一旦用戶需要這麼大的靈活性,你必須爲他們設計一個數據驅動的業務規則引擎,你就完全重新發明了輪子。

它會成爲你的噩夢在以下幾個方面:

  • 安全風險,因爲用戶指定的表達式創建代碼注入攻擊的開口。
  • 可測性,,因爲如果規則引擎包含構造語法,則無法預測操作的範圍。
  • 性能,,因爲用戶將添加大量的任意表達式和排序條件,在服務器上運行之前不會經過性能測試和優化。
  • 維護,因爲用戶將成爲習慣的想法,他們可以做任何事情,但可以想像的報告遠遠複雜得多,你可以把你的業務規則辦理。

更新:有業務規則的平臺,如Drools,但這些都應該有自己的執行業務規則的語言。 SQL不是最好的語言。

+0

我認爲你是對的。謝謝。 – niceApp

+0

不是Drools(規則引擎)本身就是內部平臺反模式的一個例子。 en.wikipedia.org/wiki/Inner-platform_effect? 。請參閱此問題:http://stackoverflow.com/questions/18359590/data-driven-rules-engine-drools – Jasper

+0

@賈斯珀,我沒有看到與Drools的連接。這是一個關於在Microsoft SQL Server中實現一種規則引擎的問題。 –