2009-10-05 127 views
1

我們有一個驗證系統,強制用戶從一組相互關聯的字段中選擇一組有效的值。相關領域的驗證

用戶必須填寫列表中的第一個值,並且他們選擇的值決定了他們可以在第二個字段中選擇哪組值。他們在第二個領域的價值選擇限制了第三個領域的選擇。等等。

所有相關字段在樹結構組織的,即,存在從該用戶從開始一個根領域,有各種路徑向下樹從根開始,例如:

 Field1 
    / \ 
    Field2 Field7 
     |  | 
    Field3 etc 
     | 
    Field4 
    / \ 
Field5 Field6 

我們選擇使用以下數據庫模型實現方式:

ID 
Parent ID 
Field Type 
Delimited Chain Data 


1,null,Field1,F1-1 
2, 1,Field2,F1-1|F2-1 
3, 1,Field2,F1-1|F2-2 
4, 1,Field2,F1-1|F2-3 
5, 1,Field2,F1-1|F2-4 
6, 2,Field3,F1-1|F2-1|F3-1 
7, 2,Field3,F1-1|F2-1|F3-2 
8, 3,Field3,F1-1|F2-2|F3-1 
9, 3,Field3,F1-1|F2-2|F3-3 
etc 

的數據值之間的關係是多對多的,如Field3中的多個值與Field2中的多個值相關。

什麼這種結構可以讓你做的是兩兩件事:

  • 輕鬆查詢一組值的特定字段,可以將該字段上方之前選擇的數據。
  • 檢查在樹中給定路徑包含了所有的字段

然而有效值,該系統不斷壯大。其中一些字段有數千個可能的值。總共有大約30個領域。所以,當你在樹上遍歷所有可能的有效值集時,有數千萬個組合。系統開始在接縫處發生吱吱聲,並且數據維護的數值變得困難。

我的問題是:

  • 有沒有人碰到類似的相互關聯的領域驗證問題?你是如何解決它的?
  • 是否有任何產品或開源庫(最好是基於Java的)可以幫助解決包含如此大量組合的類似問題?
  • 對替代實施策略有任何建議嗎?

感謝。

回答

1

看看規則引擎。他們使用Rete Algorithm加快了進行數百萬次比較所需的時間,使用內存而不是CPU。

JBoss Drools可能值得一看。

這是您設置決策邏輯的方式quickest overview

+0

謝謝。我認爲規則引擎更像商業規則,例如檢查一個人年齡在18至25歲之間? – 2009-10-05 20:20:05

+0

他們當然是爲了商業規則,但是你所描述的聲音與我有關。 :-) – 2009-10-06 15:13:45

+0

所以你可以問Drool的東西,如「如果字段1的值是A,字段2的值是B,那麼字段3的可能值是多少?」? – 2009-10-13 07:36:28

1

如何在PMML文檔中描述您的規則並在每個節點上實現具有謂語能力的訪問者。

http://www.dmg.org/v4-0/TreeModel.html

PMML涵蓋了不少車型,但樹模型可能會適合您需求的最佳選擇。