1

好了,所以這裏是「簡單地說」什麼,我試圖完成......用戶需要創建適用於其他用戶訪問組

我的應用程序的用戶可以去創建動態規則新組。他們可以指定其他用戶的標準,他們將允許/拒絕以確定誰可以加入該組。

實施例: 年齡:12 - 16年老 身高:5 - 6英尺

存儲的規則中的數據表將是這樣的: 允許或拒絕標誌(Y/N) AgeStart:12 AgeEnd:16 HeightStart:5 HeightEnd:6

我們便需要檢查用戶是否符合標準,以確定它們是否被允許加入該羣。

這是否有意義? 也可能有違反它的EXCEPTION規則... 如第一個「允許:Y」可能是12歲到30歲,但第二個記錄可能被添加到25歲到28歲的拒絕,所以用戶必須同時滿足進入的標準。

這個嗎?

+0

聽起來微不足道 - 有什麼問題嗎? – 2009-11-13 02:22:08

回答

0

是的,您可以使用DSL對您有意義的任何種類在數據庫中存儲規則,但SQL不是解釋或執行規則的解決方案。

將規則字段提取到應用程序並在其中解釋它會容易得多。您將可以訪問功能豐富的解析器庫來解釋規則,以及編寫OO代碼以應用它的更簡單的方法。

由於您只需要在用戶嘗試加入組時運行規則,因此運行查詢以獲取規則定義的性能成本不應該太高。它肯定會比試圖在SQL中實現規則解析器和執行器花費更多更少

對此的另一種思考方式是:數據庫存儲數據,而不是代碼。您可以通過將規則的定義作爲字符串存儲在數據庫中來對此進行修改,但讓數據庫將它們視爲逐字字符串,而不是嘗試將它們作爲RDBMS可執行的代碼進行整合。

+0

我不同意。只要您希望能夠從多個應用程序訪問數據庫,就必須*希望數據庫包含*所需的所有邏輯*,以確保滿足提供給應用程序的相關合同。另一種看待這種情況的方法是**數據庫應該封裝原始數據並提供與數據的接口,無論是通過視圖,存儲過程還是其他方法。** – 2013-03-22 03:16:39

+0

@ChrisTravers,您是否在TSQL中實現了自定義業務規則DSL分析器?我認爲在你的多個應用程序使用的庫中實現它會更容易。 – 2013-03-22 12:05:56

+0

你爲什麼要在TSQL中做到這一點?在.net中作爲TSQL函數可以在SQL Server後端調用的函數執行。這樣你就可以從.Net客戶端,Linux/Perl客戶端等訪問相同的代碼。 – 2013-03-22 12:07:47

相關問題